LinkedIn oAuth2 无法获取任何数据
LinkedIn oAuth2 can't get any data
我通过 api 中的链接成功使用了 oAuth v2。
它给了我一个这样的访问令牌:
access_token: "AQUqvUuTXuQ2_Tr9NutHYlQQEDhiTtkHb5Jn5ozgvDfhXzu4l-TP9pE07VqYiH4QTjijzwWFa28tdmjflrtNG3ycyxNAdVx0WsWl9LcfZMSyYqSfBQjtaWtkF4WzoDoxomS7J0b0m-1avrWbsvU3ZpPc388ACtN3d2wCKgK6CXFXoHNMiz4tnHnKhtjU-yzvnFJDRTSHKKBu4lt1zZZ0hr33w-SsXqh4hAZNHxUu6s2itR85RV1cT17_EfHt2UiqeS7wB7_udxxIEYxSOk5GvdXRT5txDveKLjMs1rMhxHf72JcAoGAoxDSQXK2ek2KcFgYOcJ6Zg5L5pDImfjls4mSGWFnU-w"
del: function mkHttp()
expires_in: 5183999
get: function mkHttp()
me: function mkHttpMe()
patch: function mkHttp()
post: function mkHttp()
provider: "linkedin2"
put: function mkHttp()
toJson: function toJson()
<prototype>: Object { … }
但是,不幸的是,在我通过身份验证后,我无法成功执行简单的 get 查询。
这是我第一次 jquery 尝试 :
$(function(){
$('#linkedin-button').on('click', function() {
// Initialize with your OAuth.io app public key
OAuth.initialize('MYKEYISOK');
// Use popup for oauth
OAuth.popup('linkedin2').done(function(result) {
$.get( "https://api.linkedin.com/v2/me", function( data ){
console.log(data),
});
})
})
});
这是 $.get firefox 控制台错误:
{"serviceErrorCode":65604,"message":"Empty oauth2 access token","status":401}
这是我第二次尝试没有 jquery :
result.get( "http://api.linkedin.com/v1/companies/1441/updates", function( data ) {
console.log(data);
});
也不行。
这是我的第 3 次尝试:
$.ajax({
url: 'https://api.linkedin.com/v2/me',
headers: {
'access_token':result.access_token
},
method: 'GET',
dataType: 'json',
success: function(data){
console.log('succes: '+data);
}
});
这是我的第 4 次尝试,现在看来有效了:
$.ajax({
url: 'https://api.linkedin.com/v2/me?oauth2_access_token='+result.access_token,
method: 'GET',
dataType: 'json',
success: function(data){
console.log('succes: '+data);
}
});
但我遇到了一个新错误:
{"serviceErrorCode":100,"message":"Not enough permissions to access: GET /me","status":403}
这是解释:
在授权的第一步中使用 r_liteProfile 而不是 r_basicprofile。使用这个accessToken解决了我所有的问题,太棒了!
我是否将 OAuthv2 设置与 GET 查询一起发送,使其正常工作?
确保您使用了以下范围。
r_liteprofile,r_emailaddress,w_member_social
下面的代码将向您发送授权流程
$params = array('response_type' => 'code',
'client_id' => $this->api_key,
'scope' => $this->scope,//r_liteprofile,r_emailaddress,w_member_social
'state' => uniqid('', true), // unique long string
'redirect_uri' => 'redirect url',
);
// Authentication request
$url = 'https://www.linkedin.com/oauth/v2/authorization?' . http_build_query($params);
接收访问令牌使用下面的代码
$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;
我通过 api 中的链接成功使用了 oAuth v2。
它给了我一个这样的访问令牌:
access_token: "AQUqvUuTXuQ2_Tr9NutHYlQQEDhiTtkHb5Jn5ozgvDfhXzu4l-TP9pE07VqYiH4QTjijzwWFa28tdmjflrtNG3ycyxNAdVx0WsWl9LcfZMSyYqSfBQjtaWtkF4WzoDoxomS7J0b0m-1avrWbsvU3ZpPc388ACtN3d2wCKgK6CXFXoHNMiz4tnHnKhtjU-yzvnFJDRTSHKKBu4lt1zZZ0hr33w-SsXqh4hAZNHxUu6s2itR85RV1cT17_EfHt2UiqeS7wB7_udxxIEYxSOk5GvdXRT5txDveKLjMs1rMhxHf72JcAoGAoxDSQXK2ek2KcFgYOcJ6Zg5L5pDImfjls4mSGWFnU-w"
del: function mkHttp()
expires_in: 5183999
get: function mkHttp()
me: function mkHttpMe()
patch: function mkHttp()
post: function mkHttp()
provider: "linkedin2"
put: function mkHttp()
toJson: function toJson()
<prototype>: Object { … }
但是,不幸的是,在我通过身份验证后,我无法成功执行简单的 get 查询。
这是我第一次 jquery 尝试 :
$(function(){
$('#linkedin-button').on('click', function() {
// Initialize with your OAuth.io app public key
OAuth.initialize('MYKEYISOK');
// Use popup for oauth
OAuth.popup('linkedin2').done(function(result) {
$.get( "https://api.linkedin.com/v2/me", function( data ){
console.log(data),
});
})
})
});
这是 $.get firefox 控制台错误:
{"serviceErrorCode":65604,"message":"Empty oauth2 access token","status":401}
这是我第二次尝试没有 jquery :
result.get( "http://api.linkedin.com/v1/companies/1441/updates", function( data ) {
console.log(data);
});
也不行。
这是我的第 3 次尝试:
$.ajax({
url: 'https://api.linkedin.com/v2/me',
headers: {
'access_token':result.access_token
},
method: 'GET',
dataType: 'json',
success: function(data){
console.log('succes: '+data);
}
});
这是我的第 4 次尝试,现在看来有效了:
$.ajax({
url: 'https://api.linkedin.com/v2/me?oauth2_access_token='+result.access_token,
method: 'GET',
dataType: 'json',
success: function(data){
console.log('succes: '+data);
}
});
但我遇到了一个新错误:
{"serviceErrorCode":100,"message":"Not enough permissions to access: GET /me","status":403}
这是解释:
在授权的第一步中使用 r_liteProfile 而不是 r_basicprofile。使用这个accessToken解决了我所有的问题,太棒了!
我是否将 OAuthv2 设置与 GET 查询一起发送,使其正常工作?
确保您使用了以下范围。
r_liteprofile,r_emailaddress,w_member_social
下面的代码将向您发送授权流程
$params = array('response_type' => 'code',
'client_id' => $this->api_key,
'scope' => $this->scope,//r_liteprofile,r_emailaddress,w_member_social
'state' => uniqid('', true), // unique long string
'redirect_uri' => 'redirect url',
);
// Authentication request
$url = 'https://www.linkedin.com/oauth/v2/authorization?' . http_build_query($params);
接收访问令牌使用下面的代码
$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;