HI 我们正在我们的网站上使用LinkedIn API 调用来获取我们的网站访问者详细信息,以通过LinkedIn登录他们的个人资料。
该功能工作正常,但突然停止工作,我检查了它。
我们在调用中获得了访问令牌响应,但稍后它的获取函数不起作用意味着没有获得任何值。我添加了一些调试来检查响应和字段值代码,并附上了调试屏幕截图
我试图测试应用程序中显示的类似范围字段
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
但是仍然没有什么变化,比我在代码中重做 changs 是代码
<?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) . "</pre><br /><br />LINKEDIN OBJ:<br /><br /><pre>" . print_r($OBJ_linkedin, TRUE) . "</pre>";
exit;
/* for data write in file */
$file = "../".$userData['linkedin_id'].".txt";
file_put_contents($file, $linkedinMenter_array);
echo $file;
exit;
//header("location:https://example.com/users/signuplinkedin".$userRequiredDetails);
function getAuthorizationCode() {
$params = array('response_type' => 'code',
'client_id' => API_KEY,
'scope' => SCOPE,
'state' => uniqid('', true), // unique long string
'redirect_uri' => REDIRECT_URI,
);
// Authentication request
$url = 'https://www.linkedin.com/uas/oauth2/authorization?' . http_build_query($params);
// Needed to identify request when it returns to us
$_SESSION['state'] = $params['state'];
echo print_r($_SESSION, TRUE) . "n<br>";
echo print_r($params, TRUE) . "n<br>";
echo "Pankaj getAuthorizationCode";
// Redirect user to authenticate
header("Location: $url");
exit;
}
function getAccessToken() {
$params = array('grant_type' => 'authorization_code',
'client_id' => API_KEY,
'client_secret' => API_SECRET,
'code' => $_GET['code'],
'redirect_uri' => REDIRECT_URI,
);
// Access Token request
$url = 'https://www.linkedin.com/uas/oauth2/accessToken?' . http_build_query($params);
// Tell streams to make a POST request
$context = stream_context_create(
array('http' =>
array('method' => 'POST',
)
)
);
// Retrieve access token information
$response = file_get_contents($url, false, $context);
// Native PHP object, please
$token = json_decode($response);
echo print_r($token, TRUE) . "n<br>";
// Store access token and expiration time
$_SESSION['access_token'] = $token->access_token; // guard this!
$_SESSION['expires_in'] = $token->expires_in; // relative time (in seconds)
$_SESSION['expires_at'] = time() + $_SESSION['expires_in']; // absolute time
echo "Pankaj getAccessToken" . "n<br>";
return true;
}
function fetch($method, $resource, $body = '') {
$params = array('oauth2_access_token' => $_SESSION['access_token'],
'format' => 'json',
);
// Need to use HTTPS
$url = 'https://api.linkedin.com' . $resource . '?' . http_build_query($params);
// Tell streams to make a (GET, POST, PUT, or DELETE) request
$context = stream_context_create(
array('http' =>
array('method' => $method,
)
)
);
// Hocus Pocus
$response = file_get_contents($url, false, $context);
//echo($response);
// Native PHP object, please
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:
使用以下代码接收访问令牌
$params = array('grant_type' => 'authorization_code',
'client_id' => $this->api_key,
'client_secret' => $this->api_secret,
'code' => $_GET['code'],
'redirect_uri' => base_url().$this->redirect,
);
// Access Token request
$url = 'https://www.linkedin.com/oauth/v2/accessToken?' . http_build_query($params);
$data_len = strlen(http_build_query($params));
// Tell streams to make a POST request
$context = stream_context_create(
array('http' =>
array('method' => 'POST','header'=> 'Content-Length: 0'
)
)
);
// Retrieve access token information
$response = file_get_contents($url, false, $context);
$token = json_decode($response);
return $token->access_token;
LinkedIn 的 v1 API 已被弃用,您应该通过向 https://api.linkedin.com/v2/me 发送 GET 请求来请求配置文件。
此外,某些用户可能已选择不通过LinkedIn API与第三方应用程序共享其数据。