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的分页功能
Mar 21 PHP
PHP批量生成缩略图的代码
Jul 19 PHP
学习discuz php 引入文件的方法DISCUZ_ROOT
Jun 21 PHP
三个类概括PHP的五种设计模式
Sep 05 PHP
ThinkPHP框架实现session跨域问题的解决方法
Jul 01 PHP
PHP实现的简单异常处理类示例
May 04 PHP
php实现留言板功能(会话控制)
May 23 PHP
实例讲解PHP页面静态化
Feb 05 PHP
php获得刚插入数据的id 的几种方法总结
May 31 PHP
PHP count_chars()函数讲解
Feb 14 PHP
PHP cookie与session会话基本用法实例分析
Nov 18 PHP
php与阿里云短信接口接入操作案例分析
May 27 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
ThinkPHP标签制作教程
2014/07/10 PHP
php switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
修改file按钮的默认样式实现代码
2013/04/23 Javascript
禁止拷贝网页内容的js代码
2014/01/22 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
jQuery实现的图文高亮滚动切换特效实例
2015/08/10 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
Vue页面骨架屏的实现方法
2018/05/22 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
javascript中this的用法实践分析
2019/07/29 Javascript
vue之组件内监控$store中定义变量的变化详解
2019/11/08 Javascript
[03:30]完美盛典趣味短片 CSGO2019年度名场面
2019/12/07 DOTA
50行代码实现贪吃蛇(具体思路及代码)
2013/04/27 Python
python分割和拼接字符串
2013/11/01 Python
Python编程中的文件操作攻略
2015/10/16 Python
Python人脸识别初探
2017/12/21 Python
python使用pygame模块实现坦克大战游戏
2020/03/25 Python
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
Python使用Chrome插件实现爬虫过程图解
2020/06/09 Python
pandas.DataFrame.drop_duplicates 用法介绍
2020/07/06 Python
Python+OpenCV图像处理—— 色彩空间转换
2020/10/22 Python
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
联想西班牙官网:Lenovo西班牙
2018/08/28 全球购物
英国定做窗帘和纺织品面料一站式商店:Dekoria
2018/08/29 全球购物
印尼综合在线预订网站:Tiket.com(机票、酒店、火车、租车和娱乐)
2018/10/11 全球购物
Deichmann英国:德国鞋类零售商
2021/01/30 全球购物
保加利亚运动鞋购物网站:SneakerStudio.bg
2020/12/23 全球购物
班长演讲稿范文
2014/04/24 职场文书
锦旗标语大全
2014/06/23 职场文书
2014幼儿园小班工作总结
2014/11/10 职场文书
2014年保卫部工作总结
2014/11/21 职场文书
基层党支部承诺书
2015/04/30 职场文书
2015年毕业实习工作总结
2015/05/29 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js
收音机爱好者玩机13年,简评其使用过的19台收音机
2022/04/30 无线电
JavaScript中10个Reduce常用场景技巧
2022/06/21 Javascript