2016-05-28 2 views
0

Я пытаюсь использовать php и cURL для запросов к Fitbit oauth 2.0 api. Я могу получить свой код авторизации, но не могу обменять код на токен. Fitbit api docs скажет (https://dev.fitbit.com/docs/oauth2/#access-token-request), что мне нужно отправить код, идентификатор клиента, перенаправить uri и тип гранта, установленный в 'authorization_code'.PHP cURL тип гранта недействителен/не поддерживается

Как бы то ни было, я получаю сообщение об ошибке при печати ответа.

"ERRORTYPE": "unsupported_grant_type", "сообщение": "The grant_type разрешение не поддерживается Посетите https://dev.fitbit.com/docs/oauth2 для получения дополнительной информации о процессе Fitbit Web API авторизации.."}], "Успех" ложь}

Для жизни меня не удается понять, что я делаю неправильно с приведенным ниже кодом. Какие-либо предложения?

$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

Вы объединяете аргументы 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' 
))); 

См: curl POST format for CURLOPT_POSTFIELDS

+0

Да, спасибо! По какой-то причине даже при помещении их в правильный массив, как вы указали, не работает. Однако использование одной строки, но не как массив, отлично работало! –