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_SELF的安全问题
Sep 05 PHP
了解Joomla 这款来自国外的php网站管理系统
Mar 11 PHP
php下封装较好的数字分页方法
Nov 23 PHP
php下安装配置fckeditor编辑器的方法
Mar 02 PHP
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
Aug 22 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
Jun 25 PHP
YII模块实现绑定二级域名的方法
Jul 09 PHP
php实现最简单的MVC框架实例教程
Sep 08 PHP
php运行时动态创建函数的方法
Mar 16 PHP
php中文繁体和简体相互转换的方法
Mar 21 PHP
Yii2中使用asset压缩js,css文件的方法
Nov 24 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
May 28 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
Yii2.0高级框架数据库增删改查的一些操作
2015/11/16 PHP
深入浅析yii2-gii自定义模板的方法
2016/04/26 PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
2016/07/18 PHP
PHP数组生成XML格式数据的封装类实例
2016/11/10 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
收藏一些不常用,但是有用的代码
2007/03/12 Javascript
JavaScript面象对象设计
2008/04/28 Javascript
js中的值类型和引用类型小结 文字说明与实例
2010/12/12 Javascript
javascript scrollTop正解使用方法
2013/11/14 Javascript
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
vue-quill-editor实现图片上传功能
2017/08/08 Javascript
vue项目前端埋点的实现
2019/03/06 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
OpenLayers3实现地图鹰眼以及地图比例尺的添加
2020/09/25 Javascript
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
2017/11/11 Python
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
tensorflow构建BP神经网络的方法
2018/03/12 Python
python 限制函数调用次数的实例讲解
2018/04/21 Python
PyQt编程之如何在屏幕中央显示窗体的实例
2019/06/18 Python
如何通过python计算圆周率PI
2020/11/11 Python
对CSS3选择器的研究(详解)
2016/09/16 HTML / CSS
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
美国椅子和沙发制造商:La-Z-Boy
2020/10/25 全球购物
十佳美德少年事迹材料
2014/02/05 职场文书
销售主管岗位职责范本
2014/02/14 职场文书
人力资源总监工作说明
2014/03/03 职场文书
婚前协议书怎么写
2014/04/15 职场文书
党的群众路线教育学习材料
2014/05/12 职场文书
电子专业毕业生自荐信
2014/05/25 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
科级干部群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
2014年大学生工作总结
2014/11/20 职场文书
鲁冰花观后感
2015/06/10 职场文书