我正在尝试使用API
制作PHP
到LinkedIn用户个人资料。
我已经成功注册了我的应用程序,并且我注意到了我的API和密钥以及列出我的重定向网址。
用户从此页面开始:index.php
。此页面包含指向linkedIn对话框的链接:
<a href="https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=<?php echo $api_key ?>&state=<?php echo $state ?>&redirect_uri=<?php echo $redirect_uri ?>">Apply Now</a>
当我点击此链接时,我使用我的详细信息登录LinkedIn,并成功重定向到application_form.php
。现在,我想获取用户个人资料详细信息:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.linkedin.com/v1/people/~");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
var_dump($output);
但是上面的代码导致输出:
"401 Unknown authentication scheme"
经过一些研究后,我想可能是因为此时我还没有获得访问令牌?有人会知道我应该怎么做才能解决这个问题吗?
答案 0 :(得分:1)
对于正在阅读此内容且想要使用LinkedIn Profile API
我的问题的解决方案的任何人来说,当我尝试发出第一个请求时,我没有有效的Access Token
。
我做的第一件事是创建一个链接,将用户引导到LinkedIn
身份验证对话框。
接下来,用户将选择批准或拒绝我的应用程序请求以访问其个人资料。无论他们选择什么,他们都会被重定向到我的redirect url
。
从这里开始,我现在有一个access code
我可以用它来请求access token
,从而进行api调用。
if (isset($_GET['error'])) {
echo $_GET['error'] . ': ' . $_GET['error_description'];
} elseif (isset($_GET['code'])) {
getAccessToken();
//$user = fetch('GET', '/v1/people/~:(firstName,lastName)');//get name
//$user = fetch('GET', '/v1/people/~:(phone-numbers)');//get phone numbers
$user = fetch('GET', '/v1/people/~:(location:(name))');//get country
var_dump($user);
}
我根据LinkedIn开发者网站上的代码使用的getAccessToken()
方法
https://developer.linkedin.com/documents/code-samples
function getAccessToken() {
$params = array(
'grant_type' => 'authorization_code',
'client_id' => 'MY API KEY',
'client_secret' => 'MY SECRET KEY',
'code' => $_GET['code'],
'redirect_uri' => 'MY REDIRECT URL',
);
// 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);
// 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
return true;
}
然后是fetch()
方法,也来自LinkedIn API
function fetch($method, $resource, $body = '') {
$opts = array(
'http' => array(
'method' => $method,
'header' => "Authorization: Bearer " .
$_SESSION['access_token'] . "\r\n" .
"x-li-format: json\r\n"
)
);
$url = 'https://api.linkedin.com' . $resource;
if (count($params)) {
$url .= '?' . http_build_query($params);
}
$context = stream_context_create($opts);
$response = file_get_contents($url, false, $context);
return json_decode($response);
}
通过以上操作,我向API
发出请求没有问题。公平地对Cbroe进行了评论。我错过了这些信息。如果他/她想留下答案,我很乐意接受,但只是因为我已经解决了我遇到问题的任何人。