我正在尝试使用php和cURL向Fitbit oauth 2.0 api发出请求。我可以获取授权码,但无法管理代码交换代码。 Fitbit api文档说(https://dev.fitbit.com/docs/oauth2/#access-token-request)我需要发布代码,客户端ID,重定向uri和授权类型设置为'authorization_code'。
然而,当我打印回复时,我一直收到错误。
“errorType”:“unsupported_grant_type”,“message”:“不支持授权grant_type。有关Fitbit Web API授权流程的详细信息,请访问https://dev.fitbit.com/docs/oauth2。”}],“success”:false}
对于我的生活,我无法解决我在下面的代码中做错了什么。有什么建议?
$code = $_GET['code'];
$url = 'https://api.fitbit.com/oauth2/token';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, array(
'code=' . $code . '&' .
'client_id=' . $oauth2_client_id . '&' .
'redirect_uri=' . $oauth2_redirect . '&' .
'grant_type=authorization_code'
)
);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Authorization: Basic '. base64_encode($oauth2_client_id.':'.$oauth2_secret),
'Content-Type: application/x-www-form-urlencoded'
));
$response = curl_exec($curl);
print_r($response);
答案 0 :(得分:4)
您将POST参数连接到一个字符串然后将其包含在一个数组中,但它们应单独显示;可以按如下方式完成:
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query(array(
'code' => $code,
'client_id' => $oauth2_client_id,
'redirect_uri' => $oauth2_redirect,
'grant_type' => 'authorization_code'
)));