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 相关文章推荐
分页显示Oracle数据库记录的类之一
Oct 09 PHP
社区(php&amp;&amp;mysql)五
Oct 09 PHP
将数组写入txt文件 var_export
Apr 21 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
May 27 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
Jun 24 PHP
php不写闭合标签的好处
Mar 04 PHP
利用PHP函数计算中英文字符串长度的方法
Nov 11 PHP
PHP限制HTML内容中图片必须是本站的方法
Jun 16 PHP
Symfony生成二维码的方法
Feb 04 PHP
thinkPHP模板中for循环与switch语句用法示例
Nov 30 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
Apr 20 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
Nov 30 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开启gzip页面压缩实例
2013/06/09 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
2015/02/03 PHP
php抽奖概率算法(刮刮卡,大转盘)
2020/04/17 PHP
php+Memcached实现简单留言板功能示例
2017/02/15 PHP
PHP微信网页授权的配置文件操作分析
2019/05/29 PHP
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
2007/08/31 Javascript
jQuery Study Notes学习笔记 (二)
2010/08/04 Javascript
jquery ajax请求实例深入解析
2012/11/26 Javascript
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
jquery 使用简明教程
2014/03/05 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
浅析BootStrap模态框的使用(经典)
2016/04/29 Javascript
浅谈React 属性和状态的一些总结
2016/11/21 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
2018/08/27 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
微信内置开发 iOS修改键盘换行为搜索的解决方案
2019/11/06 Javascript
[50:24]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[01:01:41]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第二场 1月31日
2021/03/11 DOTA
Python中encode()方法的使用简介
2015/05/18 Python
Python基于回溯法子集树模板解决找零问题示例
2017/09/11 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
Python使用Pickle模块进行数据保存和读取的讲解
2019/04/09 Python
django数据库自动重连的方法实例
2019/07/21 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
2019/07/23 Python
python配置文件写入过程详解
2019/10/19 Python
普天C++笔试题
2016/03/20 面试题
大学生毕业的自我鉴定
2013/11/13 职场文书
项目合作计划书
2014/01/09 职场文书
大二学期个人自我评价
2014/01/13 职场文书
企业内控岗位的职责
2014/02/07 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
师德承诺书2015
2015/04/28 职场文书
污水处理保证书
2015/05/09 职场文书
机关干部正风肃纪心得体会
2016/01/15 职场文书