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 相关文章推荐
多重?l件?合查?(二)
Oct 09 PHP
php 网上商城促销设计实例代码
Feb 17 PHP
ThinkPHP实现将本地文件打包成zip下载
Jun 26 PHP
php实现的日历程序
Jun 18 PHP
php+js实现百度地图多点标注的方法
Nov 30 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
Feb 15 PHP
php基于session锁防止阻塞请求的方法分析
Aug 07 PHP
PHP重置数组为连续数字索引的几种方式总结
Mar 12 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
Apr 27 PHP
PHP实现微信退款的方法示例
Mar 26 PHP
php创建多级目录与级联删除文件的方法示例
Sep 12 PHP
Yii框架模拟组件调用注入示例
Nov 11 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 mkdir()定义和用法
2009/01/14 PHP
php生成shtml类用法实例
2014/12/09 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
PHP基于mcript扩展实现对称加密功能示例
2019/02/21 PHP
iframe子页面获取父页面元素的方法
2013/11/05 Javascript
javascript获取鼠标点击元素对象(示例代码)
2013/12/20 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
莱鸟介绍javascript onclick事件
2016/01/06 Javascript
javascript弹性运动效果简单实现方法
2016/01/08 Javascript
jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单
2016/09/21 Javascript
js实现复选框的全选和取消全选效果
2017/01/03 Javascript
原生js实现鼠标跟随效果
2017/02/28 Javascript
使用javaScript实现鼠标拖拽事件
2020/04/03 Javascript
vue 动态绑定背景图片的方法
2018/08/10 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
urllib和BeautifulSoup爬取维基百科的词条简单实例
2018/01/17 Python
Django中的Signal代码详解
2018/02/05 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
Python计算IV值的示例讲解
2020/02/28 Python
HTML5仿手机微信聊天界面
2016/03/18 HTML / CSS
瑞贝卡·明可弗包包官网:Rebecca Minkoff
2016/07/21 全球购物
viagogo英国票务平台:演唱会、体育比赛、戏剧门票
2017/03/24 全球购物
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
运动会稿件200字
2014/02/07 职场文书
喝酒检查书范文
2014/02/23 职场文书
青春无悔演讲稿
2014/05/08 职场文书
经营管理策划方案
2014/05/22 职场文书
义诊活动总结
2015/02/04 职场文书
教师工作证明范本
2015/06/12 职场文书
九年级数学教学反思
2016/02/17 职场文书
nginx如何将http访问的网站改成https访问
2021/03/31 Servers
python实现图片九宫格分割的示例
2021/04/25 Python
业余无线电通联Q语
2022/02/18 无线电
win10搭建配置ftp服务器的方法
2022/08/05 Servers