基于Thinkphp3.2的qq第三方oauth认证登录扩展类,
由于腾讯oauth sdk写的太多,不能与thinkphp和好的结合,最终想法讲腾讯oauth sdk写成tp的扩展类
先看代码,将代码保存在/library/org/util/Qqconnect.class.php文件中
在__construct方法中你可以直接写你的app_id、app_key和回调地址
也可以根据自己的喜好,改一下代码传参或者写到配置文件。
调用方法:1. 在qq的登录按钮的方法中调用getAuthCode方法
例如:
$qqobj=new \Org\Util\Qqconnect();
$qqobj->getAuthCode();

2.在回调地址的方法中调用getUsrInfo方法
例如:
$qqobj=new \Org\Util\Qqconnect();
$result=$qqobj->getUsrInfo();
就可以了

3.getAuthCode方法中的参数scope根据自身需要添加值get_user_info,list_album,upload_pic,do_like。

  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Copyright (c) 2015.
  4. // +----------------------------------------------------------------------
  5. // |
  6. // +----------------------------------------------------------------------
    1. namespace Org\Util;
    2. /**
    3. *  qq第三方登录认证
    4. */
    5. class Qqconnect {
    6. private static $data;
    7. //APP ID
    8. private $app_id="";
    9. //APP KEY
    10. private $app_key="";
    11. //回调地址
    12. private $callBackUrl="";
    13. //Authorization Code
    14. private $code="";
    15. //access Token
    16. private $accessToken="";
    17. public function __construct(){
    18. $this->app_id="";
    19. $this->app_key="";
    20. $this->callBackUrl="";
    21. //检查用户数据
    22. if(empty($_SESSION['QC_userData'])){
    23. self::$data = array();
    24. }else{
    25. self::$data = $_SESSION['QC_userData'];
    26. }
    27. }
      1. //获取Authorization Code
      2. public function getAuthCode(){
      3. $url="https://graph.qq.com/oauth2.0/authorize";
      4. $param['response_type']="code";
      5. $param['client_id']=$this->app_id;
      6. $param['redirect_uri']=$this->callBackUrl;
      7. //-------生成唯一随机串防CSRF攻击
      8. $state = md5(uniqid(rand(), TRUE));
      9. $_SESSION['state']=$state;
      10. $param['state']=$state;
      11. $param['scope']="get_user_info";
      12. $param =http_build_query($param,'','&');
      13. $url=$url."?".$param;
      14. header("Location:".$url);
      15. }
      16. //通过Authorization Code获取Access Token
      17. private function getAccessToken(){
      18. $url="https://graph.qq.com/oauth2.0/token";
      19. $param['grant_type']="authorization_code";
      20. $param['client_id']=$this->app_id;
      21. $param['client_secret']=$this->app_key;
      22. $param['code']=$this->code;
      23. $param['redirect_uri']=$this->callBackUrl;
      24. $param =http_build_query($param,'','&');
      25. $url=$url."?".$param;
      26. return $this->getUrl($url);
      27. }
      28. //获取openid
      29. private function getOpenID(){
      30. $rzt=$this->getAccessToken();
      31. parse_str($rzt,$data);
      32. $this->accessToken=$data['access_token'];
      33. $url="https://graph.qq.com/oauth2.0/me";
      34. $param['access_token']=$this->accessToken;
      35. $param =http_build_query($param,'','&');
      36. $url=$url."?".$param;
      37. $response=$this->getUrl($url);
      38. //--------检测错误是否发生
      39. if(strpos($response, "callback") !== false){
      40. $lpos = strpos($response, "(");
      41. $rpos = strrpos($response, ")");
      42. $response = substr($response, $lpos + 1, $rpos - $lpos -1);
      43. }
      44. $user = json_decode($response);
      45. if(isset($user->error)){
      46. exit("错误代码:100007");
      47. }
      48. return $user->openid;
      49. }
      50. //获取信息
      51. public function getUsrInfo(){
      52. if($_GET['state'] != $_SESSION['state']){
      53. exit("错误代码:300001");
      54. }
      55. $this->code=$_GET['code'];
      56. $openid=$this->getOpenID();
      57. if(empty($openid)){
      58. return false;
      59. }
      60. $url="https://graph.qq.com/user/get_user_info";
      61. $param['access_token']=$this->accessToken;
      62. $param['oauth_consumer_key']=$this->app_id;
      63. $param['openid']=$openid;
      64. $param =http_build_query($param,'','&');
      65. $url=$url."?".$param;
      66. $rzt=$this->getUrl($url);
      67. return $rzt;
      68. }
      69. //CURL GET
      70. private function getUrl($url){
      71. $ch = curl_init($url);
      72. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      73. curl_setopt($ch, CURLOPT_TIMEOUT, 5);
      74. if (!empty($options)){
      75. curl_setopt_array($ch, $options);
      76. }
      77. $data = curl_exec($ch);
      78. curl_close($ch);
      79. return $data;
      80. }
      81. //CURL POST
      82. private function postUrl($url,$post_data){
      83. $ch = curl_init();
      84. curl_setopt($ch, CURLOPT_POST, 1);
      85. curl_setopt($ch, CURLOPT_URL, $url);
      86. curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
      87. ob_start();
      88. curl_exec($ch);
      89. $result = ob_get_contents();
      90. ob_end_clean();
      91. return $result;
      92. }
      93. }

基于Thinkphp3.2的qq第三方oauth认证登录扩展类的更多相关文章

  1. 第三方OAuth授权登录,QQ、微信(WeChat)、微博、GitHub、码云(Gitee)、淘宝(天猫)、微软(Microsoft )、钉钉、谷歌(Google)、支付宝(AliPay)、StackOverflow

    Netnr.Login 第三方OAuth授权登录 支持第三方登录 三方 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 参考文档 安装 ( ...

  2. laravel 的passport Oauth 认证登录请求 的 oauth_token 重置

    laravel 的passport Oauth 认证登录请求 的 oauth_token 重置    使用API登录认证是需要获取访问令牌,方法为: 参数: grant_type —— 密码模式固定为 ...

  3. 实现OAUTH协议 实现 QQ 第三方登录效果

    1.OAuth的简述 OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全.开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息,并且这是 ...

  4. 一步一步搭建 OAuth 认证服务器

    http://www.fising.cn/2011/03/%E4%B8%80%E6%AD%A5%E4%B8%80%E6%AD%A5%E6%90%AD%E5%BB%BA-oauth-%E8%AE%A4% ...

  5. Oauth认证简介

    Oauth是什么: 1.Oauth是一种安全认证的协议: 2.Oauth为用户资源的授权提供了一个安全的.开放而又简易的标准: 3.Oauth的授权不会使第三方触及到用户的账号信息(用户名和密码). ...

  6. 服务端API的OAuth认证实现

    http://stackoverflow.com/questions/12499602/body-joints-angle-using-kinect?rq=1 新浪微博跟update相关的api已经挂 ...

  7. Oauth认证协议

    原文地址腾讯QQ第三方登录的实现原理? Oauth当中的角色: 1.Service Provider(服务提供方): 服务提供方通常是网站,在这些网站当中存储着一些受限制的资源,如照片.视频.联系人列 ...

  8. 基于Springboot集成security、oauth2实现认证鉴权、资源管理

    1.Oauth2简介 OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAu ...

  9. Android OAuth认证

    OAuth认证 为了安全地访问在线服务,用户需要在服务上进行身份验证,即要提供他们的身份的证明.对于一个要访问第三方服务的程序来说,安全问题甚至更复杂.不仅仅是用户需要在访问服务前要进行身份验证,而且 ...

随机推荐

  1. [Luogu 3952] NOIP2017 时间复杂度

    [Luogu 3952] NOIP2017 时间复杂度 一年的时间说长不长,说短,也不短. 一年之内无数次觉得难得可怕的题目,原来也就模拟这么回事儿. #include <cstdio> ...

  2. bat 批量更改文件名

    通过如下批处理命令可实现批量更改文件名: @echo set DIR="%cd%" echo DIR=%DIR% set /p ext=文件类型: set /p find=要替换内 ...

  3. EF出错:Unable to convert MySQL date/time value to System.DateTime

    环境: .Net 4.5 EF6 MySQL 错误提示: MySql.Data.Types.MySqlConversionException : Unable to convert MySQL dat ...

  4. 20155305乔磊2016-2017-2《Java程序设计》第八周学习总结

    20155305乔磊2016-2017-2<Java程序设计>第八周学习总结 教材学习内容总结 通用API 日志API 1.java.util.logging包提供了日志功能相关类与接口, ...

  5. sklearn进行拟合

    # codind:utf-8 from sklearn.linear_model import SGDRegressor,LinearRegression,Ridge from sklearn.pre ...

  6. [转]softmax函数详解

    答案来自专栏:机器学习算法与自然语言处理 详解softmax函数以及相关求导过程 这几天学习了一下softmax激活函数,以及它的梯度求导过程,整理一下便于分享和交流. softmax函数 softm ...

  7. excel导入时候日期格式转成date

    最近在做导入的时候发现,excel中设置数值格式是不能有日期的那些符号出现的,/ - : 之类的,否则就会变成数字到了java后台,设置成日期,比如 yyyy-mm-dd 到了后台也是数字,即距离19 ...

  8. .net 运行中出现的错误解决方法记录

    1.应用程序无法启动,因为应用程序的并行配置不正确.有关详细信息,请参阅应用程序事件日志,或使用命令行sxstrace.exe工具. https://jingyan.baidu.com/article ...

  9. ubuntu 16.04 网卡配置 虚拟机上网

    看所有网卡(包括未启动的) ifconfig -a 或者 ip link 查看当前网卡配置,打开配置文件/etc/network/interfaces 设置静态IP(dhcp 为动态获取,static ...

  10. 【鬼脸原创】谷歌扩展--知乎V2.0

    目的: 用键盘替代鼠标,做一个安静刷知乎的美男(女)子! 功能:   功能 按键 说明 直接定位到搜索框 q   打开 首页 w   打开 话题 e   打开 发现 r   打开 消息 m   打开 ...