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 相关文章推荐
PHP脚本的10个技巧(4)
Oct 09 PHP
php 表单数据的获取代码
Mar 10 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
Nov 02 PHP
PHP mb_convert_encoding文字编码的转换函数介绍
Nov 10 PHP
通过php快速统计某个数据库中每张表的数据量
Sep 04 PHP
php通过array_merge()函数合并两个数组的方法
Mar 18 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
Mar 24 PHP
深入理解PHP变量的值类型和引用类型
Oct 21 PHP
PHP根据session与cookie用户登录状态操作类的代码
May 13 PHP
php 算法之实现相对路径的实例
Oct 17 PHP
PHP abstract 抽象类定义与用法示例
May 29 PHP
PHP设计模式(观察者模式)
Jul 07 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
重置版游戏视频
2020/04/09 魔兽争霸
第七节--类的静态成员
2006/11/16 PHP
对Session和Cookie的区分与解释
2007/03/16 PHP
php引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
PHP获取客户端及服务器端IP的封装类
2016/07/21 PHP
php显示页码分页类的封装
2017/06/08 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
一个js写的日历(代码部分网摘)
2009/09/20 Javascript
js实时获取系统当前时间实例代码
2013/06/28 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
2013/10/18 Javascript
jquery easyui 结合jsp简单展现table数据示例
2014/04/18 Javascript
js监控IE火狐浏览器关闭、刷新、回退、前进事件
2014/07/23 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
2014/10/31 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
jQuery使用cookie与json简单实现购物车功能
2016/04/15 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
JSON 数据详解及实例代码分析
2017/01/20 Javascript
jQuery滑动到底部加载下一页数据的实例代码
2017/05/22 jQuery
elementui的默认样式修改方法
2018/02/23 Javascript
vue.js配合$.post从后台获取数据简单demo分享
2018/08/11 Javascript
弱类型语言javascript中 a,b 的运算实例小结
2019/08/07 Javascript
js实现随机div颜色位置 类似满天星效果
2019/10/24 Javascript
[01:08:32]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第二场 1月18日
2021/03/11 DOTA
python获取远程图片大小和尺寸的方法
2015/03/26 Python
Python捕捉和模拟鼠标事件的方法
2015/06/03 Python
Python的requests网络编程包使用教程
2016/07/11 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
PyCharm设置护眼背景色的方法
2018/10/29 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
2020/04/14 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
CSS3实现可翻转的hover效果
2018/05/23 HTML / CSS
美发活动策划书
2014/01/14 职场文书
电子商务个人职业生涯规划范文
2014/02/12 职场文书
模具毕业生推荐信
2014/02/15 职场文书
2015元旦节寄语
2014/12/08 职场文书
升学宴学生致辞
2015/09/29 职场文书