0

我有 2 个 PHP 文件,一个是 index.php,另一个是 paypal.php。paypal.php 的代码是:

    <?php 

session_start();


$client_id = 'xxxxxxxxxxxx';            
$client_secret = 'xxxxxxxxxxxxxxxxxxxx';    
$scopes = 'email profile';                    
$app_return_url = 'http://xxx.com/xxx/paypal.php';  
$nonce = time() . rand();

$code = $_REQUEST["code"];

if(empty($code)) {

    $_SESSION['state'] = md5(uniqid(rand(), TRUE)); 
    $paypal_auth_url = "https://www.paypal.com/webapps/auth/protocol/openidconnect/v1/authorize?"
            ."client_id=".$client_id
            ."&response_type=code"
            ."&scope=".$scopes
            ."&nonce=".$nonce
            ."&state=".$_SESSION['state']
            ."&redirect_uri=".urlencode($app_return_url);

    header("Location: $paypal_auth_url");     
}else{

    $token_url = "https://www.paypal.com/webapps/auth/protocol/openidconnect/v1/tokenservice";    
    $postvals = "client_id=".$client_id
            ."&client_secret=".$client_secret
            ."&grant_type=authorization_code"
            ."&code=".$code;


    $ch = curl_init($token_url);
    $options = array(
                CURLOPT_POST => 1,
                CURLOPT_VERBOSE => 1,
                CURLOPT_POSTFIELDS => $postvals,
                CURLOPT_RETURNTRANSFER => 1,
                CURLOPT_SSLVERSION => 3
    );
    curl_setopt_array( $ch, $options );
    $response = curl_exec($ch);
    curl_close($ch);
    $atoken = json_decode($response);


    $profile_url = "https://www.paypal.com/webapps/auth/protocol/openidconnect/v1/userinfo?"
            ."schema=openid"
            ."access_token=".$atoken->access_token;

    $ch = curl_init($profile_url);
    $options = array(
                CURLOPT_RETURNTRANSFER => 1,
                CURLOPT_SSLVERSION => 3
    );
    curl_setopt_array( $ch, $options );
    $response = curl_exec($ch);
    curl_close($ch);
    $profile= json_decode($response,true);  



    $_SESSION['paypal_user'] = "true";
    $_SESSION['profile'] = $profile;


    echo("<script> top.location.href='index.php'</script>");
}
?>

index.php 的代码是:

    <?php
session_start();

// LOGOUT
if ($_GET['logout'] == 'true'){
    $_SESSION['paypal_user']="";    
}


if (strlen($_SESSION['paypal_user'])){
    // LOGGED USER
    echo "<pre>";
    print_r($_SESSION['profile']);
    echo "</pre>";
    echo "<br><BR> <a href='?logout=true'>LOGOUT</a>";
}else{
    // LOGIN
?>
    <a href='paypal.php' title='Paypal oAuth Login'>
    <img src='https://www.paypalobjects.com/en_US/Marketing/i/btn/login-with-paypal-button.png'>
    </a>
<?
}
?>

任何想法为什么此代码不起作用?我尝试了 var_dump json_decode 并返回 null。

谢谢!

4

2 回答 2

0

只需在访问令牌之前添加'&',他错过了两个变量之间的&符号

$profile_url = " https://www.paypal.com/webapps/auth/protocol/openidconnect/v1/userinfo?" ."schema=openid" ."**&**access_token=".$atoken->access_token;

于 2014-05-07T19:04:47.987 回答
0

我可能是错的,但我相信你的范围需要......

  "scopes": "email https://uri.paypal.com/services/paypalattributes",

URL 是个人资料

于 2014-04-12T18:39:57.647 回答