用 PHP cURL 获取 PayPal 的访问令牌

18

你好,我正在使用其他人编写的代码,他们据说已经把它运行起来了并成功地检索到了他们的令牌信息。以下是代码:

$ch = curl_init();
$clientId = "myclientid";
$secret = "mysecret";

curl_setopt($ch, CURLOPT_URL, "https://api.sandbox.paypal.com/v1/oauth2/token");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSLVERSION , 6); //NEW ADDITION
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_USERPWD, $clientId.":".$secret);
curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials");

$result = curl_exec($ch);

if(empty($result))die("Error: No response.");
else
{
    $json = json_decode($result);
    print_r($json->access_token);
}

curl_close($ch); //THIS CODE IS NOW WORKING!

我从Paypal API with PHP and cURL中检索到此代码,并看到它被其他人实现,因此我认为它有效。但是,即使我提供正确的客户端ID和密钥,我仍然只收到无响应(也许最近的更新破坏了这段代码?)。

Paypal提供的获取访问令牌指南在这里->https://developer.paypal.com/docs/integration/direct/make-your-first-call/, 但它演示了使用cURL而不是PHP cURL扩展程序的解决方案,对我来说有点难以理解。需要帮助吗?

2个回答

9

现在似乎有必要声明使用哪种类型的SSL版本,因此在插入curl_setopt($ch, CURLOPT_SSLVERSION , 6); //tlsv1.2时,上述代码将起作用。


8

我刚测试了这个API,可以确认这段代码是可用的:

(没有SSL选项)

    $curl = curl_init();
    curl_setopt_array($curl, array(
    CURLOPT_URL => "https://api.sandbox.paypal.com/v1/oauth2/token",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_USERPWD => $PAYPAL_CLIENT_ID.":".$PAYPAL_SECRET,
    CURLOPT_POSTFIELDS => "grant_type=client_credentials",
    CURLOPT_HTTPHEADER => array(
    "Accept: application/json",
    "Accept-Language: en_US"
    ),
    ));

    $result= curl_exec($curl);

    $array=json_decode($result, true); 
    $token=$array['access_token'];

    echo "<pre>";
    print_r($array);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接