PHP调用QQ互联接口实现QQ登录网站功能示例


Posted in PHP onOctober 24, 2019

本文实例讲述了PHP调用QQ互联接口实现QQ登录网站功能。分享给大家供大家参考,具体如下:

调用QQ登录接口,首先要到QQ互联完善开发者认证信息,并通过审核,然后创建一个网站应用,获得APP ID和APP Key,通过审核后即可调用基本接口get_user_info(获得用户信息),实现QQ登录网站功能。

PHP调用QQ互联接口实现QQ登录网站功能示例

PHP调用QQ互联接口实现QQ登录网站功能示例

废话不多,上示例代码(QQ登录李维山博客):

<?php
  header("Content-Type: text/html;charset=utf-8");
  //应用APP ID
  $app_id = "101486017";
  //应用APP Key
  $app_secret = "13a1811780f29d7a5b64e598c38a4494";
  //应用填写的网站回调域
  $my_url = "http://www.msllws.top/qqlogin";
  //Step1:获取Authorization Code
  session_start();
  $code = $_REQUEST["code"];//存放Authorization Code
  if(empty($code)) {
    //state参数用于防止CSRF攻击,成功授权后回调时原样带回
    $_SESSION['state'] = md5(uniqid(rand(), TRUE));
    //拼接URL
    $dialog_url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=".$app_id."&redirect_uri=".urlencode($my_url)."&state=".$_SESSION['state'];
    echo("<script> top.location.href='".$dialog_url."'</script>");
  }
  //Step2:通过Authorization Code获取Access Token
  if($_REQUEST['state'] == $_SESSION['state'] || 1) {
    //拼接URL
    $token_url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&"."client_id=".$app_id."&redirect_uri=".urlencode($my_url)."&client_secret=".$app_secret."&code=".$code;
    $response = file_get_contents($token_url);
    //如果用户临时改变主意取消登录,返回true!==false,否则执行step3 
    if (strpos($response, "callback") !== false) {
      $lpos = strpos($response, "(");
      $rpos = strrpos($response, ")");
      $response = substr($response, $lpos + 1, $rpos - $lpos -1);
      $msg = json_decode($response);
      if (isset($msg->error)) {
        echo "<h3>error:</h3>".$msg->error;
        echo "<h3>msg :</h3>".$msg->error_description;
        exit;
      }
    }
    //Step3:使用Access Token来获取用户的OpenID
    $params = array();
    parse_str($response, $params);//把传回来的数据参数变量化
    $graph_url = "https://graph.qq.com/oauth2.0/me?access_token=".$params['access_token'];
    $str = file_get_contents($graph_url);
    if (strpos($str, "callback") !== false) {
      $lpos = strpos($str, "(");
      $rpos = strrpos($str, ")");
      $str = substr($str, $lpos + 1, $rpos - $lpos -1);
    }
    $user = json_decode($str);//存放返回的数据 client_id ,openid
    if (isset($user->error)) {
      echo "<h3>error:</h3>".$user->error;
      echo "<h3>msg :</h3>".$user->error_description;
      exit;
    }
    //Step4:使用openid和access_token获取用户信息
    $user_data_url = "https://graph.qq.com/user/get_user_info?access_token={$params['access_token']}&oauth_consumer_key={$app_id}&openid={$user->openid}&format=json";
    $user_data = file_get_contents($user_data_url);//获取到的用户信息
    //以下为授权成功后的自定义操作
    if($user_data){
      // ......
      echo("<script> top.location.href='http://www.msllws.top'</script>");
    }else{
      echo '未知错误';
    }
  }else{
    echo("The state does not match. You may be a victim of CSRF.");
  }

登录效果:

PHP调用QQ互联接口实现QQ登录网站功能示例

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
一个程序下载的管理程序(一)
Oct 09 PHP
PHP中MD5函数使用实例代码
Jun 07 PHP
php合并数组array_merge函数运算符加号与的区别
Oct 31 PHP
php中判断文件空目录是否有读写权限的函数代码
Aug 07 PHP
IIS安装Apache伪静态插件的具体操作图文
Jul 01 PHP
php注册登录系统简化版
Dec 28 PHP
ThinkPHP框架分布式数据库连接方法详解
Mar 14 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
Jun 04 PHP
thinkPHP5框架auth权限控制类与用法示例
Jun 12 PHP
PHP实现关键字搜索后描红功能示例
Jul 03 PHP
Laravel中获取IP的真实地理位置
Apr 01 PHP
PHP对接阿里云虚拟号的实现(号码隐私保护)
Apr 06 PHP
Laravel监听数据库访问,打印SQL的例子
Oct 24 #PHP
在laravel中实现ORM模型使用第二个数据库设置
Oct 24 #PHP
浅谈laravel aliases别名的原理
Oct 24 #PHP
Laravel 模型使用软删除-左连接查询-表起别名示例
Oct 24 #PHP
laravel model 两表联查示例
Oct 24 #PHP
Laravel框架之解决前端显示图片问题
Oct 24 #PHP
laravel中的fillable和guarded属性详解
Oct 23 #PHP
You might like
php实现网站插件机制的方法
2009/11/10 PHP
深入apache配置文件httpd.conf的部分参数说明
2013/06/28 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
PHP函数rtrim()使用中的怪异现象分析
2017/02/24 PHP
JavaScript中两个感叹号的作用说明
2011/12/28 Javascript
jquery事件与函数的使用介绍
2013/09/29 Javascript
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
深入理解jquery中的each用法
2016/12/14 Javascript
DropDownList控件绑定数据源的三种方法
2016/12/24 Javascript
使用Dropzone.js上传的示例代码
2017/10/10 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
使用C语言来扩展Python程序和Zope服务器的教程
2015/04/14 Python
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
Python与Java间Socket通信实例代码
2017/03/06 Python
深入理解Python中的内置常量
2017/05/20 Python
Python快速排序算法实例分析
2017/11/29 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
2018/01/04 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
Python利用heapq实现一个优先级队列的方法
2019/02/03 Python
18个Python脚本可加速你的编码速度(提示和技巧)
2019/10/17 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
2019/12/13 Python
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
Linux机考试题
2015/07/17 面试题
后勤园长自我鉴定
2013/10/17 职场文书
测绘专业大学生职业生涯规划书
2014/02/10 职场文书
创先争优承诺书范文
2014/03/31 职场文书
2015暑假打工实践报告
2015/07/13 职场文书
2016学校先进党组织事迹材料
2016/02/29 职场文书
创业计划书之面包店
2019/09/12 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书
关于Spring配置文件加载方式变化引发的异常详解
2022/01/18 Java/Android
python实现简单的三子棋游戏
2022/04/28 Python