我正在尝试使用dropbox api来显示主列表文件夹,当我尝试从授权用户那里获取访问令牌时,我遇到了很多问题。
我的代码非常简单,我从代码中获取权限。并且检索令牌的请求就是这个。
$client = new GuzzleHttp\Client();
try{
// $response = $client->get("https://www.dropbox.com/oauth2/authorize?client_id=". $client_id . "&response_type=code");
$response = $client->post("https://api.dropboxapi.com/oauth2/token",
array(
'json' => array(
'grant_type' => 'authorization_code',
'code' => '********ZJtDI'
),
'auth' => array(
$client_id,
$client_secret
),
));
echo $response->getBody();
}catch ( \Exception $e ){
echo $e->getMessage();
}
Client error: `POST https://api.dropboxapi.com/oauth2/token` resulted in a `400 Bad Request` response:
{"error_description": "missing required field \"grant_type\"", "error": "invalid_request"}
答案 0 :(得分:1)
您的POST请求必须包含application/x-www-form-urlencoded
编码的POST数据,而不是JSON字符串。见https://www.dropbox.com/developers-v1/core/docs#oa2-token。并阅读http://docs.guzzlephp.org/en/stable/quickstart.html#post-form-requests以发送包含普通表单字段的POST请求。
答案 1 :(得分:1)
正如Progman所说,你必须使用通常的表单类型(application/x-www-form-urlencoded
)而不是JSON。
Guzzle很简单:
$response = $client->post("https://api.dropboxapi.com/oauth2/token",
array(
'form_params' => array(
'grant_type' => 'authorization_code',
'code' => '********ZJtDI',
'client_id' => $client_id,
'client_secret' => $client_secret,
),
)
);