php第三方扣扣登陆,thinkphp3.2 实现qq第三方登录
最近实现了QQ登录,qq第三方登录步骤就是首先获取appid,appkey,填写callback;
拼接登录url,带上自己的应用信息,
通过callback地址获取token,通过token获取登陆者openid,通过openid获取用户信息。详细的可以去qq互联上看。
接下来说thinkphp3.2如何使用,首先我封装了自己的qqAuth类,代替了官方的SDK。很简洁实用。
这个类就长这个样子:<?php
namespace Vendor\qq;
class qqAuth{
//申请到的appid
private $appid='';
//申请到的appkey
private $appkey='';
//QQ登录成功后跳转的地址,请确保地址真实可用,否则会导致登录失败。
private $callback='';
//QQ授权api接口.按需调用
private $scope='';
public function __construct($appid,$appkey,$callback,$scope=''){
$this->appid=$appid;
$this->appkey=$appkey;
$this->callback=$callback;
if(empty($scope)){
$this->scope='get_user_info,add_share,list_album,add_album,
upload_pic,add_topic,add_one_blog,add_weibo';
}else{
$this->scope=$scope;
}
}
/**
* QQ登录
*/
function qqLogin(){
$_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF 保护
$login_url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id="
. $this->appid . "&redirect_uri=" . urlencode($this->callback)
. "&state=" . $_SESSION['state']
. "&scope=".$this->scope;
header("Location:$login_url");
}
/**
* 回调函数
*/
function qqCallback(){
if($_REQUEST['state'] == $_SESSION['state']){
$token_url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&"
. "client_id=" . $this->appid. "&redirect_uri=" . urlencode($this->callback)
. "&client_secret=" . $this->appkey. "&code=" . $_REQUEST["code"];
$response = file_get_contents($token_url);
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 "
error:
" . $msg->error;
echo "
msg :
" . $msg->error_description;
exit;
}
}
$params = array();
parse_str($response, $params);
$_SESSION["access_token"] = $params["access_token"];
}else{
echo("The state does not match. You may be a victim of CSRF.");
}
}
/**
* 获取用户openid
*/
function getOpenid(){
$graph_url = "https://graph.qq.com/oauth2.0/me?access_token="
. $_SESSION['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);
if (isset($user->error)){
echo "
error:
" . $user->error;
echo "
msg :
" . $user->error_description;
exit;
}
$_SESSION["openid"] = $user->openid;
}
/**
* 获取用户信息
*/
function getUserInfo(){
$get_user_info = "https://graph.qq.com/user/get_user_info?"
. "access_token=" . $_SESSION['access_token']
. "&oauth_consumer_key=" . $this->appid
. "&openid=" . $_SESSION["openid"]
. "&format=json";
$info = file_get_contents($get_user_info);
$arr = json_decode($info, true);
return $arr;
}
}将这个类放到ThinkPHP/Library/Vendor/qq目录下,然后再需要用到的地方use
use \Vendor\qq\qqAuth;接下来就是登陆方法了,首先在页面上放置在qq登陆按钮:
未登录?
js代码如下:
function toQzoneLogin() {
var _url='/index/qqlogin'; //转向网页的地址;
var name='TencentLogin'; //网页名称,可为空;
var iWidth=450; //弹出窗口的宽度;
var iHeight=320; //弹出窗口的高度;
//获得窗口的垂直位置
var iTop = (window.screen.availHeight - 30 - iHeight) / 2;
//获得窗口的水平位置
var iLeft = (window.screen.availWidth - 10 - iWidth) / 2;
window.open(_url, name, 'height=' + iHeight +
',innerHeight=' + iHeight + ',width=' + iWidth +
',innerWidth=' + iWidth + ',top=' + iTop + ',left=' + iLeft +
',status=1,toolbar=no,menubar=no,location=1,resizable=no,scrollbars=0,titlebar=no');
}然后写qqlogin方法:
/**
* QQ登陆
* @return [type] [description]
*/
public function qqLogin(){
$qqlogin=new qqAuth(F('webSet')['appid'],F('webSet')['appkey'],F('webSet')['callback']);
$qqlogin->qqLogin();
}
/**
* QQ登陆回调函数
* @return [type] [description]
*/
public function qqlogincallback(){
$qqlogin=new qqAuth(F('webSet')['appid'],F('webSet')['appkey'],F('webSet')['callback']);
$qqlogin->qqCallback();
$qqlogin->getOpenid();
//此处是为了跳转到saveVisitor方法,此方法记录登陆者信息,然后把小窗口关掉
echo "";
}
实例化qqAuth类需要传三个参数,就是你在qq互联上申请到的appid,appkey,填写的callback地址。
在saveVisitor函数里我获取了用户信息,用以下代码获取:$qqlogin=new qqAuth(F('webSet')['appid'],F('webSet')['appkey'],F('webSet')['callback']);
$visitor=$qqlogin->getUserInfo();至于获取到了什么信息,就是昵称,openid,birthyear,地址等信息,根据个人需要处理吧。
php第三方扣扣登陆,thinkphp3.2 实现qq第三方登录相关推荐
- android qq 登陆 简书,使用QQ第三方登录
一,首先导入jar包 image.png 配置: ··· compile files('libs/open_sdk_r5990_lite.jar') compile 'com.android.supp ...
- java获取qq登陆信息_java获取QQ第三方登录
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 org.apache.httpcomponents httpclient 4.5.6 com.alibaba fastjson 1.2.47 packag ...
- 如何设计 QQ、微信、微博、Github 等等,第三方账号登陆 ?(附表设计)
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://1t.click/9Yw 前言:多账户登陆 1 ...
- android qq三方登录授权失败,QQ第三方登陆授权失败110401原因及解决办法分享
qq第三方登陆授权失败出现代码110401是什么情况?遇到这种情况该如何解决?相信很多用户们在操作的时候都出现过类似的情况吧?下面是小编带来的攻略解析,一起来关注下! qq第三方登陆授权失败11040 ...
- 2017最新qq第三方登陆教程
一.注册成为开发者 链接:https://connect.qq.com/index.html 二.创建应用 注册成功后在 应用管理 ->网站应用 里创建自己的应用 三.获取app Id 和 ...
- 基于python的QQ第三方登陆实现工具类
基于python的QQ第三方登陆 在做第三方登陆时,一共有如下的步骤 首先我们要获取QQ服务器的登陆地址 用户进行登陆 QQ服务器返回用户的对应code给前端 前端将用户code传输到后端 服务器获取 ...
- IOS QQ第三方登陆提交AppleStore 被拒解决
IOS QQ第三方登陆提交AppleStore 被拒解决的原因,大多是苹果的审核人员手机里没有安装QQ,又没有跳到网页登陆,导致审核不通过. 解决办法: 找腾讯开放平台的客服开通申请应用的webvie ...
- 【小白学JAVA】QQ第三方登陆Demo
实现简单的QQ第三方登陆功能,具体的Demo,本人是用maven+SSM做的 1. 自己练习做第三方登陆,网上的说的都是很模糊,初学者不是很容易看懂,所以记录研究QQ登陆的经历,希望帮到大家. 2. ...
- android qq三方登录授权失败,教大家qq第三方登陆授权失败110401怎么办的解决方法...
今天小编来给大家针对这个教大家qq第三方登陆授权失败110401怎么办的解决方法的问题来进行一个介绍,毕竟当下也是有诸多的小伙伴对于教大家qq第三方登陆授权失败110401怎么办的解决方法这个问题非常 ...
最新文章
- 【Codeforces】53D Physical Education (有点像冒泡)
- clion 查看内容窗口_CLion精华笔记
- Netty方法误解ChannelHandlerContext.writeAndFlush(Object msg)
- java异常日志不要只打一半,要输出全部错误信息
- 更灵活、有个性的卷积——可变形卷积(Deformable Conv)
- 阐述简称PO,VO,TO,BO,DAO,POJO
- 吴恩达-coursera-机器学习-week8
- 用例图、类图之间的几种关系
- ESP8266 WIFI模块学习之路(9)——C++实现通过电脑串口读取ESP8266数据
- HTML文本框不能复制粘贴,word文本框无法复制粘贴
- 电子邮件的收件人、抄送、密送
- 内存条频率4000MHZ,开启XMP技术内存读写速度前后对比图
- 工厂模式实现多种数据库连接
- 洛谷P2057 善意的投票
- caniuse_使用此工具将CanIUse表嵌入到您的网站中
- Socket编程 TCP粘包问题及解决方案
- python行业中性_Python抓取分析淘宝连衣裙数据,128元真的是低价人群分界线吗?...
- 计算机学的痛苦可以换专业,在大学里选错了专业,是一种怎样的“痛苦”体验?...
- OpenCart模板主题安装教程
- vivo陷全国手机行业反垄断第一案
热门文章
- 西雅图默瑟岛走出的科技公司
- 大专学计算机好还是学电商好,现在大专读什么专业好 哪些专业前景好
- 抖音计算机音乐怎么设置,抖音短视频中的音乐怎么设置成铃声 超级简单
- 中望3D 2021草图过滤器“构造线”类型
- ⒈响应式编程 Project Reactor 概述
- 【踩坑记录】实体机器人运行Cartographer 3D Slam(深度摄像头)--未解决
- 浮点数和整数的区别python_成语什么浮什么是
- 新概念英语一 : 语法整理 unit7 121-144
- 怎么把动图放到word里_如何让Word 中插入的图片不会乱动?
- emulator-5554 device adb 雷电模拟器9.0.11