微信扫码登录流程

微信官方文档使用

  • 搜索“微信开放平台”
  • 点击导航栏的“资源中心”
  • 点击“网站应用”下的“微信登录功能”
  • 地址
  • 微信扫码登录是基于OAuth2的,所以需要第三方应用(就是实现微信扫码登录的应用)成为微信的客户端,获取AppId和AppSecret。

获取AppId和AppSecret

  • “微信开发平台”下方的“网站应用开发”
  • 点击导航栏的“注册”注册信息,注册地址
  • 最好使用企业邮箱注册,填写注册信息进行注册
    在这里插入图片描述
  • 开发者认证:注册成功之后点击登录——>开发者资质认证,这需要填写个人身份信息,企业盖章等,认证一次300元,所以我们只有在真实企业开发中才会去做,平时练习是做不了的。
    在这里插入图片描述
  • 审核成功后就可以创建应用了,同样需要企业签字盖章
    在这里插入图片描述
  • 应用中就可以看到AppId和AppSecret,需要配置回调域(就是应用的域名),供微信回调返回用户的授权结果。
    在这里插入图片描述

请求code

  • 向以下链接发送请求
https://open.weixin.qq.com/connect/qrconnect?appid=你的APPID&redirect_uri=http://你的授权回调域&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect 

访问该地址会得到一个微信登录的二维码
在这里插入图片描述

  • 用户扫了二维码之后会选择是否同意授权,如果授权成功会跳转到如下地址,地址中就包含code。
http://你的授权域/?code=获取的code&state=STATE
  • 需要注意的是,如果你的项目域名还没有注册的话,这个地址是访问不了的,我们知道域名解析是先看我们本地的hosts文件(C:\Windows\System32\drivers\etc下),如果hosts中没有的话,会使用DNS(域名解析服务器)进行域名解析后访问,所以我们可以在本地的hosts文件中配置(项目所在地址ip和回调域之间用空格隔开)
    在这里插入图片描述

获取access_token

  • 向以下地址发送请求获得access_token
https://api.weixin.qq.com/sns/oauth2/access_token?appid=你的AppId&secret=你的AppSecret&code=上一步获取到的code&grant_type=authorization_code
  • 得到的结果格式如下,包含access_token
{ 
"access_token":"ACCESS_TOKEN", 
"expires_in":7200, 
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID", 
"scope":"SCOPE",
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}

【注意事项】如果发送请求后的结果是{"errcode":40029,"errmsg":"invalid code"},那就说明token已经过期。

  • access_token默认时间是两小时,如果access_token过期了,需要使用refresh_token进行刷新,可以发送请求到以下地址进行refresh_token。
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=你的APPID&grant_type=refresh_token&refresh_token=获取access_token时的REFRESH_TOKEN
  • access_token刷新的两种结果
    1)若access_token已超时,那么进行refresh_token会获取一个新的access_token,新的超时时间;
    2)若access_token未超时,那么进行refresh_token不会改变access_token,但超时时间会刷新,相当于续期access_token。
    【注意】refresh_token拥有较长的有效期(30天),当refresh_token失效的后,需要用户重新授权。
    也就是说,不管access_token在是否超时时刷新,都要在refresh_token过期之前,刷新一次,access_token的超时时间都会变成两小时,不同的是,access_token是否还是原来的值。
  • refresh_token正确的返回结果示例如下:
{ 
"access_token":"ACCESS_TOKEN", 
"expires_in":7200, 
"refresh_token":"REFRESH_TOKEN", 
"openid":"OPENID", 
"scope":"SCOPE" 
}
  • 如果是{"errcode":40030,"errmsg":"invalid refresh_token"},说明refresh_token已经过期,需要重新获得access_token和refresh_token。

通过access_token调用用户信息接口

  • access_token和用户的openId都在上一步获取到
https://api.weixin.qq.com/sns/userinfo?access_token=你的ACCESS_TOKEN&openid=用户的OPENID
  • 获取到的正确结果示例,这些信息其实都可以保存到自己平台的用户注册表中。
{
"openid":"OPENID",
"nickname":"NICKNAME",
"sex":1,
"province":"PROVINCE",
"city":"CITY",
"country":"COUNTRY",
"headimgurl": "https://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
"privilege":[
"PRIVILEGE1",
"PRIVILEGE2"
],
"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"}

【微信官方提示】如果你有多个应用,并且允许用户在这多个应用中进行数据共享的话,使用的是unionid,unionid是唯一的,也就是一个微信号对应一个unionid,而一个微信号会对应多个openid,openid在不同的应用中是不同的,但是在同一个应用中是相同的(微信通过用户唯一标识,例如微信号和应用id加密后生成openid)。同时,微信提醒,用户在修改头像之后,修改前的url会失效,为了保证url失效后的异常情况,应该保存好微信头像地址。

总结

  • 微信登录其实就5步
    1)注册企业邮箱,填写信息,获取appid,appscret,绑定回调域
    2)通过appid和回调域,请求微信扫码登录界面,用户扫码授权,获取code
    3)通过appid,appsecret和code获取access_token和用户的openid
    4)通过access_token和用户的openid获取用户信息
    5)通过用户信息注册本平台的账号

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

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

相关文章

Linux 进程管理

一、简述 当运行一个程序的时候,那么运行的这个程序就叫做进程。程序,是一个静态的概念统称为软件,相当于一个被编译好可执行的二进制文件,同时程序可以长期存在系统中;进程,是一个动态的概念,…

RHCE练习3

1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab 2.给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站,基于www.openlab.com/student 网站访问学生信息,www.openlab.com/data网站访问教学资料www.openlab.com/mo…

Unix环境高级编程-学习-04-匿名管道PIPE

目录 一、环境 二、介绍 三、C标准函数介绍 1、pipe 2、popen 3、pclose 4、注意 四、宏 五、常见的管道用法 1、一对一(父进程读子进程写一条管道) 2、一对一(父进程写子进程读一条管道) 3、一对多(父进程…

leetcode—跳跃游戏—贪心算法

1 跳跃游戏1 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 示例 1&a…

vue-computed 计算属性

一、computed 计算属性 在Vue应用中&#xff0c;在模板中双向绑定一些数据或者表达式&#xff0c;但是表达式如果过长&#xff0c;或者逻辑更为复杂 时&#xff0c;就会变得臃肿甚至难以维护和阅读&#xff0c;例如&#xff1a; <div>写在双括号中的表达式太长了,不利于阅…

Linux 入门基础知识(一)—— Linux的基本使用

Linux 入门基础知识 一、Linux的基本使用和配置1.1、终端1.2、消耗内存1.3、运行级别1.6、登录前欢迎语1.5、登录后欢迎语1.6、shell1.7、ps aux1.8、设置主机名1.9、whoami和who am i1.10、命令提示符 二、Linux执行命令的过程详解和命令类型2.1、命令执行2.2、hash缓存表2.3、…

张维迎《博弈与社会》纳什均衡与囚徒困境博弈(2)囚徒困境博弈

囚徒困境大家应该都比较熟悉了&#xff0c;我觉得这篇的意义大概在与&#xff0c;经济学术语的运用&#xff1f; 囚徒困境&#xff1a;个人理性与集体理性的矛盾 假定有两个犯罪嫌疑人共同作案。警察抓住他们以后&#xff0c;分开拘押&#xff0c;并告诉他们&#xff1a;可以选…

Chiplet,汽车“芯”风向

异构集成、高速互联、算力灵活可扩展正在成为新一轮汽车芯片竞争的焦点。尤其是随着以ChatGPT为代表的大数据、大模型产品在车端的落地&#xff0c;对于芯片的要求还在持续提升。 本周&#xff0c;12家日本汽车制造商&#xff08;包括丰田、日产、本田等&#xff09;、零部件制…

设计与实现基于Java+MySQL的考勤发布-签到系统

课题背景 随着现代经济的迅速发展&#xff0c;电子考勤签到服务已经渗透到人们生活的方方面面&#xff0c;成为不可或缺的一项服务。在这个背景下&#xff0c;线上签到作为考勤签到的一种创新形式&#xff0c;为用户提供了便捷的操作方式&#xff0c;使得任务签到、个人签到记…

代码随想录算法训练营第35天 | 860.柠檬水找零 406.根据身高重建队列 452.用最少数量的箭引爆气球

柠檬水找零 局部最优&#xff1a;收到20元时优先找零10元5元&#xff0c;不够再找零3个5元&#xff0c;因为5元可以找零20和10&#xff0c;更有用。全局最优&#xff1a;完成所有的找零。 class Solution { public:bool lemonadeChange(vector<int>& bills) {int fi…

c++的发展史、缺省参数、命名空间你了解吗?

1.c的发展历史概述 1.1.什么是c C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的 程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&#xff0c; 20世纪80年代&#xff0c; 计算机…

TypeScript实战系列之强力爆破泛型的困扰

目录 介绍开始如何理解泛型语法泛型约束泛型默认值练习后续 介绍 泛型在typescript 中使用频率相当高&#xff0c;也给了初学者相当大的阻碍。希望这一篇文章&#xff0c;能帮助你们爆破它。 开始 下面通过模拟实现一个简易版本的axios来引入泛型的使用 // axios.ts type M…

如何在centos7上配置为桥接模式

一、打开虚拟机的设置页面&#xff0c;设置虚拟机桥接模式如图&#xff1a;选择桥接模式&#xff08;复制物理网络连接可选&#xff09; 二、net0对应桥接模式的配置&#xff0c;如下方式选择 三、 在 CentOS 7 中&#xff0c;通过编辑网络配置文件来配置网络参数。找到 /etc…

(九)springboot实战——springboot3下的webflux项目参数验证及其全局参数验证异常处理

前言 在上一节内容中&#xff0c;我们介绍了如何在webflux项目中自定义实现一个全局的异常处理器ErrorWebExceptionHandler&#xff0c;正常情况下其可以处理我们系统的运行时异常&#xff0c;但是无法处理参数验证的异常WebExchangeBindException&#xff0c;所以这里提供另外…

算法随想录第四十八天打卡| 198.打家劫舍 , 213.打家劫舍II , 337.打家劫舍III

详细布置 今天就是打家劫舍的一天&#xff0c;这个系列不算难&#xff0c;大家可以一口气拿下。 198.打家劫舍 视频讲解&#xff1a;动态规划&#xff0c;偷不偷这个房间呢&#xff1f;| LeetCode&#xff1a;198.打家劫舍_哔哩哔哩_bilibili 代码随想录 class Solution(…

STM32 E18-D80NK红外避障传感器

E18-D80NK-N是一款红外光电传感器&#xff0c;它同时具备发射和接收功能。通过对发射光进行调制后发出&#xff0c;并通过接收头对反射光进行解调输出。 E18-D80NK-N采用了透镜来增强传感器的性能&#xff0c;使其能够检测更远的距离。根据红外光的特性&#xff0c;不同颜色的…

拒掉了一个双 985 的面试者

下班路上&#xff0c;和一个大佬聊天&#xff0c;他说今天面试&#xff0c;拒掉了一个双 985 的候选人。 候选人背景很好&#xff0c;本科和硕士都是 985 院校毕业&#xff0c;并且是除了清北浙之外&#xff0c;排名非常靠前的 985院校。 本硕专业都是计算机专业&#xff0c;…

Spring Boot + security + jwt 测试安全策略

一、测试概述 主要目的是测试security的用法。因测试搭建mysql和redis比较麻烦&#xff0c;所以我这里将自定义的jwt和用户信息缓存到程序的内存中。 本人测试的项目比较混乱&#xff0c;Spring Boot父类只标出有用的依赖。其子类用的版本为jdk11。后续会继续深入oauth2&#x…

数据库之TiDB基础讲解

文章目录 1 TiDB1.1 引言1.2 TiDB介绍1.3 系统架构1.3.1 TIDB Server1.3.2 PD Server1.3.3 TIKV Server1.3.4 TiKV如何不丢失数据1.3.5 分布式事务支持 1.4 与MySQL的对比1.5 性能测试1.5.1 测试一1.5.2 系统测试报告 2 1 TiDB 1.1 引言 当我们使用 Mysql 数据库到达一定量级…

调试小结:PHY初始化前后Link Status是否能正确反应网线插上、拔下状态

1 说明 为了验证是否需要初始化PHY才能检测到网线插上、拔下&#xff0c;这里我们对比初始化PHY&#xff08;LAN8720&#xff09;前后&#xff0c;插拔网线PHY寄存器1的bit2的是否按照预期变化来进行测试。 我们查看的PHY寄存器是1的bit2&#xff0c;定义如下&#xff1a; 2…