zoukankan      html  css  js  c++  java
  • QQ 第三方登陆

     
    QQ的账号登录及api操作,使用oauth 2.0    
    官方提供的sdk都太过庞大,这是我自己简化的,提供简单的账号登录、获取个人信息、发布分享等功能,如果需要其他功能可以根据官方的api文档自行添加
     
    [文件] qq.php
    001     <?php
    002     /**
    003      * PHP Library for qq.com
    004      *
    005      * @author php100(http://www.php100.com/)
    006      */
    007     class qqPHP
    008     {
    009         function __construct($appid, $appkey, $access_token=NULL){
    010             $this->appid=$appid;
    011             $this->appkey=$appkey;
    012             $this->access_token=$access_token;
    013         }
    014      
    015         function login_url($callback_url, $scope=''){
    016             $params=array(
    017                 'client_id'=>$this->appid,
    018                 'redirect_uri'=>$callback_url,
    019                 'response_type'=>'code',
    020                 'scope'=>$scope
    021             );
    022             return 'https://graph.qq.com/oauth2.0/authorize?'.http_build_query($params);
    023         }
    024      
    025         function access_token($callback_url, $code){
    026             $params=array(
    027                 'grant_type'=>'authorization_code',
    028                 'client_id'=>$this->appid,
    029                 'client_secret'=>$this->appkey,
    030                 'code'=>$code,
    031                 'state'=>'',
    032                 'redirect_uri'=>$callback_url
    033             );
    034             $url='https://graph.qq.com/oauth2.0/token?'.http_build_query($params);
    035             $result_str=$this->http($url);
    036             $json_r=array();
    037             if($result_str!='')parse_str($result_str, $json_r);
    038             return $json_r;
    039         }
    040      
    041         /**
    042         function access_token_refresh($refresh_token){
    043         }
    044         **/
    045      
    046         function get_openid(){
    047             $params=array(
    048                 'access_token'=>$this->access_token
    049             );
    050             $url='https://graph.qq.com/oauth2.0/me?'.http_build_query($params);
    051             $result_str=$this->http($url);
    052             $json_r=array();
    053             if($result_str!=''){
    054                 preg_match('/callback(s+(.*?)s+)/i', $result_str, $result_a);
    055                 $json_r=json_decode($result_a[1], true);
    056             }
    057             return $json_r;
    058         }
    059      
    060         function get_user_info($openid){
    061             $params=array(
    062                 'openid'=>$openid
    063             );
    064             $url='https://graph.qq.com/user/get_user_info';
    065             return $this->api($url, $params);
    066         }
    067      
    068         function add_share($openid, $title, $url, $site, $fromurl, $images='', $summary=''){
    069             $params=array(
    070                 'openid'=>$openid,
    071                 'title'=>$title,
    072                 'url'=>$url,
    073                 'site'=>$site,
    074                 'fromurl'=>$fromurl,
    075                 'images'=>$images,
    076                 'summary'=>$summary
    077             );
    078             $url='https://graph.qq.com/share/add_share';
    079             return $this->api($url, $params, 'POST');
    080         }
    081      
    082         function api($url, $params, $method='GET'){
    083             $params['access_token']=$this->access_token;
    084             $params['oauth_consumer_key']=$this->appid;
    085             $params['format']='json';
    086             if($method=='GET'){
    087                 $result_str=$this->http($url.'?'.http_build_query($params));
    088             }else{
    089                 $result_str=$this->http($url, http_build_query($params), 'POST');
    090             }
    091             $result=array();
    092             if($result_str!='')$result=json_decode($result_str, true);
    093             return $result;
    094         }
    095      
    096         function http($url, $postfields='', $method='GET', $headers=array()){
    097             $ci=curl_init();
    098             curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE);
    099             curl_setopt($ci, CURLOPT_RETURNTRANSFER, 1);
    100             curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30);
    101             curl_setopt($ci, CURLOPT_TIMEOUT, 30);
    102             if($method=='POST'){
    103                 curl_setopt($ci, CURLOPT_POST, TRUE);
    104                 if($postfields!='')curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
    105             }
    106             $headers[]="User-Agent: qqPHP(piscdong.com)";
    107             curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
    108             curl_setopt($ci, CURLOPT_URL, $url);
    109             $response=curl_exec($ci);
    110             curl_close($ci);
    111             return $response;
    112         }
    113     }
    [文件] config.php 
    1     <?php
    2     //配置文件
    3     header('Content-Type: text/html; charset=UTF-8');
    4      
    5     $qq_k=''; //QQ应用APP ID
    6     $qq_s=''; //QQ应用APP KEY
    7     $callback_url='http://yoururl/callback.php'; //授权回调网址
    8     $scope='get_user_info,add_share'; //权限列表,具体权限请查看官方的api文档
    9     ?>
    [文件] index.php
    01     <?php
    02     session_start();
    03     require_once('config.php');
    04     require_once('qq.php');
    05      
    06     $qq_t=isset($_SESSION['qq_t'])?$_SESSION['qq_t']:'';
    07      
    08     //检查是否已登录
    09     if($qq_t!=''){
    10         $qq=new qqPHP($qq_k, $qq_s, $qq_t);
    11         $qq_oid=$qq->get_openid();
    12         $openid=$qq_oid['openid']; //获取登录用户open id
    13      
    14         //获取登录用户信息
    15         $result=$qq->get_user_info($openid);
    16         var_dump($result);
    17      
    18         /**
    19         //发布分享
    20         $title='开源中国'; //分享页面标题
    21         $url='http://www.oschina.net/'; //分享页面网址
    22         $site=''; //QQ应用名称
    23         $fromurl='';  //QQ应用网址
    24         $result=$qq->add_share($openid, $title, $url, $site, $fromurl);
    25         var_dump($result);
    26         **/
    27      
    28     }else{
    29         //生成登录链接
    30         $qq=new qqPHP($qq_k, $qq_s);
    31         $login_url=$qq->login_url($callback_url, $scope);
    32         echo '<a href="',$login_url,'">点击进入授权页面</a>';
    33     }
    34     ?>
    [文件] callback.php
    01     <?php
    02     //授权回调页面,即配置文件中的$callback_url
    03     session_start();
    04     require_once('config.php');
    05     require_once('qq.php');
    06      
    07     if(isset($_GET['code']) && trim($_GET['code'])!=''){
    08         $qq=new qqPHP($qq_k, $qq_s);
    09         $result=$qq->access_token($callback_url, $_GET['code']);
    10     }
    11     if(isset($result['access_token']) && $result['access_token']!=''){
    12         echo '授权完成,请记录<br/>access token:<input size="50" value="',$result['access_token'],'">';
    13      
    14         //保存登录信息,此示例中使用session保存
    15         $_SESSION['qq_t']=$result['access_token']; //access token
    16     }else{
    17         echo '授权失败';
    18     }
    19     echo '<br/><a href="./">返回</a>';
    20     ?>
  • 相关阅读:
    计算机组成原理——辅助存储器
    什么是区块链?
    博客园添加背景音乐插件
    计算机组成原理——《深入理解计算机系统》|虚拟存储器
    计算机组成原理——主存储器考研题
    C++ 构造函数初始化列表
    C++ 运行时类别识别
    华为,加油!
    计算机组成原理——cache高速缓存存储器
    计算机组成原理——按字节编址与按字编址
  • 原文地址:https://www.cnblogs.com/afei-happy/p/3449119.html
Copyright © 2011-2022 走看看