ホームページ >php教程 >php手册 >QQ アカウントのログインと PHP API の操作

QQ アカウントのログインと PHP API の操作

WBOY
WBOYオリジナル
2016-06-21 08:50:041253ブラウズ

QQ アカウントのログインと API 操作では oauth 2.0 を使用します
提供されている公式 SDK は大きすぎるため、簡単なアカウントログイン、個人情報の取得、公開および共有機能を提供します。その他の機能が必要な場合は、公式 API ドキュメントに従って自分で追加できます。

[ファイル] qq.php

001

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);

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

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

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 '点击进入授权页面';

33 }

34 ?>

[ファイル] callback.php

01

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 '授权完成,请记录
access token:';

13  

14     //保存登录信息,此示例中使用session保存

15     $_SESSION['qq_t']=$result['access_token']; //access token

16 }else{

17     echo '授权失败';

18 }

19 echo '
返回';

20 ?>



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。