недопустимый тип гранта - oauth 2.0 - получение токена


person Rick    schedule 20.04.2018    source источник
comment
Вы установили application/x-www-form-urlencoded (что правильно), но ваше тело закодировано в JSON. Просто измените свое тело, и оно будет работать нормально   -  person Spomky-Labs    schedule 21.04.2018
comment
Что именно я должен кодировать? Только redirect_uri ? Я попробовал это и получил ту же ошибку. Я попытался закодировать все веб-адреса http и получить адрес http not found для почтового адреса. Я был бы готов заплатить за вашу помощь, чтобы сделать это (предпочтительно) или просто направить меня снова.   -  person Rick    schedule 23.04.2018
comment
Нет, все тело: CURLOPT_POSTFIELDS => http_build_query(['code' => '[code]', 'grant_type' => 'authorization_code', 'redirect_uri' => 'http://website.com/foursquare2.php', 'client_id' => 'f8de67be8dc84e449203fcdd4XXXXXXX', 'client_secret' => 'HS5ZeIVsKW0/qqiO9/XcdeWqnF8vtzQrpY8gcdrxg0BXNZXXXXXXX'])   -  person Spomky-Labs    schedule 25.04.2018


Ответы (1)


Из https://secure.php.net/manual/en/function.curl-setopt.php#refsect1-function.curl-setopt-notes

Передача массива в CURLOPT_POSTFIELDS будет кодировать данные как multipart/form-data, а передача строки в кодировке URL будет кодировать данные как application/x-www-form-urlencoded.

В случае используемого вами API вы должны использовать application/x-www-form-urlencoded

<?php

$curl = curl_init();

$postFields = array(
  'code'          => 'code',
  'grant_type'    => 'authorization_code',
  'redirect_uri'  => 'http://website.com/foursquare2.php',
  'client_id'     => 'f8de67be8dc84e449203fcdd4XXXXXXX',
  'client_secret' => 'HS5ZeIVsKW0/qqiO9/XcdeWqnF8vtzQrpY8gcdrxg0BXNZXXXXXXX',
  );

curl_setopt_array(
    $curl, array(
        CURLOPT_URL => "https://id.shoeboxed.com/oauth/token",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_SSL_VERIFYPEER => false, 
        CURLOPT_POST => 1,  
        CURLOPT_POSTFIELDS => http_build_query($postFields),
    )
);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}
person Glen    schedule 04.05.2018