使用PHP和cURL的Paypal API

32

我正在尝试按照Paypal API文档中所概述的"第一次调用"。这是我正在遵循的示例:

curl https://api.sandbox.paypal.com/v1/oauth2/token \
 -H "Accept: application/json" \
 -H "Accept-Language: en_US" \
 -u "EOJ2S-Z6OoN_le_KS1d75wsZ6y0SFdVsY9183IvxFyZp:EClusMEUk8e9ihI7ZdVLF5cZ6y0SFdVsY9183IvxFyZp" \
 -d "grant_type=client_credentials"

我已经在PHP中构建了一个curl实例,并使用了上面提到的所有头信息,除了最后一个。在PHP中,-d标志会被转换为哪个curl选项?就我所知,那里没有多少解释。我设法推断出-u表示CURLOPT_USERPWD

3个回答

90

经过一番调查研究,我从其他开发者的问题中搜集了一些零碎信息。使用以下代码,我成功地获取了我的访问令牌:

<?php

$ch = curl_init();
$clientId = "myId";
$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_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);

?>

7

@Lee指出了正确的方向,但如果您使用旧版本的php,则无法使用。但是Lee的版本不会显示错误。请改用以下代码,我只添加了错误部分以查看发生了什么。

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

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_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);
$err = curl_error($ch);

$access_token="";
if ($err) {
  echo "cURL Error #:" . $err;
}
else
{
    $json = json_decode($result);
   // print_r($json->access_token);
    $access_token = $json->access_token;
}

如果您使用的是旧版PHP,则可能无法正常运行,并出现以下错误:

cURL Error #:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

就去stackoverflow搜索一下吧!这里有人讨论这个问题。


1
你可能应该提出修改建议。我会更新我的答案,考虑到你的错误处理。 - Lee

5

JSON美式英语 似乎是默认选项,但为了完全符合要求,请添加以下行:

curl_setopt($ch, CURLOPT_HTTPHEADER, "Accept: application/json, Accept-Language: en_US");

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