应用网站微信扫码登录处理逻辑解析
应用网站微信扫码登录处理逻辑解析
近日刚刚进行了网站应用微信扫码登录的功能开发。开发前看了不少文档,但感觉都很偏技术术语,太过于专业。对于刚刚想涉及这方面的菜鸟来说,看的一脸懵逼。
趁着自己刚刚动手的开发经验,给菜鸟们介绍下相关思路,让大家知道下入门的路。
老鸟们就不必看了,因为可能这篇文章的逼格太低。
基础概念
微信扫码登录的过程细分的话步骤很多,但是仔细了解就会发现每一个步骤都具有以下特点:
- 参与方只有两个:一个请求方,和一个响应方。
注:请求方类似提问方,响应方类似回答方。
- 数据的交换顺序:请求方先向响应方发送数据,响应方再向请求方返回数据。
注:必须先问后答,由提问方提问,回答方回答。
- 数据的一次交换原则:请求方向响应方发送数据后,必须等待响应方返回数据;响应方未返回数据前,请求方不在重复发送数据。
注:必须一问一答,请问方提问后,再回答方未回答问题前不能再次提问。
准备工作
注册微信开放平台账号。
账号申请开发者资质。
账号内创建网站应用。
搭建本框架模式的网站。注:网站分为网页前端(以下简称前端)和API后端(以下简称后端),前后端通过json报文做数据通信。
处理流程涉及各参与方
A. 客户方浏览器。
B. 客户方手机微信。
C. WEB应用前端。(以下简称WEB前端)
D. WEB应用后端API。(以下简称WEB后端)
E. 微信二维码前端页面。(向客户浏览器显示二维码)
F. 手机微信后台。(响应客户手机微信)
G. 微信主动后台。(主动调用回调地址)
H. 微信认证API。(响应WEB后端认证请求)
注:微信方后台可视为数据完全共享。
处理时序图
处理流程说明
1. 客户方浏览器请求并加载WEB前端的静态资源(包括html,js,css等),并进行页面渲染。
请求方:客户方浏览器。A
响应方:WEB前端。C
请求数据:应用网址。(url及参数)
响应数据:WEB前端的静态资源(包括html,js,css等)。
2. 客户方浏览器通过前端资源的js向WEB后台申请一个会话ID。该会话ID将在浏览器端和WEB后端各自保存。
请求方:客户方浏览器。A
响应方:WEB后端。D
请求数据:应用网址。(url及参数)
响应数据:json数据,含会话ID。
3. 客户方浏览器通过前端页面链接或按钮,发送微信扫码登录请求给WEB后端;WEB后端生成微信扫码的url链接地址返回给客户方浏览器。
请求方:客户方浏览器。A
响应方:WEB后端。D
请求数据:应用网址。(url及参数,参数中含会话ID)
响应数据:微信扫码的url链接地址(参数中含回调地址及会话ID)。
注:
a. url信息中含有WEB后端回调地址,该地址将在步骤8使用。
b. url信息中含有步骤2中生成的会话ID,该ID可使用url参数的state来保存,且可在步骤8中使用。
c. 步骤2和3的交互可以分两次完成,也可以集成到一次完成。
4. 客户方浏览器根据步骤2获取的url地址,打开微信前端扫码页面(二维码中含有认证用数据A)。
请求方:客户方浏览器。A
响应方:微信二维码前端页面。E
请求数据:应用网址。(url及参数,参数中含回调地址及会话ID)
响应数据:二维码页面(二维码中含有认证用数据A)。
5. 客户在扫码页面使用手机微信扫码,使手机微信获取到认证用数据A。
请求方:客户手机微信。B
响应方:客户方浏览器。A
请求数据:手机摄像头。
响应数据:二维码页面(二维码中含有认证用数据A)。
6. 客户手机微信将扫码得到的认证用数据A发送到微信后台,微信后台返回登录确认页面给手机微信。
请求方:客户手机微信。B
响应方:手机微信后台。F
请求数据:二维码中的认证用数据A。
响应数据:微信登录确认页面。
7. 客户在手机微信的登录确认页面上点击确认,手机微信将确认请问发往微信后台。
请求方:客户手机微信。B
响应方:手机微信后台。F
请求数据:微信登录确认页面中点击确认的消息。
响应数据:手机微信后台F已收到确认消息。
8. 微信后台调用步骤2中填写的WEB后端回调地址,告知WEB后端认证code信息和会话ID。
请求方:微信主动后台。G
响应方:WEB后端。D
请求数据:code消息和会话ID。
响应数据:扫码页面的重定向地址。
注:
可视为步骤7中的手机微信后台F将相关数据告知微信主动后台G。
步骤7与步骤8中间隐含了手机微信后台F向微信主动后台G共享数据的过程。
WEB后端将code与会话ID记录到数据库,并建立对应关系。
响应数据中的重定向地址为WEB前端应用地址,且地址中含有参数会话ID
微信后端D可在步骤10后再向微信主动后台G响应重定向地址消息。
9. WEB后端通过向微信后台发送code信息,获取access_token。
请求方:WEB后端。D
响应方:微信认证API。H
请求数据:code消息,appid,appsecret等。
响应数据:access_token。
注:WEB后端将记录下access_token,并将其与对跟code关联的会话ID关联,且将关系数据保存到数据库。
10. WEB后端通过向微信后台发送access___token和openid信息,获取个人信息。
请求方:WEB后端。D
响应方:微信认证API。H
请求数据:access___token和openid信息等。
响应数据:微信用户个人数据json。
注:WEB后端将记录下微信用户个人数据json,并将其与对应的会话ID关联,且将关系数据保存到数据库。
11.客户端浏览器从二维码扫码页面得到重定向地址。
请求方:客户端浏览器。A
响应方:微信二维码前端。E
请求数据:access___token和openid信息等。
响应数据:重定向地址(该重定向地址为步骤8响应消息中,由WEB后端D发送给微信主动后台G的,且重定向地址中包含会话ID)。
注:客户端浏览器获取重定向地址方式可能是轮询微信二维码前端页面;也可能是双方建立了WebSocket通讯后,由微信二维码前端通知。
12.客户端浏览器跳转至重定向地址(WEB前端)。
请求方:客户端浏览器。A
响应方:WEB前端。C
请求数据:重定向地址,含会话ID。
响应数据:WEB前端页面。
13.客户端浏览器通过会话ID向WEB后端请求微信个人信息。
请求方:客户端浏览器。A
响应方:WEB后端。D
请求数据:客户端浏览器调用WEB前端的js脚本将会话ID发送给WEB后端。
响应数据:WEB后端根据会话ID,从数据库中抓取对应的个人信息数据(该数据为步骤10时由WEB后端保存到数据库中)后,将数据组成json数据返回。
14.客户端浏览器JS处理获取的json数据。
客户浏览器调用WEB前端js脚本将步骤13获得的json数据加载到页面中显示,完成整个登录过程。
应用网站微信扫码登录处理逻辑解析相关推荐
- 网站微信扫码登录总结
文章目录 微信扫码 前端操作 后端操作 企业微信扫码 总结 补充 网站微信扫码登录从最初的惊艳四座到如今在各大网站普及已经过了7年的时间,如今网站微信扫码登录靠着便捷.安全的特性成为了网站与用户的首选 ...
- Spring学习笔记(二十三)——实现网站微信扫码登录获取微信用户信息Demo
目录 微信扫码登录介绍 开发步骤 微信扫码登录示例 微信开放文档 遇到的问题 使用第三方工具实现网站微信扫码登录 开发前介绍 开发步骤 微信扫码登录获取微信用户信息Demo实现流程 实现效果 实现过程 ...
- Java后台实现网站微信扫码登录功能,获取用户openid,及微信用户信息(小程序码方案),关联微信小程序(个人主体小程序也可以)
目录 前言 操作流程 1.注册微信小程序 2.通过后台获取小程序码 注意事项 时序图理解 方案实现步骤 前言 很多业务场景之下我们需要实现微信扫码登录检测登录状态的需求,或需要同步网站与小程序的用户信 ...
- vue3、vue2 实现网站微信扫码登录
其实前端实现没什么难点,重点都是在后端,这里我记录了一下前端实现扫码登录的做法 准备工作 | 微信开放文档 做之前我们先去看一下大致流程 记得要看一下参数 都讲的很清楚了 实现网页微信扫码登录有两种 ...
- 个人博客网站实现微信扫码登录(附源码)
前言 一般情况下,个人博客网站 想要做用户注册.登录, 就需要让用户填写用户名.密码等信息进行手动注册.登录,这非常不友好.如果想做成微信扫码登录,对不起~~, 微信扫码登录的接口只对企业开放.好吧, ...
- 网站使用微信扫码登录流程
微信扫码登录是一个标准的oauth 2.0的过程. 1.用户请求访问网站,选择微信登录. 2.redirect到微信二维码页面 3.获取微信登录二维码,请求参数包括本网站的appId和登录成功后跳转回 ...
- 微信扫码登录网站实现案例(无需授权)
前言 最近因业务需要,需要给网站增加一个扫描公众号二维码登录网站的功能,通过扫码登录,一来用户登录网站不需再输入账号密码,提升了用户体验,二来也可以作为公众号吸粉的一个渠道. 开发准备 实现微信扫码登 ...
- 通过微信扫码登录网站流程
通过微信扫码登录网站 微信开放平台文档地址:https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Author ...
- PC网站如何实现微信扫码登录
不管你运营什么类型的网站,用户注册都是很重要的一个环节,用户注册的方式也是很多的,比如邮箱注册.手机号注册.第三方授权登录等.其中,第三方授权登录是最常用的一种方式,微信扫码登录是其中的一种,但是微信 ...
最新文章
- zabbix 安装_zabbix系列(五) Grafana4.6.3+Zabbix 的安装部署
- 设置TabBar分栏控制器上图片的大小问题
- 单例模式的几种实现方式
- ABAP和Java的tag(marker) interface
- 砸4亿美元,GE豪赌的全球最大风力发电机到底多大?
- 计算机学报Latex模板运行出错解决
- thinkphp商城系统 有什么优势 好在哪里
- sklearn实现lda主题模型LatentDirichletAllocation
- 【知识整理】Nmap与Masscan
- 计算机上自带的打字游戏,完美运行金山打字通2016(包括自带的小游戏)
- Docker(五)——Docker镜像仓库
- Hard masking and soft masking
- 手机数据恢复华为荣耀X1智能手机32G内置存储手机严重损坏恢复照片聊天记录文档...
- Scala可变长度参数和:_*使用
- 华硕e202s安装linux系统,华硕笔记本E202S原装win10系统可以改win7吗?
- Xbox One手柄
- ultimaker论坛_Ultimaker的故事:具有开源DNA的3D打印机
- 胡小羊的前端专栏(第16期)
- 达摩达兰论估价pdf_《故事与估值:商业故事的价值》pdf文字版下载
- linux ifconfig 多地址,ifconfig查看多了几个IP地址
热门文章
- java我的世界1.7.2怎么下载模组_我的世界龙骑士mod下载1.7.2 完美版【附安装使用教程】下载...
- GetDocument()使用
- 10款效果惊艳的HTML5应用和源码
- 实现网站常见的轮播图
- matlab hsv图像各个通道的含义,人类图:各通道意义
- Mac中在Finder里面打开终端
- 什么是企业云邮箱域名?什么是邮箱移动办公oa?
- 递归实现斐波那契数列 一个人赶着鸭子去每个村庄卖,每经过一个 村子卖去所赶鸭子的一半又一只。 这样他经过了 七个村子后还剩 两只鸭子,问问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
- C语言捉弄人的程序,给大家几个捉弄人的小方法(请谨慎使用!)
- ubuntu配置nvidia显卡性能