使用PHP cURL在/ oauth2 / access_token上发布数据并将数据作为jSON进行GET

时间:2015-07-14 20:01:40

标签: php json api curl oauth-2.0

我已按照Path API关于如何验证用户的步骤。在教程验证过程中,用户开始重定向到以下URL并提示授予访问权限:

https://partner.path.com/oauth2/authenticate?response_type=code&client_id=THE_CLIENT_ID

之后,服务器将通过URL地址作为授权代码给出响应(我已完成此步骤并获得代码)。

从文档说明中,只要使用 / oauth2 / access_token ,就可以使用客户端ID和客户端密钥(get access_token)来交换代码访问令牌

但我没有任何线索如何通过cURL将数据发送到服务器,我已经尝试了很多 curl_setopt()选项和组合,但它仍然没有给我任何东西。

从文档中,请求看起来像这样:

POST /oauth2/access_token HTTP/1.1
Host: partner.path.com
Content-Type: application/x-www-form-urlencoded
Content-Length: <LENGTH>

grant_type=authorization_code&client_id=CLIENT&client_secret=SECRET&code=CODE

cURL格式如下:

curl -X POST \
     -F 'grant_type=authorization_code' \
     -F 'client_id=CLIENT_ID' \
     -F 'client_secret=CLIENT_SECRET' \
     -F 'code=CODE' \
     https://partner.path.com/oauth2/access_token

服务器会给出这样的回复:

HTTP/1.1 201 CREATED
Content-Type: application/json
Content-Length: <LENGTH>

{
    "code": 201,
    "type": "CREATED"
    "reason": "Created",
    "access_token": <ACCESS_TOKEN>,
    "user_id": <USER_ID>,
}

3 个答案:

答案 0 :(得分:4)

要使用cURL在PHP中执行POST请求,您可以执行以下操作:

$handle = curl_init('https://partner.path.com/oauth2/access_token');
$data = array('grant_type' => 'authorization_code', 'client_id' => 'CLIENT', 'client_secret' => 'SECRET', 'code' => 'CODE');
curl_setopt($handle, CURLOPT_POST, true);
curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
$resp = curl_exec($handle);

然后,您可以使用json_decode($json_encoded)从服务器响应中获取关联数组。

答案 1 :(得分:1)

不确定你是否已经想到了这个,因为我看到它是从前一段时间开始的,但我只是遇到了这个问题,这就是我弄清楚它的方法。

$code = $_GET['code'];
$url = 'https://YourPath/token?response_type=token&client_id='.$client_id.'&client_secret='.$client_secret.'&grant_type=authorization_code&code='.$code.'&redirect_uri='.$redirect_uri;

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST,true);

$exec = curl_exec($ch);
$info = curl_getinfo($ch);
print_r($info);
curl_close($ch);

$json = json_decode($exec);
if (isset($json->refresh_token)){
global $refreshToken;
$refreshToken = $json->refresh_token;
}

$accessToken = $json->access_token;
$token_type = $json->token_type;
print_r($json->access_token);
print_r($json->refresh_token);
print_r($json->token_type);

希望有所帮助

答案 2 :(得分:1)

除了Fox Wilson回答:

curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);