2017-08-02 142 views
0

我想,当我在终端使用PHP从BOX API获取令牌?

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. 

一个以上运行它摆脱箱API下面卷曲工作访问令牌是工作,但我试图用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); 

我不知道什么是真正的问题。

回答

1

必须设置为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); 
0

您正在发送不同的参数。 -d option发送一个POST请求,所以你不能在一个GET中混合所有的参数。执行要求在所提供的example

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 
1

我认为这是因为命令行例子做一个POST请求的数据但PHP卷曲请求不是。下面的代码应该有希望让你走上正轨。

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