#api #oauth #linkedin
#API #oauth #LinkedIn
Вопрос:
$postRequest = array(
'grant_type' => 'authorization_code',
'code' => $_REQUEST['code'],
'redirect_uri' => 'mine',
'client_id' => 'mine',
'client_secret' => 'mine',
);
error_log(print_r($postRequest, true));
$cURLConnection = curl_init('https://www.linkedin.com/oauth/v2/accessToken/');
curl_setopt($cURLConnection, CURLOPT_POST, 1);
curl_setopt($cURLConnection, CURLOPT_POSTFIELDS, $postRequest);
curl_setopt($cURLConnection, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
curl_setopt($cURLConnection, CURLOPT_RETURNTRANSFER, true);
$apiResponse = curl_exec($cURLConnection);
error_log(print_r($apiResponse, true));
if(curl_exec($cURLConnection) === false){
error_log(print_r(curl_error($cURLConnection), true));
}
curl_close($cURLConnection);
Выше возвращает ошибку, хотя grant_type включен в https://docs.microsoft.com/en-us/linkedin/shared/authentication/authorization-code-flow:
grant_type Значение этого поля всегда должно быть: authorization_code
{«ошибка»:»invalid_request»,»error_description»: «Отсутствует обязательный параметр «grant_type»»}
grant_type Значение этого поля всегда должно быть: authorization_code
Комментарии:
1. Есть какие-либо обновления по этому поводу? Вы это исправили?
Ответ №1:
я столкнулся с этой проблемой после публикации тела запроса как «x-www-form-urlencoded», это сработало для меня. вот решение на Java. Надеюсь, это будет полезно. также, если вы пытаетесь использовать postmen, попробуйте отправить тело как «x-www-form-urlencoded» в разделе Body -> x-www-form-urlencoded и отправить, это сработает.
ObjectMapper objectMapper = new ObjectMapper();
RestTemplate restTemplate = new RestTemplate();
MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
map.add("grant_type", "authorization_code");
map.add("code", token);
map.add("redirect_uri", redirectyUrl);
map.add("client_id", clientId);
HttpHeaders headers = new HttpHeaders();
headers.set("Accept", MediaType.ALL_VALUE);
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
headers.setBasicAuth(clientId, secret);
HttpEntity entity = new HttpEntity(map, headers);
ResponseEntity<String> res = restTemplate.postForEntity(accessTokenURL, entity, String.class);
String access_token = objectMapper.readTree(res.getBody()).get("access_token").asText();