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     ?>
原文地址:https://www.cnblogs.com/afei-happy/p/3449119.html