Я боролся со следующим кодом в течение некоторого времени. Я получаю следующую ошибку: {«error»: «invalid_request», «error_description»: «неверный тип гранта»}.
Доступна дополнительная документация по API, над которым я работаю Вот::
<?php
$curl = curl_init();
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 => "{\"code\": \"['code']\",\"grant_type\":\"authorization_code\",\"redirect_uri\": \"http://website.com/foursquare2.php\",\"client_id\": \"f8de67be8dc84e449203fcdd4XXXXXXX\",\"client_secret\": \"HS5ZeIVsKW0/qqiO9/XcdeWqnF8vtzQrpY8gcdrxg0BXNZXXXXXXX\"}",
CURLOPT_HTTPHEADER => array(
"application/x-www-form-urlencoded")
));
/*
//Another Attempt at it is below
curl -d code=['code'] \
-d grant_type=authorization_code \
--data-urlencode redirect_uri='http://website.com/foursquare2.php' \
-u f8de67be8dc84e449203fcdd44abad5a:HS5ZXXXXXXX/qqiO9/XcdeWqnF8vtzQrpY8gcdrxg0BXNXXXXXXX \
-XPOST https://id.shoeboxed.com/oauth/token
*/
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
?>
От 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;
}
Других решений пока нет …