最近工作中使用到了网站端QQ 微信 以及新浪微博的第三方登录,以及获取用户的基本信息,在各自开放平台的官方文档上都有详细的介绍 然而QQ登录的部分接口返回值却与其他的不同 所以这里我就完整的介绍一下网站端QQ登录的流程和返回数据

一、跳转到登录页登录并获取认证

使用url直接传参的方式跳转  https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=你的APPid&redirect_uri=回调地址&state=验证参数

参数列表

response_type

必须

授权类型,此值固定为“code”。

client_id

必须

申请QQ登录成功后,分配给应用的appid。

redirect_uri

必须

成功授权后的回调地址,必须是注册appid时填写的主域名下的地址,建议设置为网站首页或网站的用户中心。注意需要将url进行URLEncode。

state

必须

client端的状态值。用于第三方应用防止CSRF攻击,成功授权后回调时会原样带回。请务必严格按照流程检查用户与state参数状态的绑定。

scope

可选

请求用户授权时向用户显示的可进行授权的列表。可填写的值是API文档中列出的接口,以及一些动作型的授权(目前仅有:do_like),如果要填写多个接口名称,请用逗号隔开。

例如:scope=get_user_info,list_album,upload_pic,do_like

不传则默认请求对接口get_user_info进行授权。

建议控制授权项的数量,只传入必要的接口名称,因为授权项越多,用户越可能拒绝进行任何授权。

登陆后 跳转到之前的redirect_uri 同时返回参数 code 和 state  code为认证码 state为之前传递秘钥

二、获取Access_Token

Access_Token为请求操作时的访问令牌 继而可以获取到更多的信息 通过使用curl访问指定接口获取指定接口的输出数据从而得到 Access_Token

接口url为:https://graph.qq.com/oauth2.0/token

传递参数:

grant_type

必须

授权类型,在本步骤中,此值为“authorization_code”。

client_id

必须

申请QQ登录成功后,分配给网站的appid。

client_secret

必须

申请QQ登录成功后,分配给网站的appkey。

code

必须

上一步返回的authorization code。如果用户成功登录并授权,则会跳转到指定的回调地址,并在URL中带上Authorization Code。

例如,回调地址为www.qq.com/my.php,则跳转到:

http://www.qq.com/my.php?code=520DD95263C1CFEA087******

注意此code会在10分钟内过期。

redirect_uri

必须

与上面一步中传入的redirect_uri保持一致。

注意:这里QQ有一个与其他接口不同的地方 他的返回值不是一个json字符串 而是callcallback然后括号包含序列化参数的格式 就像 callcallback(a=xxx&b=xxx)

这里我给出改自官方demo的一段代码将返回值转化为数组

<?php

//$return为获取的返回值

if(strpos($return, "callback") !== false){

$lPos = strpos($return, "(");

$rPos = strrpos($return, ")");

$return = substr($return, $lPos + 1, $rPos – $lPos -1);

$msg = json_decode($return, true);

if(isset($msg[‘error’])){

return $msg;

}

}

$params = array();

parse_str($return, $params);

return $params;

得到参数

参数说明

描述

access_token

授权令牌,Access_Token。

expires_in

该access token的有效期,单位为秒。

refresh_token

在授权自动续期步骤中,获取新的Access_Token时需要提供的参数。

三、获取open_id

每个qq用户对于每个网站都有自己的唯一标识 利用上一步获取的access_token来换取用户的open_id

接口url: https://graph.qq.com/oauth2.0/me

参数

是否必须

含义

access_token

必须

在上一步中获取到的access token。

注意:这里获取的返回值依然不是一个json字符串 而是callcallback然后括号包含json的格式 就像 callcallback(json)

同样给出一段代码

<?php

//$return为获取的返回值

if(strpos($return, "callback") !== false){

$lPos = strpos($return, "(");

$rPos = strrpos($return, ")");

$return = substr($return, $lPos + 1, $rPos – $lPos -1);

$msg = json_decode($return, true);

}

return $msg;

得到参数client_id你的APPID  以及 openid 用户的唯一标识

四、获取用户信息或其他操作

利用之前的申请网站API可以找到需要功能这里以获取用户信息作为例子

接口url:https://graph.qq.com/user/get_user_info

传入参数

access_token: 授权令牌,Access_Token。

oauth_consumer_key: 你的APPID

open_id:上一步获取的open_id

注意:此时获取的返回值变为正常json字符串 可直接使用

返回参数

参数说明

描述

ret

返回码

msg

如果ret<0,会有相应的错误信息提示,返回数据全部用UTF-8编码。

nickname

用户在QQ空间的昵称。

figureurl

大小为30×30像素的QQ空间头像URL。

figureurl_1

大小为50×50像素的QQ空间头像URL。

figureurl_2

大小为100×100像素的QQ空间头像URL。

figureurl_qq_1

大小为40×40像素的QQ头像URL。

figureurl_qq_2

大小为100×100像素的QQ头像URL。需要注意,不是所有的用户都拥有QQ的100×100的头像,但40×40像素则是一定会有。

gender

性别。 如果获取不到则默认返回”男”

is_yellow_vip

标识用户是否为黄钻用户(0:不是;1:是)。

vip

标识用户是否为黄钻用户(0:不是;1:是)

yellow_vip_level

黄钻等级

level

黄钻等级

is_yellow_year_vip

标识是否为年费黄钻用户(0:不是; 1:是)

转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/20236.html

微信打赏

支付宝打赏

感谢您对作者Leon的打赏,我们会更加努力!    如果您想成为作者,请点我

php用户第三方登录失败,php 实现网站端qq第三方登录接口及一些注意事项【原创】...相关推荐

  1. 191119_01 网站集成QQ第三方登录

    网站集成QQ第三方授权登录 作者:邵发 官网:http://afanihao.cn/java 本文是Java学习指南系列教程的官方配套文档. 内容介绍如何在网站中集成QQ的第三方授权登录功能,演示项目 ...

  2. 开机登录失败 提示user profile service服务未能登录,无法加载用户配置文件

    开机登录失败 提示"user profile service服务未能登录,无法加载用户配置文件" 问题解决办法 [问题描述] Windows系统开机后,在用户登录界面输入密码无法正 ...

  3. 网站集成QQ号登录-QQ互联审核(附涉及不良信息解决办法)

    本文分享一个网站集成QQ号登录的经验,现在国内做网站可以集成的第三方社交网络登录方式主要有:微信登录,QQ登录,公众号登录,微博登录等,其中微信登录由于要求比较高,很多个人站长没法开通:QQ登录要求比 ...

  4. 使用QQ互联完成网站的QQ第三方登录(详解+坑)

    前言:网站收尾工作,就只剩下第三方登录,去QQ互联注册,提交资料,审核了快一周,创建应用,一直创建不了,后来才发现是QQ互联的问题,耽误了两天又开始创建应用,终于弄好了,建议大家使用QQ第三方的,一定 ...

  5. 网站实现QQ第三方登录详细步骤

    一.准备工作:申请appid,appkey,回调地址(申请时填写的回调地址,重要!) 申请地址:https://connect.qq.com/manage.html#/ 二.放置QQ登录按钮:其实就是 ...

  6. mysql用户连接次数失败限制_mysql数据库限制多次登录失败,限定用户重试时间...

    前言 最近的项目开始进行安全测试,其中有一个安全问题是这样的. 应该增加用户登录失败处理功能,限制非法登录次数. 建议是增加mysql数据库的登陆失败的锁定功能. 相信大家也都会遇到这样的问题,在这里 ...

  7. java sql 登录失败_JDBC连接到SQL Server:登录失败,用户X

    我想设置一个JDBC连接到SQL Server 2008,我创建在SQL Server数据库这样的信息:我安装了JDBCJDBC连接到SQL Server:登录失败,用户X CREATE LOGIN ...

  8. php第三方登录代码,thinkPHP5项目中实现QQ第三方登录功能

    本文实例讲述了thinkPHP5项目中实现QQ第三方登录功能.分享给大家供大家参考,具体如下: 最近用thinkPHP 5框架做了一个婚纱店的项目,在开发过程中需要用到第三方登录,腾讯官方给的案例是几 ...

  9. python爬虫登录教程_18个网站的Python爬虫登录示例 | 开源项目推荐|python教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 该项目收集了一些各大网站登陆方式和一些网站的爬虫程序,有的是通过selenium登录,有的是通过抓包直接模 ...

最新文章

  1. 使用迭代器遍历List的时候修改List报ConcurrentModificationException异常原因分析
  2. python安卓版turtle模块下载_python之turtle的模块
  3. x390拆机 升级内存和硬盘_工作效率低下?双十二是时候升级硬盘与内存了
  4. dbgrid的最小高度设置。否则出现滚动条。
  5. java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
  6. python正则表达式快速入门_Python学习笔记——正则表达式入门
  7. oracle中查询实现以下结果,如何在Oracle中为查询结果分配等级?
  8. jQuery炫酷特效之遮罩移动效果
  9. kali之破解隔壁老王wifi
  10. 1415-2团队博客汇总表
  11. UP主分析丨B站“肝视频”第一人,追剧的速度都跟不上他。
  12. 逆向分析:还原 App protobuf 协议加密
  13. linux系统编程之管道(三):命名管道FIFO和mkfifo函数
  14. Xcode直接安装ipa
  15. 一级建造师课件下载建筑工程行业会计分录汇总非常全建议收藏!
  16. lpop 原子_深圳大学张文静教授团队ACS Nano:单原子铂修饰的二硫化钒催化剂提高电催化析氢性能...
  17. java Locale介绍
  18. php和html的关系
  19. OPC配置DCOM解决方案
  20. java 打印详解_Java格式化输出printf()详解

热门文章

  1. 小兔鲜儿Vue3.0前端电商项目实战
  2. mybatis--SQL片段
  3. 哪种压缩格式/软件最好?--推荐 7-zip
  4. Mysql中if-else的使用
  5. 什么是vuex?五大核心?如何调用vuex里面的属性和方法?vuex的弊端?如何解决?
  6. GDKOI2016 魔卡少女
  7. WEB应用安全之输入验证
  8. transferwise怎么提现_客户用TransferWise可以给我泛付账户汇款吗?TransferWise怎么收...
  9. 程序员实用网站工具(瑞士军刀)
  10. 计算机网络基础:常见的网络传输介质