Привет. Решил я значит получить с API линкедина данные о компании. В итоге встал на
Access Token. Используя шаги:
https://developer.linkedin.com/docs/oauth2 завис на 3.
Моя задача сейчас получить токен, который я не могу получить по непонятным мне причинам.
Что я имею:
1)
Я получил client_id и client_secret соответственно. Настроил url на стороне линкедина на
http://demo.test/backend/linkedin.
2)
Собрал URL для авторизации
https://www.linkedin.com/oauth/v2/authorization?response_type=code&client_id=725gqxsyeaz0dr&state=b0316f2ddd3a0af2b44efcff3f60836c&redirect_uri=http%3A%2F%2Fdemo.test%2Fbackend%2Flinkedin
3)
На свой callback я получаю:
grant_type=authorization_code&code=AQQ8POkuOe4TKjLrVaa34bz0HpMEk18Fohvqy9Dv9G6RoApogpDai_AN30QcD6_WTCNwxi4OjvMnZSDOzWjeotoNzFdMdK3hHvekCThothp6KoKq3F3h4dR37AaNOw3UduZ_DUfBwf-cQzt33ht32StJccNo_trFRtKfI-nw&redirect_uri=http%3A%2F%2Fdemo.test%2Fbackend%2Flinkedin&client_id=725gqxsyeaz0dr&client_secret=pxtGcphOs8feMXS0
И тут уже у меня начинаются сомнения, в доке у них явно код указан как
code=987654321grant_type=authorization_code&code=987654321&redirect_uri=https%3A%2F%2Fwww.myapp.com%2Fauth%2Flinkedin&client_id=123456789&client_secret=shhdonottell
А мой получается:
AQQ8POkuOe4TKjLrVaa34bz0HpMEk18Fohvqy9Dv9G6RoApogpDai_AN30QcD6_WTCNwxi4OjvMnZSDOzWjeotoNzFdMdK3hHvekCThothp6KoKq3F3h4dR37AaNOw3UduZ_DUfBwf-cQzt33ht32StJccNo_trFRtKfI-nw
В тоге делаю запрос на получение токена:
if (LinkedIn::isAuthenticated()) {
$url = parse_url("http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
parse_str($url['query'], $url);
$code = $url['code'];
$data = [
"grant_type" => "authorization_code",
"code" => $code,
"redirect_uri" => "http://demo.test/backend/linkedin",
"client_id" => "725gqxsyeaz0dr",
"client_secret" => "pxtGcphOs8feMXS0"
];
$url2 = "https://www.linkedin.com/oauth/v2/accessToken";
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/x-www-form-urlencoded']);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($curl, CURLOPT_URL, $url2);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
$result_array = json_decode($result, true);
dump(http_build_query($data));
dump($result_array);
//we know that the user is authenticated now. Start query the API
//dd(LinkedIn::get('/v1/companies/11812834/updates?format=json'));
}elseif (LinkedIn::hasError()) {
echo "User canceled the login.";
exit();
}
//if not authenticated
$url = LinkedIn::getLoginUrl();
dump($url);
echo "<a href='$url'>Login with LinkedIn</a>";
exit();
}
И получаю ответ:
array:2 [▼
"error" => "invalid_request"
"error_description" => "Unable to retrieve access token: appid/redirect uri/code verifier does not match authorization code. Or authorization code expired. Or external member binding e ▶"
]
Что я делаю не так?
P.S Кей и сикрит фейковые.