【问题标题】:Failing to get yahoo access token未能获得雅虎访问令牌
【发布时间】: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”;休息; } }

标签: php email curl yahoo


【解决方案1】:

我找到了如何获取令牌,如果有人需要,这里是代码 无论如何,我所经历的 oauth2 不能与 yahoo 一起使用,下面我正在使用 oauth1.0

    public function get_gmail_access_token($auth_code){
    global $session;
    $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'
    );
    $post = '';
    foreach($fields as $key=>$value) { $post .= $key.'='.$value.'&'; }
    $post = rtrim($post,'&');   

    $url = 'https://accounts.google.com/o/oauth2/token';
    $result = $this->curl_query_post($url,$post);
    $response =  json_decode($result);
    return $response->access_token; 
}   

public function get_yahoo_access_token($token,$verifier){
    global $session;
    $tokens = array();
    $fields=array(
        'oauth_version'=> '1.0',
        'oauth_nonce'=>  rand(),                
        'oauth_consumer_key'=>  $session->get_client_id(),
        'oauth_signature'=>  $session->get_client_secret().'%26'.$session->get_token_secret(),              
        'oauth_timestamp'=>  time()+3600,
        'oauth_signature_method'=>  'plaintext',
        'oauth_token'=>  $token,                        
        'oauth_verifier'=>  $verifier,          
        'oauth_callback'=>  $session->get_redirect_uri()                                
    );

    $post = '';
    foreach($fields as $key=>$value) { $post .= $key.'='.$value.'&'; }
    $post = rtrim($post,'&');       

    $url = 'https://api.login.yahoo.com/oauth/v2/get_token';
    $result = $this->curl_query_post($url,$post);
    $string = parse_str($result);

    $tokens['oauth_token'] = $oauth_token;
    $tokens['oauth_token_secret'] = $oauth_token_secret;
    //$xoauth_yahoo_guid;       
    return $tokens;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-05
    • 2016-07-29
    • 1970-01-01
    • 2013-02-27
    • 2013-05-05
    • 2012-09-05
    • 1970-01-01
    • 2020-08-06
    相关资源
    最近更新 更多