Php 与PayPal连接:获取状态400(错误请求)

Php 与PayPal连接:获取状态400(错误请求),php,paypal,paypal-sandbox,paypal-rest-sdk,paypal-connect,Php,Paypal,Paypal Sandbox,Paypal Rest Sdk,Paypal Connect,在基于访问代码获取访问令牌期间,我面临来自PayPal的400个错误请求响应。我浏览下面的参考链接 我完美地遵循了5个步骤,但通过第6步解决了问题。请参见下面的我的代码: 请求部分: $curl = curl_init(); $base_token = "{client_id:secret}"; $data = array( CURLOPT_URL => "https://api.sandbox.paypal.com/v1/oauth2/token", CURLOPT_

在基于访问代码获取访问令牌期间,我面临来自PayPal的400个错误请求响应。我浏览下面的参考链接

我完美地遵循了5个步骤,但通过第6步解决了问题。请参见下面的我的代码:

请求部分:

$curl = curl_init();

$base_token = "{client_id:secret}";

$data = array(
    CURLOPT_URL => "https://api.sandbox.paypal.com/v1/oauth2/token",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => array(
        'grant_type' => 'authorization_code',
        'code' => '{authorization_code}'
    ),
    CURLOPT_HTTPHEADER => array(
        "Authorization: Basic ".$base_token,
    ),
);
curl_setopt_array($curl,$data );
$response = curl_exec($curl);
curl_close($curl);
stdClass Object (
    [name] => Bad Request
    [debug_id] => 5837077aa8787
    [message] => java.lang.IllegalArgumentException
    [details] => Array
        (
        )
)
响应部分:

$curl = curl_init();

$base_token = "{client_id:secret}";

$data = array(
    CURLOPT_URL => "https://api.sandbox.paypal.com/v1/oauth2/token",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => array(
        'grant_type' => 'authorization_code',
        'code' => '{authorization_code}'
    ),
    CURLOPT_HTTPHEADER => array(
        "Authorization: Basic ".$base_token,
    ),
);
curl_setopt_array($curl,$data );
$response = curl_exec($curl);
curl_close($curl);
stdClass Object (
    [name] => Bad Request
    [debug_id] => 5837077aa8787
    [message] => java.lang.IllegalArgumentException
    [details] => Array
        (
        )
)

将数组传递给CURLOPT_POSTFIELDS会将内容类型设置为
multipart/form data
。这是错误的

您需要将查询字符串传递给CURLOPT_POSTFIELDS

CURLOPT_POSTFIELDS => http_build_query(array(
        'grant_type' => 'authorization_code',
        'code' => '{authorization_code}'
    )),

将数组传递给CURLOPT_POSTFIELDS会将内容类型设置为
multipart/form data
。这是错误的

您需要将查询字符串传递给CURLOPT_POSTFIELDS

CURLOPT_POSTFIELDS => http_build_query(array(
        'grant_type' => 'authorization_code',
        'code' => '{authorization_code}'
    )),

解决问题请参阅下面的代码:

$base_token = '{client_id:secret}';

$curl = curl_init();

$data = array(
    CURLOPT_URL => "https://api.sandbox.paypal.com/v1/oauth2/token",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_POSTFIELDS => http_build_query(array(
        'grant_type'=>'authorization_code',
        'code'=> $request->code,
    )),
    CURLOPT_HTTPHEADER => array(
        "Content-Type: application/x-www-form-urlencoded",
    ),
    CURLOPT_USERPWD => $base_token
);

curl_setopt_array($curl, $data);

$response = curl_exec($curl);
curl_close($curl);

解决问题请参阅下面的代码:

$base_token = '{client_id:secret}';

$curl = curl_init();

$data = array(
    CURLOPT_URL => "https://api.sandbox.paypal.com/v1/oauth2/token",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_POSTFIELDS => http_build_query(array(
        'grant_type'=>'authorization_code',
        'code'=> $request->code,
    )),
    CURLOPT_HTTPHEADER => array(
        "Content-Type: application/x-www-form-urlencoded",
    ),
    CURLOPT_USERPWD => $base_token
);

curl_setopt_array($curl, $data);

$response = curl_exec($curl);
curl_close($curl);

实际上,这些值中没有包含花括号,对吗?(这些通常用于表示“这是一个需要用实际值替换的占位符”,但它们通常不是您需要发送的值的一部分。)此外,您是否实际对令牌进行了base64编码?1。花括号值替换为实际值。2.对于client_id:secret,我刚刚使用了实际值,这是从PayPal应用程序获得的。我认为client_id和secret都是贝宝端的base64编码。你实际上没有在这些值中包含花括号,对吗?(这些通常用于表示“这是一个需要用实际值替换的占位符”,但它们通常不是您需要发送的值的一部分。)此外,您是否实际对令牌进行了base64编码?1。花括号值替换为实际值。2.对于client_id:secret,我刚刚使用了实际值,这是从PayPal应用程序获得的。我认为客户端id和secret都是PayPal端的base64编码。我尝试了您的建议,但出现了错误,请参阅stdClass对象([error]=>无效的客户端[error\u description]=>客户端身份验证失败)查看我的请求代码。在使用base64\u encode()后,您似乎不是base64编码您的凭据,我从PayPal回调响应中获取了错误stdClass对象([error]=>无效的\u authz\u代码[error\u description]=>在缓存中找不到授权代码)。请使用curl从命令行中尝试相同的代码。我尝试了您的建议,但出现了错误,请参阅stdClass对象([error]=>无效的\u客户端[error\u description]=>客户端身份验证失败)查看我的请求代码看起来您不是base64编码您的凭证使用base64\u encode()后,我收到了错误stdClass对象([error]=>无效的\u身份验证代码[error\u description]=>我从PayPal回调响应中获取的授权代码(缓存中未找到)。请使用curl从命令行中尝试相同的代码。请给你的答案添加一些解释-你改变了什么,为什么?请记住,其他人应该能够从你的答案中学习。请在你的答案中添加一些解释-你改变了什么,为什么?记住,其他人应该能够从你的答案中学习