网站接入QQ登录功能的实现


来源 | 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}

学习更多技能

请点击下方公众号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/23133.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android QQ 登录接入详细介绍

/ 今日科技快讯 / 近日,百度地图发布2022春节出行大数据。迁徙大数据显示,2022年春运迁徙规模较去年农历同期有明显上升。春节期间全国人口迁徙规模日均值为去年农历同期的近两倍。春节前的迁徙规模峰值出现在1月29日(腊月廿七&#xff0…

工具使用-QQ/TIM(1)QQ/TIM客户端聊天窗口输入/自动变成表情 - 解决方案

问题: 我们在使用QQ/TIM客户端(电脑端)时,输入英文字符/时,会自动变成表情,且无法取消,无法避免。如下图所示: 解决: 打开QQ/TIM客户端,并打开一个聊天窗口。在聊天窗口中点击表情图…

chatgpt赋能python:Python软件图标的SEO

Python软件图标的SEO 介绍 Python是一种高级编程语言,具有易读性、可维护性和可扩展性等优点,因此在许多应用程序中广泛使用。Python软件的图标是这些应用程序中一个非常重要的视觉元素。图标的质量和吸引力可以决定用户下载和使用该应用程序的意愿。因…

漫谈高数

漫谈高数 (一) 泰勒级数的物理意义 高等数学干吗要研究级数问题? 是为了把简单的问题弄复杂来表明自己的高深? No,是为了把各种简单的问题/复杂的问题,他们的求解过程用一种通用的方法来表示。 提一个问题,99*99等于多少? 相信我们不会傻到…

《高等数学A》课堂笔记——高分必过

《高等数学》上下学期的课堂笔记 ——郑州大学 文章目录 一、函数与极限1.1 映射与函数1.2 数列的极限1.3 函数的极限1.4 无穷小与无穷大1.5 极限运算法则1.6 极限存在准则及两个重要极限1.7 无穷小的比较1.8 函数的连续性与间断性问题…

高等数学【合集2】

文章目录 积分计算递推重点补充 积分计算 求导 ⇄ 积分 求导 \rightleftarrows 积分 求导⇄积分 求导积分 ( t ) ′ 1 \large (t)1 (t)′1 ∫ t d t 1 2 t 2 c \large\int tdt\frac{1}{2}t^2c ∫tdt21​t2c ( 1 x ) ′ − 1 x 2 \large(\frac{1}{x})-\frac{1}{x^2} (x1​)…

高等数学【合集】

文章目录 极限计算求导计算积分计算 极限计算 第一步 : 先看 x → v a l u e 确定类型 第一步:先看x \rightarrow value确定类型 第一步:先看x→value确定类型 7 种未定型 : ∞ ∞ , 0 0 , 1 ∞ , 0 ∞ , ∞ 0 , 0 0 , ∞ − ∞ 7种未定型: \frac{\infty}{\infty},\frac{0}{0}…

一、浙江专升本高等数学考点-函数

1.连续函数的性质 考点分析 函数的连续性主要考察函数的奇偶性、有界性、单调性、周期性。 例题 判断函数的奇偶性 的有界区间为() A.(-1,0) B(0,1) C(1,2) D(2,3) 2.闭区间上连续函数的性质 考点分析 闭区间上连续函数的性质主要考察函数的最大最小值…

超过ChatGPT3达到ChatGPT4%90性能的小羊驼来了-Vicuna(校招社招必备,chatgpt风口来了赶紧学起来吧)

达到GPT4百分之90性能的小羊驼Vicuna 文章目录 达到GPT4百分之90性能的小羊驼Vicuna一、小羊驼Vicuna介绍二、使用效果测评三、小羊驼Vicuna安装webui linux部署教程总结踩坑经验 随着chatgpt大火,很多人都开始学习chatgpt相关知识,本文就介绍一下最近很…

highcharts去水印方法

highcharts去水印方法 在和title同级的地方,输入 credits: { enabled:false, }, 即可去水印,亲测有效。 highcharts的商用版是需要收费的,在个人网站、学校网站及非盈利机构中使用 Highcharts 完全不需要经过许可,直接可以任意使…

分享一个去水印接口,完全免费,早点下手啊

上传到任意空间或者服务器,访问即可用。 目前支持很多平台:抖音|快手|皮皮虾|西瓜|红书|微视|最右|哔哩哔哩,皮皮搞笑等常见平台. 而且还是免费的。 该接口测试,完全免费,如果那天收费了,大家可以直接放弃…

如何批量去除图片水印?批量去水印方法

地址:如何批量去除图片水印https://www.shuiyinyun.com/inpaint-image.html步骤: 在平台当中可以直接把自己要去水印的图片依次添加进去,然后用工具选择去水印区域,可多选,图片全部都选择好后,点击批量处理…

如何去水印而不损图片?码住这三个方法学会图片怎么去水印

当我们在网上“冲浪”时,会看到一些喜欢的图片,想要保存当做壁纸或头像,但是保存下来后却发现带有水印,导致画面被遮挡,影响美观,放弃又舍不得,这个时候可以使用一些软件去除图片上的水印&#…

去图片水印软件有哪些?安利这几个实用的工具给你们

现在我们会从网上一些平台下载一些图片或视频来当做素材,不过有些图片和视频会带有水印。对于我们二次使用来说很不方便。如果想要保持图片的干净、完整,那就需要去除图片的水印。下面我就来教你们图片去水印的方法,你们感兴趣的话&#xff0…

不知道免费去水印图片软件哪个好?来看看这3个软件

我们在编辑项目汇报的演示文稿时,会在网上下载素材图片来充实我们的内容,但是有一些图片上会带有网站的水印,使得图片不太美观,将图片的水印去除会让图片的观感和效果更好。我们有给图片去水印的需求,市面上自然就有支…

正版软件|WonderFox Photo Watermark 图片水印批量处理软件

Photo Watermark 可以为您做什么?水印是最有效的方法,可防止他人擅自使用您的照片。只需单击几下,Watermark Software 将为您的图像文件提供不可磨灭的保护。 可自定义的水印 文本水印 只需按键即可创建支持丰富字体,符号&#…

Inpaint>>一款神奇的去水印工具

今天为大家介绍一款图片去水印利器:Inpaint Inpaint是一款去除图片背景中瑕疵的图片处理软件。有时候我们的照片上可能有一些瑕疵,我们想把它去掉,这时你不必动用庞大PS来兴师动众处理,只需要使用Inpaint就可以轻松搞定。它可以从…

如何除掉图片水印?分享操作便捷的几种去水印技巧

在如今的社交媒体时代,我们经常需要在网上寻找高质量的图片来配合我们的项目或者个人需求。然而,很多时候我们发现这些图片都有着令人厌烦的水印,这些水印不仅影响了图片的美观度,也限制了我们对图片的使用和分享。在这种情况下&a…

怎么样去图片水印?用这三招快速消除水印

有时我们会从网上下载图片,而这些图片往往都带有水印,不仅影响观看,而且也不太美观。那么图片去水印方法有哪些呢?下面我就跟大家分享几个不错的方法,一起来看看吧。 方法一:借助第三方工具来去除图片水印 …

分享图片去水印几个工具-图片去除水印最好用的工具

日常生活中,我们说的水印是指:是来着平台、作者出于强调平台出处、创作者目的,对图片、视频加的水印。不过,水印的存在会影响整体的观感。如果你想将这些素材用于个人收藏、二次创作,这就需要进行去水印的处理。 今天…