使用PHP cURL在/oauth2/access_令牌上发布数据,并以jSON的形式获取数据

使用PHP cURL在/oauth2/access_令牌上发布数据,并以jSON的形式获取数据,php,json,api,curl,oauth-2.0,Php,Json,Api,Curl,Oauth 2.0,我已经完成了关于如何验证用户身份的后续步骤。在教程验证过程中,用户开始重定向到以下URL并提示授予访问权限: 在这之后,服务器将通过URL地址以授权代码的形式给出响应(我已经完成了这一步骤并获得了代码) 正如文档中所解释的,应该使用/oauth2/access\u token将代码交换为访问令牌,只要使用客户端ID和客户端密码(获取访问令牌) 但我不知道如何通过cURL将数据发布到服务器,我尝试了很多cURL\u setopt()选项和组合,但仍然没有给我任何帮助 从文档中,请求如下所示: P

我已经完成了关于如何验证用户身份的后续步骤。在教程验证过程中,用户开始重定向到以下URL并提示授予访问权限:

在这之后,服务器将通过URL地址以授权代码的形式给出响应(我已经完成了这一步骤并获得了代码

正如文档中所解释的,应该使用/oauth2/access\u token将代码交换为访问令牌,只要使用客户端ID和客户端密码(获取访问令牌)

但我不知道如何通过cURL将数据发布到服务器,我尝试了很多cURL\u 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 -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>,
}
服务器将给出如下响应:

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 -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>,
}
HTTP/1.1 201已创建
内容类型:application/json
内容长度:
{
“代码”:201,
“类型”:“已创建”
“原因”:“已创建”,
“访问令牌”:,
“用户id”:,
}

要使用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\u decode($json\u encoded)
从服务器响应中获取关联数组。

不确定您是否已经了解到这一点,因为我看到这是很久以前的事了,但我刚刚遇到了这个问题,我就是这样了解的

$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);

希望对福克斯·威尔逊的回答有所帮助:

curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);

我已经在使用这种方法并再次测试,但它仍然不适用于我:(尽管我已经在使用$resp variable中的echo/print\r/var\u dump,但仍然给我一个空白页面,它只是不起作用,还是您收到了任何错误消息?您收到了服务器的任何响应吗?不,我没有收到服务器的任何响应,它只是不起作用:(但是当我使用Postman进行测试时,它工作得很好,你必须使用
http\u build\u query($data)
,否则
内容类型将不会设置为
x-www-form-urlencoded
,你应该将此作为@Fox WilsonI将要给出的所谓答案的注释,但得到“你必须有50个声誉才能评论”