Я внес предложенное изменение, но все еще получаю аналогичную ошибку:
{"error": "invalid_request", "error_description": "недопустимый тип предоставления"}
Эта ошибка может произойти, если кодировка URL-адреса установлена неправильно. Обновленный код ниже Любая помощь будет принята с благодарностью!
<?php
$client_id = '...';
$redirect_uri = 'http://website.com/foursquare2.php';
$client_secret = '...';
$code = $_REQUEST['code'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
curl_setopt($ch, CURLOPT_URL, "https://id.shoeboxed.com/oauth/token");
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'grant_type' => 'authorization_code',
'code' => $code,
'client_id' => $client_id,
'client_secret' => $client_secret,
'redirect_uri' => $redirect_uri
));
$response = curl_exec($ch);
$err = curl_error($ch);
curl_close($ch);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
?>
Возможный дубликат размещение curl с заголовком application / x-www-form-urlencoded
Спасибо, но необходимы другие изменения. Я внес предложенное изменение в массив («Content-Type: application / x-www-form-urlencoded»). Теперь я получаю сообщение об ошибке {"error": "invalid_request", "error_description": "invalid grant type"} эта ошибка может произойти, если urlencode установлен неправильно. Любые предложения по выполнению этой работы приветствуются.






ваш код отправляет данные в формате multipart/form-data. когда вы передаете CURLOPT_POST массив, curl автоматически кодирует данные в этом массиве в формате multipart/form-data. затем вы сообщаете серверу своим заголовком, что this data is in application/x-www-form-urlencoded format, и сервер попытается проанализировать его как таковой и потерпит неудачу, таким образом полученная вами ошибка.
Во-первых, полностью избавьтесь от curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));. если вы используете application / x-www-form-urlencoded, php / curl автоматически добавит этот заголовок для вас, и, в отличие от вас, php / curl не сделает никаких опечаток (разработчики получили автоматизированные тестовые костюмы, чтобы убедиться, что это все правильно перед каждым выпуском), аналогично, если вы используете формат multipart/form-data, php / curl добавит этот заголовок за вас, поэтому не добавляйте эти 2 конкретных заголовка вручную.
если вы хотите использовать формат multipart/form-data, просто избавьтесь от заголовка, говорящего иначе. но если вы хотите использовать формат application/x-www-form-urlencoded, PHP имеет встроенную функцию для кодирования в этот формат, называемую http_build_query, так что сделайте
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array(
'grant_type' => 'authorization_code',
'code' => $code,
'client_id' => $client_id,
'client_secret' => $client_secret,
'redirect_uri' => $redirect_uri
)));
(а также избавьтесь от заголовка типа содержимого, он будет добавлен автоматически.)
array("application/x-www-form-urlencoded")может понадобитьсяarray("Content-Type: application/x-www-form-urlencoded")? В любом случае, я подумал, что curl должен автоматически обрабатывать этот заголовок.