Я пытаюсь обменять код авторизации (который находится в 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;
}
?>
Строка json, имеющаяся в ваших полях сообщений, не является допустимой строкой json. Вы можете проверить JSON здесь:
Вы можете попробовать заполнить массив полями поста, а затем использовать 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 имеют кучу материала по этому вопросу.
Я добавил CURLOPT_SSL_VERIFYPEER => false в ваш массив опций. Это бандит, пока вы не сможете решить проблему с сертификатом. Это потенциально может раскрыть ваши данные кому-то, кто может подглядывать.
Ваша третья проблема связана с типом / форматом данных, которые вы отправляете в данные. Он ожидает application / x-www-form-urlencoded, и вы указали свой тип контента как application / json.
Вот некоторые чтения по этому вопросу:
Как параметры отправляются в запросе HTTP POST?
application / x-www-form-urlencoded или multipart / form-data?
Других решений пока нет …