HI Мы используем вызов API LinkedIn на нашем веб-сайте, чтобы получить информацию о посетителях нашего веб-сайта, чтобы войти в его профиль через Linkedin.
Функциональность работала нормально, но вдруг она перестала работать, я зарегистрировался.
Мы получаем Access Token Response при вызове, но позже его функция извлечения не работает, значит, не получает никаких значений. Я добавил некоторую отладку для проверки ответа и код значения поля, и прикреплен скриншот отладки
Я пытался протестировать аналогичные поля, отображаемые в приложении
define('SCOPE', 'r_basicprofile r_emailaddress' --->
define('SCOPE', 'r_liteprofile r_emailaddress'
и обновить код вызова до последнего метода
https://www.linkedin.com/uas/oauth2/authorization ->> https://www.linkedin.com/oauth/v2/authorization
https://www.linkedin.com/uas/oauth2/accessToken? ->>
https://www.linkedin.com/oauth/v2/accessToken
Но все равно ничего не меняется, чем я повторяю изменения в коде, и это код
<code><?php
$config = include(dirname(__FILE__).'/config.php');
// Change these
define('API_KEY', 'XXXXXXXXX');
define('API_SECRET', 'XXXXXXXXX');
//define('REDIRECT_URI', ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on")?'https':'http').'://' . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME']);
define('REDIRECT_URI', ('https://example.com/linkedin/OAuth2.php'));
define('SCOPE', 'r_basicprofile r_emailaddress' );
// You'll probably use a database
session_name('linkedin');
session_start();
// OAuth 2 Control Flow
if (isset($_GET['error'])) {
// LinkedIn returned an error
print $_GET['error'] . ': ' . $_GET['error_description'];
exit;
} elseif (isset($_GET['code'])) {
// User authorized your application
getAccessToken();
} else {
if ((empty($_SESSION['expires_at'])) || (time() > $_SESSION['expires_at'])) {
// Token has expired, clear the state
$_SESSION['access_token'] = '';
}
if (empty($_SESSION['access_token']) || $_SESSION['access_token'] == '') {
// Start authorization process
getAuthorizationCode();
}
}
echo "Fetching" . "<br>";
// Congratulations! You have a valid token. Now fetch your profile
$user = fetch('GET', '/v1/people/~:(id,first-name,last-name,headline,email-address,picture-urls::(original),public-profile-url,picture-url,location,industry,site-standard-profile-request,interests,positions,summary,main-address,phone-numbers,skills:(skill))');
$userData = array('linkedin_id'=>'','first-name'=>'','last-name'=>'','picture-url'=>'','email-address'=>'','public_url'=>'','summary'=>'','twitter-account'=>'','headline'=>'','companyname'=>'','designation'=>'');
foreach($user as $key=>$value)
{
if($key=='id')
$userData['linkedin_id'] = $value;
if($key=='firstName')
$userData['first-name'] = $value;
if($key=='lastName')
$userData['last-name'] = $value;
if($key=='pictureUrls')
{
$userData['picture-url'] = $value->values[0];
}
if($key=='pictureUrl' && $userData['picture-url']=='')
{
$userData['picture-url'] = $value;
}
if($key=='emailAddress')
$userData['email-address'] = $value;
if($key=='publicProfileUrl'){
$userData['public_url'] = $value;
}
if($key=='summary')
$userData['summary'] = $value;
if($key=='twitter-accounts')
{
foreach($value as $key=>$val)
{
if($key=='twitter-account')
{
$valueTwit = json_encode($val);
$valueTwit = json_decode($valueTwit,true);
$userData['twitter-account'] = $userData['twitter-account'].",".$valueTwit['provider-account-name'];
}
}
$userData['twitter-account'] = substr($userData['twitter-account'],1,strlen($userData['twitter-account']));
}
if($key=='headline')
$userData['headline'] = $value;
if($key=='positions')
{
foreach($value as $key1=>$val)
{
if($key1=='values')
{
$company_array = $val[0];
foreach($company_array as $key2=>$val1)
{
if($key2=='company')
{
foreach($val1 as $key3=>$val3)
{
if($key3=='name')
{
$userData['companyname'] = $val3;
}
}
}
}
}
}
}
if($key=='positions')
{
foreach($value as $keys1=>$vals)
{
if($keys1=='values')
{
$company_array1 = $vals[0];
foreach($company_array1 as $keys2=>$vals1)
{
if($keys2=='title')
{
$userData['designation'] = $vals1;
}
}
}
}
}
}
$userRequiredDetails = "";
$random = rand();
$userRequiredDetails.="?oid=".$userData['linkedin_id']."&email=".$userData['email-address']."&random=".$random;
$linkedinMenter_array =array('oid'=> $userData['linkedin_id']."<br/>",'first_name'=>$userData['first-name']."<br/>",'last_name'=>$userData['last-name']."<br/>",'image'=>$userData['picture-url']."<br/>",'email'=>$userData['email-address']."<br/>",'public_url'=>$userData['public_url']."<br/>",'summary'=>$userData['summary']."<br/>",'twitter-account'=>$userData['twitter-account']."<br/>",'headline'=>$userData['headline']."<br/>", 'companyname'=>$userData['companyname']."<br/>", 'designation'=>$userData['designation']."<br/>",'questionId'=>$questionId, 'questionURL'=>$questionURL, 'projectId'=>$projectId, 'directoryConsultationId'=>$directoryConsultationId, 'feedbackId' => $feedbackId, 'mentorshipId' => $mentorshipId, 'plan_id' => $plan_id, 'planUserId' => $planUserId, 'sresult' => $sresult, 'projectUserId' => $projectUserId);
echo "Request token retrieval failed:<br /><br />RESPONSE:<br /><br /><pre>" . print_r($linkedinMenter_array, TRUE) . "
LINKEDIN OBJ:
" . print_r($OBJ_linkedin, TRUE) . "
";
выход;
/ * для записи данных в файл * /
$ file = "../".$userData['linkedin_id'].".txt";
file_put_contents ($ file, $ linkedinMenter_array);
echo $ file;
выход;
// заголовок ( "место:
https://example.com/users/signuplinkedin".$userRequiredDetails);
function getAuthorizationCode () {
$ params = array ('response_type' => 'code',
'client_id' => API_KEY,
'scope' => SCOPE,
'state' => uniqid ('', true), // уникальная длинная строка
'redirect_uri' => REDIRECT_URI,
);
// запрос аутентификации
$ url = '
https://www.linkedin.com/uas/oauth2/authorization?'. http_build_query ($ PARAMS);
// Необходимо идентифицировать запрос при его возврате к нам
$ _SESSION ['state'] = $ params ['state'];
echo print_r ($ _ SESSION, TRUE). "\ П
";
echo print_r ($ params, TRUE). "\ П
";
echo "Pankaj getAuthorizationCode";
// Перенаправить пользователя для аутентификации
заголовок ("Location: $ url");
выход;
}
function getAccessToken () {
$ params = array ('grant_type' => 'authorization_code',
'client_id' => API_KEY,
'client_secret' => API_SECRET,
'code' => $ _GET ['code'],
'redirect_uri' => REDIRECT_URI,
);
// Доступ к токену
$ url = '
https://www.linkedin.com/uas/oauth2/accessToken?'. http_build_query ($ PARAMS);
// Сообщаем потокам сделать запрос POST
$ context = stream_context_create (
массив ('http' =>
массив ('method' => 'POST',
)
)
);
// Получить информацию о токене доступа
$ response = file_get_contents ($ url, false, $ context);
// Нативный объект PHP, пожалуйста
$ token = json_decode ($ response);
echo print_r ($ token, TRUE). "\ П
";
// Сохраняем токен доступа и время истечения
$ _SESSION ['access_token'] = $ token-> access_token; // береги это!
$ _SESSION ['expires_in'] = $ token-> expires_in; // относительное время (в секундах)
$ _SESSION ['expires_at'] = время () + $ _SESSION ['expires_in']; // абсолютное время
эхо "Pankaj getAccessToken". "\ П
";
вернуть истину;
}
выборка функции ($ method, $ resource, $ body = '') {
$ params = array ('oauth2_access_token' => $ _SESSION ['access_token'],
'format' => 'json',
);
// Нужно использовать HTTPS
$ url = '
https://api.linkedin.com'. $ ресурс. '?' , http_build_query ($ PARAMS);
// Сообщаем потокам сделать запрос (GET, POST, PUT или DELETE)
$ context = stream_context_create (
массив ('http' =>
массив ('метод' => метод $,
)
)
);
// Фокус покус
$ response = file_get_contents ($ url, false, $ context);
// Эхо ($ ответ);
// Нативный объект PHP, пожалуйста
return json_decode ($ response);
}
Получение этого ответа в режиме отладки
stdClass Object ( [access_token] => AQX7maxbOfOpday8AEmpHyagkSKQcS26YYwMsocDx0FeIGPVwopJstJ27bqlSYrP754vT_DY6n1HoSr0kniJYY-RvhqvnX9ab4sczmzOYiqKo5p1ISVydiZJ_SiN-on9Hw12zD3tiktfvIPex6iHIi0dVhZ5-8CWWvdTX2Sj_d7YAusr9dJAmWQiNE3Aowe-i5cLlZSE-sOpzudCm3dns-ou2A4hg_NMLe5RAJcCQ2TlrGOiA29-1rZsN1_SJw5r4ZjLsx0HY8yUKmxmB1CnfOfg31y1RwlsDAaG679ILyGFvEqhdVJhcRrNzsHaI3JrDc1MJZTGAkBDCJt6WK9FexvqYHOLpw [expires_in] => 5184000 )
Pankaj getAccessToken
Fetching
Request token retrieval failed:
RESPONSE:
Array
(
[oid] =>
[first_name] =>
[last_name] =>
[image] =>
[email] =>
[public_url] =>
[summary] =>
[twitter-account] =>
[headline] =>
[companyname] =>
[designation] =>
[questionId] =>
[questionURL] =>
[projectId] =>
[directoryConsultationId] =>
[feedbackId] =>
[mentorshipId] =>
[plan_id] =>
[planUserId] =>
[sresult] =>
[projectUserId] =>
)
LINKEDIN OBJ: