概述
很多系统会对接 微信开放平台
的微信扫码登录。但是假设微信和业务帐号是 一对多
的关系。就需要我们根据微信自己实现登录了。
当然,前提是微信和业务帐号已经做了绑定。具体可参考 微信公众号开发(关注、取消、发送模板消息) 实现关注绑定。
本文主要讲解的是 微信网页开发
中的web扫码登录。
流程
以下流程中约定
- PC端: 二维码载体
- 手机端: 微信扫码及授权载体
- 微信服务: 腾讯服务器
- 业务服务: 和业务相关联的服务
- 核心服务: 业务系统基础服务,这里主要指业务系统微信模块底层服务
- PC请求微信扫码登录页(调用登录url)
- 业务服务调用核心服务,获取由核心服务返回的微信
oauth2
认证链接(传参: sessionId和callbackUrl, 核心服务缓存信息, 并将sessionId放在认证链接的state字段中) - 业务服务生成url链接返回给前端,前端根据url
生成二维码
(未扫码)。 如http://host:port/login?sessionId=123
。注意, 为了降低二维码的复杂性, 提高识别效率, url是业务服务web层url,不是核心服务返回的oauth2对应的url链接 - 手机端打开微信
扫码
, 实际上是调用了二维码对应的url请求 - 业务服务接收到上述请求后,在后台
重定向
核心服务返回的认证链接。(已扫码) - 由于oauth2认证链接中配置的
redirect_url
, 微信服务会把code
返回到核心服务中redirect_url
对应的接口 - 核心服务接收到
code
和state
参数后,后台换取openid
, 然后根据openid
去数据库中查询业务账户信息
, 然后将账户信息和sessionId返回到手机页面 - 手机端选择业务帐号并调用快捷登录接口,并生成token(已授权)
- PC端轮询到
sessionId
状态为授权状态后获取token并校验
。(已完成) - PC端轮询
sessionId
状态, 当已完成
状态时路由到首页。
最后
本文到此结束,感谢阅读。如果您觉得不错,请关注公众号【当我遇上你】,您的支持是我写作的最大动力。