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 相关文章推荐
PHP5 安装方法
Oct 09 PHP
树型结构列出指定目录里所有文件的PHP类
Oct 09 PHP
PHP迅雷、快车、旋风下载专用链转换代码
Jun 15 PHP
php URL跳转代码 减少外链
Jun 25 PHP
第四章 php数学运算
Dec 30 PHP
PHP 过滤页面中的BOM(实现代码)
Jun 29 PHP
Zend Studio 实用快捷键一览表(精心整理)
Aug 10 PHP
PHP实用函数分享之去除多余的0
Feb 06 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
May 25 PHP
PHP面向对象程序设计继承用法简单示例
Dec 28 PHP
PHP fopen中文文件名乱码问题解决方案
Oct 28 PHP
PHP中echo与print区别点整理
Mar 09 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巧获服务器端信息
2006/12/06 PHP
做网页的一些技巧
2007/02/01 Javascript
发一个自己用JS写的实用看图工具实现代码
2008/07/26 Javascript
Jquery练习之表单验证实现代码
2010/12/14 Javascript
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
JS网页图片按比例自适应缩放实现方法
2014/01/15 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
jquery 取子节点及当前节点属性值
2014/07/25 Javascript
Javascript中的包装类型介绍
2015/04/02 Javascript
基于jQuery实现音乐播放试听列表
2016/04/14 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
2017/08/15 jQuery
vue resource post请求时遇到的坑
2017/10/19 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
[02:23]2014DOTA2国际邀请赛中国战队回顾
2014/08/01 DOTA
[01:16:37]【全国守擂赛】第三周决赛 Dark Knight vs. 一个弱队
2020/05/04 DOTA
Python实现大文件排序的方法
2015/07/10 Python
Python中列表list以及list与数组array的相互转换实现方法
2017/09/22 Python
pymongo中group by的操作方法教程
2019/03/22 Python
python定时按日期备份MySQL数据并压缩
2019/04/19 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
python3 Scrapy爬虫框架ip代理配置的方法
2020/01/17 Python
Selenium python时间控件输入问题解决方案
2020/07/22 Python
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
大学生实习期自我评价范文
2013/10/03 职场文书
机械化及自动化毕业生的自我评价分享
2013/11/06 职场文书
2014年迎新年活动方案
2014/02/19 职场文书
《王二小》教学反思
2014/02/27 职场文书
新学期开学演讲稿
2014/05/24 职场文书
2014世界杯球队球队口号
2014/06/05 职场文书
优秀乡村医生先进事迹材料
2014/08/23 职场文书
2014年药品销售工作总结
2014/12/16 职场文书
小学中队活动总结
2015/05/11 职场文书
监守自盗观后感
2015/06/10 职场文书
关于艺术节的开幕致辞
2016/03/04 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书
Oracle配置dblink访问PostgreSQL的操作方法
2022/03/21 PostgreSQL