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 25 PHP
php 上一篇,下一篇文章实现代码与原理说明
May 09 PHP
PHP 缓存实现代码及详细注释
May 16 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
Nov 03 PHP
关于PHP语言构造器介绍
Jul 08 PHP
PHP实现数字补零功能的2个函数介绍
May 12 PHP
C/S和B/S两种架构区别与优缺点分析
Oct 23 PHP
phplot生成图片类用法详解
Jan 06 PHP
Laravel中前端js上传图片到七牛云的示例代码
Sep 04 PHP
如何让PHP编码更加好看利于阅读
May 12 PHP
PHP FileSystem 文件系统常用api整理总结
Jul 12 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
Oct 18 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
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
php验证身份证号码正确性的函数
2016/07/20 PHP
jquery检测input checked 控件是否被选中的方法
2014/03/26 Javascript
javascript实用方法总结
2015/02/06 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
2016/05/25 Javascript
angular2+nodejs实现图片上传功能
2017/03/27 NodeJs
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
2018/09/20 jQuery
vue 解决computed修改data数据的问题
2019/11/06 Javascript
Angular8 简单表单验证的实现示例
2020/06/03 Javascript
vue 插槽简介及使用示例
2020/11/19 Vue.js
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
python dict 字典 以及 赋值 引用的一些实例(详解)
2017/01/20 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
对python产生随机的二维数组实例详解
2018/12/13 Python
Python matplotlib画图与中文设置操作实例分析
2019/04/23 Python
python安装pil库方法及代码
2019/06/25 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
通过python实现windows桌面截图代码实例
2020/01/17 Python
K最近邻算法(KNN)---sklearn+python实现方式
2020/02/24 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
2020/06/24 Python
CSS3的column-fill属性对齐列内容高度的用法详解
2016/07/01 HTML / CSS
HTML5的自定义属性data-*详细介绍和JS操作实例
2014/04/10 HTML / CSS
意大利灯具购物网站:Lampade.it
2018/10/18 全球购物
大二法学专业职业生涯规划范文
2014/02/12 职场文书
装修协议书范本
2014/04/21 职场文书
商场消防安全责任书
2014/07/29 职场文书
老龄工作先进事迹
2014/08/15 职场文书
2014银行领导班子群众路线对照检查材料思想汇报
2014/09/17 职场文书
优秀班组事迹材料
2014/12/24 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
仓库管理制度范本
2015/08/04 职场文书
MySQL 自定义变量的概念及特点
2021/05/13 MySQL
postgresql中如何执行sql文件
2023/05/08 PostgreSQL