2016-12-19 6 views
0

Я пытаюсь получить маркер доступа на API LinkedIn, но я получаю следующее сообщение об ошибке:LinkedIn API OAuth2 - Невозможно получить маркер доступа

{"error":"invalid_request","error_description":"Unable to retrieve access token: appid or redirect uri does not match authorization code or authorization code expired"} 

PHP код:

Получить код авторизации (работа):

$linkedIn = array(
     'clientId' => 'My id', 
     'redirectUri' => WEBSITE.'User/liCallback/', 
     'state' => 'rz5t4er6t7re68t7e6rt6ze9', 
     'scope' => 'r_basicprofile' 
    ); 
    $liLoginUrl = 'https://www.linkedin.com/oauth/v2/authorization?response_type=code&client_id='.$linkedIn['clientId'].'&redirect_uri='.$linkedIn['redirectUri'].'?state='.$linkedIn['state'].'&scope='.$linkedIn['scope']; 

Получить toekn доступа (не работает):

public function liCallback(){ 
    $linkedin = array(
     'grant_type' => 'authorization_code', 
     'code' => $this->get('code'), 
     'redirectUri' => WEBSITE.'User/liCallback/', 
     'client_id' => 'My id', 
     'client_secret' => 'My client secret' 
); 



    $curl_handle=curl_init(); 
    curl_setopt($curl_handle, CURLOPT_URL,'https://www.linkedin.com/oauth/v2/accessToken'); 
    curl_setopt($curl_handle, CURLOPT_POST, 1); 
    echo curl_setopt($curl_handle, CURLOPT_POSTFIELDS, 'grant_type='.$linkedin['grant_type'].'&code='.$this->get('code').'&redirect_uri='.urlencode($linkedin['redirectUri']).'&client_id='.$linkedin['client_id'].'&client_secret='.$linkedin['client_secret']); 
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl_handle, CURLOPT_USERAGENT, 'x-www-form-urlencoded'); 
    $query = curl_exec($curl_handle); 
    var_dump($query); 
    curl_close($curl_handle); 

} 

Я пытаюсь использовать encodeurl(), но у меня такая же ошибка. Я пытаюсь с file_get_content(), но у меня ошибка 400.

Спасибо за помощь!

+0

Кто-нибудь может мне помочь? – mdck

+0

Вверх? Кто-нибудь может мне помочь? – mdck

+0

'file_get_content()' не будет работать, поскольку linkedin требует дополнительного заголовка, который нельзя установить на 'file_get_content()' –

ответ

0

Для меня ниже код работает, я вижу разницу, которую вы использовали CURLOPT_USERAGENT для типа контента, но linkedIn ясно говорит, что он должен быть передан как Content-Type в заголовке. ссылка на форму https://developer.linkedin.com/docs/oauth2 enter image description here

$curl = curl_init('https://www.linkedin.com/oauth/v2/accessToken'); 
curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    'HOST: www.linkedin.com', 
    'Content-Type: application/x-www-form-urlencoded' 
)); 
curl_setopt($curl, CURLOPT_POSTFIELDS, 
    http_build_query(array(
    'client_id' => $linkedin['client_id'], 
    'redirect_uri' => WEBSITE.'User/liCallback/', 
    'client_secret' => $linkedin['client_secret'], 
    'code' => $this->get('code'), 
    'grant_type' => 'authorization_code' 
))); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
$auth = curl_exec($curl); 
$secret = json_decode($auth); 
if (isset($secret->access_token)) { 
    echo $access_token = $secret->access_token; 
} 
+0

Я пробовал ваше решение, но оно не работает. Я получаю ту же ошибку. – mdck

+0

какая ошибка вы получаете? –

+0

У меня такая же ошибка .. – mdck

Смежные вопросы