0 前言

在我们日常逛各个网站的过程中,部分网站需要登录,才能进行资源访问,这是很普遍的现象。

​引流​
​两种​
​微信开放平台​​网站应用​​网站应用名称​​同意​​拒绝​

如下图所示。

​不支持个人用户注册​
​认证通过的微信服务号​​生成带参数的二维码​​关注公众号​​个人不支持申请服务号​

接下来将分析这种通过服务号的网站登录方式。

1 准备工作

实现此功能,需要准备如下:


  • 一个认证通过的服务号
  • 一台服务器
  • 一个已备案的域名

​认证通过的服务号​
​申请测试号​
​Redis​

最后是域名,必须通过备案,否则微信后台的服务器地址,不允许添加此域名。

​事件消息​​后台→开发→基本配置→服务器配置​​开启​

2 原理分析

​时序图​

其核心流程如下:

​浏览器​​登录页面​​自己服务器​​自己服务器​​Session​​KEY值​​KEY值​​初始参数数组存入Redis​​KEY值​​服务号​​生成二维码​​带此KEY值的二维码​

如下图所示:

​自己服务器​

如下图所示:

​关注​​微信APP​​微信服务器​​关注事件​​微信服务器​​关注事件​​用户信息​​二维码参数​​POST​​自己服务器​​事件接收API​
​直接进入公众号​​上述信息​
​事件KEY值​​发送方账号​
​自己服务器​​微信服务器​​事件消息​​解析​​KEY值​​OpenID​​OpenID​​获取用户信息​​基本信息(只有昵称、性别、头像URL,这些都是***息)​​KEY值​​重新存入Redis数据库​​修改该用户的登录状态​
​浏览器​​轮询​​登录状态​​已登录状态​​拉取用户信息​​进行登录​

在这整个过程中,浏览器和自己服务器是始终保持通讯状态的,以及时获取用户的登录结果。

这个过程,有这么几点需要注意:

​保持通讯​​生成的带参数的二维码​​客户端浏览器​

如下图所示:

3 具体实现

​GET​​POST​​Redis​​XML​​服务器配置​​项目部署​
​SSM​​Spring Boot​​Java框架​​TP​​Laravel​​PHP框架​