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集成FCK的函数代码
Sep 27 PHP
PHP 数据库树的遍历方法
Feb 06 PHP
php 图像函数大举例(非原创)
Jun 20 PHP
php利用header函数实现文件下载时直接提示保存
Nov 12 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
Sep 30 PHP
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
Apr 13 PHP
PHP中ini_set与ini_get用法实例
Nov 04 PHP
twig模板常用语句实例小结
Feb 04 PHP
php使用curl代理实现抓取数据的方法
Feb 03 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
Mar 29 PHP
php 命名空间(namespace)原理与用法实例小结
Nov 13 PHP
如何在PHP中使用AES加密算法加密数据
Jun 24 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
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
php 变量定义方法
2009/06/14 PHP
php地址引用(php地址引用的效率问题)
2012/03/23 PHP
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
2014/11/19 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
2015/05/25 PHP
php猜单词游戏
2015/09/29 PHP
PHP创建单例后台进程的方法示例
2017/05/23 PHP
php正确输出json数据的实例讲解
2018/08/21 PHP
PHP的mysqli_ssl_set()函数讲解
2019/01/23 PHP
javascript基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
2008/08/05 Javascript
jQuery 关于伪类选择符的使用说明
2013/04/24 Javascript
JS中window.open全屏命令解析及使用示例
2013/12/11 Javascript
Jquery动态添加及删除页面节点元素示例代码
2014/06/16 Javascript
JS实现淡蓝色简洁竖向Tab点击切换效果
2015/10/06 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
Vue-Router实现页面正在加载特效方法示例
2017/02/12 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
2020/01/16 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
[08:02]DOTA2牵红线 zhou神抱得美人归
2014/03/22 DOTA
wxpython学习笔记(推荐查看)
2014/06/09 Python
python实现画一颗树和一片森林
2018/06/25 Python
Python批量查询关键词微信指数实例方法
2019/06/27 Python
python argparser的具体使用
2019/11/10 Python
大学生写自荐信的技巧
2014/01/08 职场文书
施工质量承诺书范文
2014/05/30 职场文书
工作证明范本(2篇)
2014/09/14 职场文书
教育局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
2015年幼儿园保育员工作总结
2015/04/23 职场文书
售后服务质量承诺书
2015/04/29 职场文书
初一英语教学反思
2016/02/15 职场文书
Nginx四层负载均衡的配置指南
2021/06/11 Servers
解决ObjectMapper.convertValue() 遇到的一些问题
2021/06/30 Java/Android