使用 php 从 BOX API 获取 acess 令牌?



我正在尝试从盒子API获取访问令牌,当我在终端上运行它时,以下curl正在工作

curl https://api.box.com/oauth2/token 
-d  'grant_type=authorization_code&code=CODE&client_id=CLIENT_ID&client_secret=secret_ID' 
-X POST  # This is working.

上面的一个正在工作,但我用 PHP 尝试过同样的事情,但它在我尝试过的以下代码{"error":"invalid_request","error_description":"Invalid grant_type parameter or parameter missing"}1抛出以下错误

$access_token_url = "https://api.box.com/oauth2/token";
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $access_token_url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'grant_type'=>'authorization_code', 
'code'=>'code',
'client_id'=>'id',
'client_secret'=>'secret'
));
$response = curl_exec($ch);
curl_close($ch);

我不知道实际问题是什么。

必须设置为POST参数的数据,而不是HEADER参数

$access_token_url = "https://api.box.com/oauth2/token";
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $access_token_url);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
'grant_type'=>'authorization_code', 
'code'=>'code',
'client_id'=>'id',
'client_secret'=>'secret'
]));
$response = curl_exec($ch);
curl_close($ch);

我认为这是因为命令行示例正在发出 POST 请求,但 PHP curl 请求不是。下面的代码应该希望能让你走上正确的轨道。

<?php
$access_token_url = "https://api.box.com/oauth2/token";
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $access_token_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 
array(
'grant_type'=>'authorization_code', 
'code'=>'code',
'client_id'=>'id',
'client_secret'=>'secret'));
$response = curl_exec($ch);
curl_close($ch);
?>

您正在一起发送不同的参数。 -d 选项发送一个 POST 请求,因此您无法在 GET 中混合所有参数。按照提供的示例执行请求:

curl https://api.box.com/oauth2/token 
-d 'grant_type=authorization_code' 
-d 'code=<MY_AUTH_CODE>' 
-d 'client_id=<MY_CLIENT_ID>' 
-d 'client_secret=<MY_CLIENT_SECRET>' 
-X POST

最新更新