【发布时间】:2015-02-13 10:25:43
【问题描述】:
最近,我正在开发我的社交网络网站,并想导入 gmail、yahoo、hotmail 等联系人。
我已经从 Gmail 中获取了联系人,现在接下来想对 Yahoo 做同样的事情。阅读雅虎文档并遵循我的 gmail 代码,我得到授权屏幕并取回身份验证代码,但无法获取访问令牌。 (我正在使用 curl,我期待与它相关的帮助)。
这里是转储:字符串
'code=hzbp3px&client_id=dj0yJmk9WlJ0a3dmQTQ3ZFcyJmQ9WVdrOVFXRXliSFpMTm1zbWNHbzlNQS0tJnM9Y29uc3VtZXJzZWNyZXQmeD1jZA--&client_secret=5b3a803684538bae27519af3e34f3e268da432a1&redirect_uri=http://localhost/DEVELOPMENT/Grabber.php&grant_type=authorization_code' (length=254)
object(stdClass)[5] public 'error' => string 'invalid_request' (长度=15)
这是我的功能:
public function get_url(){
global $session;
switch ($session->get_provider()) {
case "gmail": return "https://accounts.google.com/o/oauth2/token";
break;
case "yahoo": return "https://api.login.yahoo.com/oauth2/get_token";
break;
}
}
public function curl_query($post,$boolean){
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL,$this->get_url());
curl_setopt($curl,CURLOPT_POST,true);
curl_setopt($curl,CURLOPT_POSTFIELDS,$post);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
$result = curl_exec($curl);
curl_close($curl);
$response = json_decode($result);
var_dump($response);
//exit;
switch ($boolean) {
case "true": return $response->access_token;
case "false": return $response->refresh_token;
}
}
public function get_access_token($auth_code){
global $session;
switch ($session->get_provider()) {
case "gmail": return $this->curl_query($this->post_params($auth_code,'access_token'),true);
case "yahoo":
$accesstoken = $this->curl_query($this->post_params($auth_code,'access_token'),true);
//$refreshtoken = $this->curl_query($this->post_params($accesstoken),false);
return $accesstoken;
}
}
public function post_params($auth_code,$token){
global $session;
if($token == 'access_token'){
$fields=array(
'code'=> $auth_code,
'client_id'=> $session->get_client_id(),
'client_secret'=> $session->get_client_secret(),
'redirect_uri'=> $session->get_redirect_uri(),
'grant_type'=> 'authorization_code'
);
} else if($token == 'refresh_token'){
$fields=array(
'refresh_token'=> $auth_code,
'client_id'=> $session->get_client_id(),
'client_secret'=> $session->get_client_secret(),
'redirect_uri'=> $session->get_redirect_uri(),
'grant_type'=> 'authorization_code'
);
}
$post = '';
foreach($fields as $key=>$value) { $post .= $key.'='.$value.'&'; }
$post = rtrim($post,'&');
var_dump($post);
return $post;
}
【问题讨论】:
-
别难过,一切都会好起来的(在美好的一天)
-
反正我是个快乐的人:)
-
我忘记添加这个函数了,它返回 curl URL -> public function get_url(){ global $session; switch ($session->get_provider()) { case "gmail": return "accounts.google.com/o/oauth2/token";休息;案例“雅虎”:返回“api.login.yahoo.com/oauth2/get_token”;休息; } }