设为首页 收藏本站
查看: 652|回复: 0

[经验分享] QQ的账号登录及PHP api操作

[复制链接]

尚未签到

发表于 2017-4-7 09:38:19 | 显示全部楼层 |阅读模式
QQ的账号登录及api操作,使用oauth 2.0    
官方提供的sdk都太过庞大,这是我自己简化的,提供简单的账号登录、获取个人信息、发布分享等功能,如果需要其他功能可以根据官方的api文档自行添加

 
[文件] qq.php
001<?php

002/**

003 * PHP Library for qq.com

004 *

005 * @author PiscDong (http://www.piscdong.com/)

006 */

007class 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//配置文件

3header('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

02session_start();

03require_once('config.php');

04require_once('qq.php');

05 

06$qq_t=isset($_SESSION['qq_t'])?$_SESSION['qq_t']:'';

07 

08//检查是否已登录

09if($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

03session_start();

04require_once('config.php');

05require_once('qq.php');

06 

07if(isset($_GET['code']) && trim($_GET['code'])!=''){

08    $qq=new qqPHP($qq_k, $qq_s);

09    $result=$qq->access_token($callback_url, $_GET['code']);

10}

11if(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}

19echo '<br/><a href="./">返回</a>';

20?>
  原文转载自:http://ask.itruanjian.com/?note/view/8018.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-361337-1-1.html 上篇帖子: 在PHP中CURL的部分简易用法 下篇帖子: Memcached 的学习:windows下php开memcached扩展
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表