来源 | https://github.com/Dream4ever/Knowledge-Base/issues/76

说明

本文中所说的QQ登录功能,是采用官方的OAuth2.0来实现的,这样有更多的自主权。另一种较为简单的js-SDK开发方式,虽然非常简便,但自主性不够,所以没有采用。

下文中所构造的URL,均使用了JavaScript的ES6语法。

注册开发者

先登录QQ互联官网,登录时所用的QQ号会和相关信息绑定,这一点要注意。

登录之后点击顶部导航栏右侧自己的QQ头像,进入开发者的注册/认证界面。

这里可以选择以“公司”或“个人”的身份注册为开发者。自己最开始用的是公司的相关资料来注册的,但总是提示审核失败,却又不说为什么失败,最后干脆用个人信息注册,很快就成功了。

PS:不知道用个人信息注册为开发者的话,权限方面会不会有什么限制。微信公众平台对个人开发者是有限制的,个人身份注册的公众号无法认证,公众平台的部分权限也无法调用。

创建网站应用

要想让网站能够使用QQ登录功能,就必须先在QQ互联中创建网站应用。

在QQ互联网站顶部导航栏上,点击应用管理。点击页面中的网站应用这个标签,再点击创建应用,按照要求填写相关的信息即可。

注意这里需要填写两个 URL,一个是网站地址,也就是需要让用户能够通过QQ登录的网站。另一个是网站回调域,则是用户发起QQ登录请求之后,负责与腾讯服务器通讯,实现QQ登录功能的URL,这两个URL要注意区分。

所创建的网站应用审核通过之后,点击查看按钮,在网站应用的详情界面,能看到为这个网站分配的APP ID和APP Key,后面实现QQ登录功能的时候要用到。

另外,还能看到审核通过的网站应用,有两个可用的应用接口,第一个登录默认是开启的,第二个unionid需要手动开启,这里先把它开启了,后面说不定就用上了。

流程概述

接下来就需要编写代码,实现QQ登录功能了。这里先简要说明一下整体流程:

  1. 按照要求访问指定网址,会显示QQ登录界面,选择QQ账号进行登录之后,会向之前所填写的 网站回调域 发起回调,回调URL中包含Authorization Code(授权码)。

  2. 网站回调域 用这个Authorization Code(授权码),结合其它数据,向指定的地址发送请求,接收到的响应中包含Access Token(访问令牌)。

  3. 网站回调域 再用Access Token(访问令牌) 向指定的地址发送请求,接收到的响应中包含所登录QQ账号的 OpenID(不涉及用户隐私)。

  4. 网站回调域 拿到用户的OpenID之后,结合前面获取到的Access Token以及其它数据,就可以调用QQ的接口,实现特定的功能了。比如可以调用get_user_info接口,获取登录用户的昵称、头像、性别,用来显示在前端页面中。

一、获取Authorization Code

在自己编写的登录页面,点击QQ图标之后,请求下面的地址:

https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=${appId}&redirect_uri=${redirectUrl}&state=${state}&scope=${scope}

上面的地址中,appId为网站应用的APP ID,redirectUrl为网站应用的网站回调域,state为用户自定义的字符串,scope为向用户所请求的授权列表。

scope之外的参数均为必填项,scope如果不写,则默认只请求对接口get_user_info进行授权,获取用户最基本的几项信息:QQ昵称、QQ头像、性别。

发起请求之后,会将用户导向到QQ官方的登录页面,用户在这个页面上选择需要登录的QQ号,点击“登录”,网站回调域就会收到的腾讯服务器所发起的回调。

比如之前所填写的 网站回调域 为a.com/api/getauthcode 的话,腾讯服务器就会向 网站回调域 发送如下请求:

GET /getauthcode?code=F91C6110********

在上面接收到的这个请求中,URL查询字符串里,code= 后面的字符串,就是腾讯服务器发来的Authorization Code。

二、获取Access Token

拿到Authorization Code,结合其它数据,请求如下地址:

https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=${appId}&client_secret=${appKey}&code=${authCode}&state=${state}&redirect_uri=${redirectUrl}

网站回调域 会收到如下响应:

access_token=FF3A****&expires_in=7776000&refresh_token=2516****

其中就包含了Access Token,并且这个Access Token有90天的有效期,但并不会按照官方文档所说的,用户再次登录时自动刷新,而是短时间(一天内)连续多次登录都不会刷新。

对于这个Access Token,官网建议开发者将其进行保存,以便后续调用OpenAPI访问和修改用户信息时使用。

三、获取OpenID

有了Access Token之后,就可以用它来获取当前所登录QQ账号的OpenID了。请求如下地址:

https://graph.qq.com/oauth2.0/me?access_token=${accessToken}

网站回调域 会收到如下响应:

callback( {"client_id":"appId","openid":"openId"} );

上面的响应中包含了 APP ID 和 OpenID,APP ID 可用来确认是否为合法的网站请求,OpenID 自然就是所登录QQ账号的 OpenID 了。

四、调用接口访问数据

有了第二步获取到的获取Access Token,和第三部获取到的 OpenID,就可以拿来访问QQ的接口,获取用户的相关信息了。

比如以下面的方式请求 get_user_info 接口,就能够获取到用户昵称、QQ头像等信息。

https://graph.qq.com/user/get_user_info?access_token=${accessToken}&oauth_consumer_key=${appId}&openid=${openId}

学习更多技能

请点击下方公众号

网站接入QQ登录功能的实现相关推荐

  1. 网站集成QQ登录功能

    原文:网站集成QQ登录功能 最近在做一个项目时,客户要求网站能够集成QQ登录的功能,以前没做过这方面的开发,于是去QQ的开放平台官网研究了一下相关资料,经过自己的艰苦探索,终于实现了集成QQ登录的功能 ...

  2. 19网站实现QQ登录功能

    一般网站要先做个用户注册的功能页面,但我的网站名气不大,不需要要求用户注册,所以直接使用腾讯QQ登录的API接口. 如何使用JS_SDK让网站拥有QQ登录的功能,官网的这篇文章写得还算完整:http: ...

  3. 网站使用QQ登录功能

    一般网站要先做个用户注册的功能页面,但我的网站名气不大,不需要要求用户注册,所以直接使用腾讯QQ登录的API接口. 如何使用JS_SDK让网站拥有QQ登录的功能,官网的这篇文章写得还算完整:http: ...

  4. 网站实现QQ登录功能

    转自: http://blog.csdn.net/wowkk/article/details/17315637 一般网站要先做个用户注册的功能页面,但我的网站名气不大,不需要要求用户注册,所以直接使用 ...

  5. 网站接入QQ登录过程(防踩坑)

    一个要留住用户的网站,经常会以通用的方式进行登录,手机号.微信.QQ.邮箱,这些登录都各有自己的规则,这篇文章记录一下接入QQ登录的过程,给大家梳理下,防止后来人踩坑. 1.进行开发者注册: 在QQ互 ...

  6. html 加QQ链接QQ版本不支持,网站接入QQ登录(JS版)【最新教程 04.10更新】,亲身失败百次的总结...

    开发阶段(偏后端的同学可以查看 PHP版 教程) 3.1. 因为 QQ互联 官网只是简单的提供了 JS-SDK 以及相关的 API,可能部分同学初见比较茫然.所以为了帮助同学们更好理解,我整理出以下内 ...

  7. php接入qq登陆,网站接入QQ登录-腾讯开放平台

    完成开发者认证 使用qq登录完成实名认证,点击创建应用 创建网站应用 填写相关信息 回调域填写很重要如果填写错误扫码会出现 100010 [QQ登录]登录常见错误码 前端 这是目前网站接入的qq登录, ...

  8. 网站接入QQ登录最新2020 java版本

    1.首先先注册账号,然后填资料审核,等个三四天吧大概 https://connect.qq.com/ 2.审核通过后点击创建应用,把备案号什么的都填(这个审核两天之内一般) !!! 这里有个重点,网站 ...

  9. 第三方插件的引用(4):JAVA网站接入QQ登录

    前言 为了增加用户体验,用户能够快速的注册登录,第三方账号进行登录注册的的需求也就由此而诞生 开发环境:  IDE: STS jdk版本: 1.8 框架: SSM 要做QQ第三方登录,首先得在QQ互联 ...

  10. SpringBoot + Vue 个人网站接入QQ登录手把手教你 完整版 新手友好

    关于使用的QQ登录的原因 **最大的原因各位都想的到,QQ注册人数虽然呈下坡状态,但其影响力和使用群体之大不可忽视.下面我将一步步的将我如何实现QQ登录的步骤复现一遍** 准备工作 进入QQ互联网址 ...

最新文章

  1. rails小重构:将图片加入产品Model
  2. Mac下安装PIL库
  3. /etc/bashrc和/etc/profile傻傻分不清楚?
  4. 【转载】看板方式简介
  5. 京东双十一助推下沉市场消费升级,“消费平级”时代提前到来
  6. Vue——全局element-resize-detector监听DOM元素
  7. Python连接mysql基本操作
  8. JAVA 的面向对象设计的特点-书后感-01-21天学通JAVA-深入分析
  9. 左右声道测试_小说:少年参加测试,直接挑战十只狗恐兽,众人见了惊呼:SS级...
  10. 上周热点回顾(11.27-12.3)
  11. 职业教育计算机专业宣传,计算机专业介绍.ppt
  12. 京东2019校园招聘测试开发工程师面试经历
  13. c语言程序商品的打折,C语言程序设计习题doc.doc
  14. Flutter:文件与网络操作摘要
  15. 剑桥A1-C2单词表-01
  16. 数据立方体的基本计算
  17. Switch 无法 关联账号 this page cannot be displayed
  18. 我的世界服务器怎么制作头颅,我的世界怎么用指令弄自己的头颅 | 手游网游页游攻略大全...
  19. Python爬虫_案例分析(二)
  20. 统计学习二:数据的描述性统计

热门文章

  1. mysql创建唯一非聚集索引_创建聚集索引、非聚集索引、唯一索引、唯一键约束...
  2. 新手用python写牛牛扑克牌玩法
  3. win10 联想键盘快捷键关闭_Win10电脑不用鼠标怎么关机键盘与快捷键关机技巧
  4. 实现网站在线客服系统代码过程中解决问题-js实现点击复制文本
  5. 5分钟快速入门大数据、数据挖掘、机器学习
  6. 解决Source Not Found问题
  7. 软件开发外包平台有哪些?收集的一些备用
  8. 程序员做外包有前途吗?
  9. ECharts南丁格尔玫瑰实现及部分配置解析
  10. 【转】推荐几个免费下载破解软件的网站以及系统