Обменяйте код авторизации на токен доступа в OAuth 2.0

Я пытаюсь обменять код авторизации (который находится в URL этой страницы) на токен доступа, используя oAuth 2.0.

Я использую следующий код php и получаю сообщение об ошибке (ошибка HTTP 500).

Я не могу понять, что не так со следующим кодом. Я удалил фактический идентификатор клиента и т. Д., Чтобы показать код:

<?php
$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => "https://id.shoeboxed.com/oauth/token",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\"grant_type\":\"authorization_code\",\"client_id\": \"f8de67be8dc84e449203fcdd4XXXXXXX\",\"client_secret\": \"HS5ZeIVsKW0/qqiO9/XcdeWqnF8vtzQrpY8gcdrxg0BXNZXXXXXXX\",\"code\": \"['code']\",\"redirect_uri\": \"http://website.com/foursquare2.php"}",
CURLOPT_HTTPHEADER => array(
"content-type: application/json"),
));

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

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
?>

1

Решение

Строка json, имеющаяся в ваших полях сообщений, не является допустимой строкой json. Вы можете проверить JSON здесь:

https://jsonlint.com/

Вы можете попробовать заполнить массив полями поста, а затем использовать json_encode () для кодирования массива в строку json в вашем запросе curl. Это поможет смягчить ошибки при создании строки JSON. Я предпочитаю делать это таким образом.

$postArray = array(

'grant_type' => 'authorization_code',
'client_id' => 'f8de67be8dc84e449203fcdd4XXXXXXX',
'client_secret' => 'HS5ZeIVsKW0/qqiO9/XcdeWqnF8vtzQrpY8gcdrxg0BXNZXXXXXXX',
'code' => '[\'code\']',
'redirect_uri' => 'http://website.com/foursquare2.php'

);


$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => "https://id.shoeboxed.com/oauth/token",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false, //<--- Added this.
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",  //<---You may also try "CURLOPT_POST => 1" instead.
CURLOPT_POSTFIELDS => http_build_query($postArray), //<--Makes your array into application/x-www-form-urlencoded format.
CURLOPT_HTTPHEADER => array(
"application/x-www-form-urlencoded" //<---Change type
)
));

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

curl_close($curl);

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

Ваша новая ошибка является результатом отсутствия соответствующих сертификатов, установленных на вашем сервере. Вот ссылка, с которой можно начать, если это не поможет, ТАК и Google имеют кучу материала по этому вопросу.

Как мне работать с сертификатами с использованием cURL при попытке получить доступ к URL-адресу HTTPS?

Я добавил CURLOPT_SSL_VERIFYPEER => false в ваш массив опций. Это бандит, пока вы не сможете решить проблему с сертификатом. Это потенциально может раскрыть ваши данные кому-то, кто может подглядывать.

Ваша третья проблема связана с типом / форматом данных, которые вы отправляете в данные. Он ожидает application / x-www-form-urlencoded, и вы указали свой тип контента как application / json.

Вот некоторые чтения по этому вопросу:

Как параметры отправляются в запросе HTTP POST?

application / x-www-form-urlencoded или multipart / form-data?

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]