Autenticando com OAuth LinkedIn – PHP+
À partir do dia 01 de Maio de 2019 o método antigo do Linkedin de fazer login em seu site será descontinuado e não funcionará mais, visualizando esta situação montei essa explicação para que vocês consigam entender e aplicar o novo método utilizado por eles.
Primeiro passo:
Para iniciar é necessário criar um aplicativo no Linkedin
Se você já tiver o aplicativo é necessário acessa-lo e modifica-lo
Entre na opção “Auth” e configure o link de retorno do aplicativo.
Esse link é necessário para que o sistema de login funcione corretamente.

Cada aplicativo recebe um ID exclusivo, reserve-o pois iremos utilizar.

O Client Secret recomendamos não revelar a ninguém.
Segundo Passo:
Após tudo isso começamos a programar, criamos primeiro o link de login:
<a href="https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=XXXXX&redirect_uri=XXXXXXX&state=987654321&scope=r_liteprofile">CONECTAR COM O LINKEDIN</a>
client_id = Seu id pego no primeiro passo
redirect_uri = O link colocado no primeiro passo (recomendamos colocar o link com a pagina php que estamos criando)
Terceiro passo:
Após a pessoa clicar no link ela será redirecionada para a pagina do linkedin onde autorizará o acesso, após isso o linkedin redicionará a pessoa para o link colocado no redirect_uri com o CODE, e com esse get faremos o acesso.

Simulando que a pessoa já autorizou faremos a parte onde com o CODE pegamos o ACCESS TOKEN que agora sim com esse acesso conseguimos acessar os dados da pessoa.
$curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'https://www.linkedin.com/uas/oauth2/accessToken?grant_type=authorization_code&code='.$_GET['code'].'&redirect_uri=[link do passo 1]&client_id=[id do passo 1]&client_secret=[secreto do passo 1]', CURLOPT_POST => 1, CURLOPT_POSTFIELDS => [ grant_type => 'authorization_code', code => $_GET['code'], redirect_uri => '[link do passo 1]', client_id => '[id do passo 1]', client_secret => '[secreto do passo 1]' ] ]); $response = curl_exec($curl); curl_close($curl);
com o ACCESS TOKEN em mãos faremos a requisição dos dados da pessoa:
$access_Token = json_decode($response);
if ($access_Token->access_token){
//header
$request_headers = array();
$request_headers[] = 'Authorization: Bearer '.$access_Token->access_token;
$request_headers[] = 'cache-control: no-cache';
$request_headers[] = 'X-Restli-Protocol-Version: 2.0.0';
//nome, foto
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_HTTPHEADER => $request_headers,
CURLOPT_URL => 'https://api.linkedin.com/v2/me?projection=(id,firstName,lastName,profilePicture(displayImage~:playableStreams))'
]);
$response = curl_exec($curl);
curl_close($curl);
//pega os dados
$json_output = json_decode($response, true);
$nome = $json_output["firstName"]["localized"]["pt_BR"].' '.$json_output["lastName"]["localized"]["pt_BR"];
$id = $json_output["id"];
$foto = $json_output["profilePicture"]["displayImage~"]["elements"][3]["identifiers"][0]["identifier"];
echo $id.'<br>';
echo $nome.'<br>';
echo $foto.'<br>';
}
Código completo:
acesso.php
<?
$vurl = "url do passo 1";
$vclientid = "id do client, passo 1";
$vsecreto = "secreto do passo 1";
?>
<a href="https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=<?=$vclientid?>&redirect_uri=<?=vurl?>&state=987654321&scope=r_liteprofile">CONECTAR COM O LINKEDIN</a>
<?
//PARTE 2
if ($_GET['code']){
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => 'https://www.linkedin.com/uas/oauth2/accessToken?grant_type=authorization_code&code='.$_GET['code'].'&redirect_uri='.$vurl.'&client_id='.$vclientid.'&client_secret='.$vsecreto,
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => [
grant_type => 'authorization_code',
code => $_GET['code'],
redirect_uri => $vurl,
client_id => $vclientid,
client_secret => $vsecreto
]
]);
$response = curl_exec($curl);
curl_close($curl);
//PARTE 3
$access_Token = json_decode($response);
if ($access_Token->access_token){
//header
$request_headers = array();
$request_headers[] = 'Authorization: Bearer '.$access_Token->access_token;
$request_headers[] = 'cache-control: no-cache';
$request_headers[] = 'X-Restli-Protocol-Version: 2.0.0';
//nome, foto
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_HTTPHEADER => $request_headers,
CURLOPT_URL => 'https://api.linkedin.com/v2/me?projection=(id,firstName,lastName,profilePicture(displayImage~:playableStreams))'
]);
$response = curl_exec($curl);
curl_close($curl);
$json_output = json_decode($response, true);
$nome = $json_output["firstName"]["localized"]["pt_BR"].' '.$json_output["lastName"]["localized"]["pt_BR"];
$id = $json_output["id"];
$foto = $json_output["profilePicture"]["displayImage~"]["elements"][3]["identifiers"][0]["identifier"];
echo $nome.'<br>';
echo $id.'<br>';
echo $foto.'<br>';
}
}
