扫码登录流程

概述

很多系统会对接 微信开放平台 的微信扫码登录。但是假设微信和业务帐号是 一对多 的关系。就需要我们根据微信自己实现登录了。

当然,前提是微信和业务帐号已经做了绑定。具体可参考 微信公众号开发(关注、取消、发送模板消息) 实现关注绑定。

本文主要讲解的是 微信网页开发 中的web扫码登录。

流程

以下流程中约定

  • PC端: 二维码载体
  • 手机端: 微信扫码及授权载体
  • 微信服务: 腾讯服务器
  • 业务服务: 和业务相关联的服务
  • 核心服务: 业务系统基础服务,这里主要指业务系统微信模块底层服务

  1. PC请求微信扫码登录页(调用登录url)
  2. 业务服务调用核心服务,获取由核心服务返回的微信 oauth2 认证链接(传参: sessionId和callbackUrl, 核心服务缓存信息, 并将sessionId放在认证链接的state字段中)
  3. 业务服务生成url链接返回给前端,前端根据url 生成二维码 (未扫码)。 如 http://host:port/login?sessionId=123 。注意, 为了降低二维码的复杂性, 提高识别效率, url是业务服务web层url,不是核心服务返回的oauth2对应的url链接
  4. 手机端打开微信 扫码 , 实际上是调用了二维码对应的url请求
  5. 业务服务接收到上述请求后,在后台 重定向 核心服务返回的认证链接。(已扫码)
  6. 由于oauth2认证链接中配置的 redirect_url, 微信服务会把 code 返回到核心服务中 redirect_url 对应的接口
  7. 核心服务接收到 codestate 参数后,后台换取 openid, 然后根据 openid 去数据库中查询 业务账户信息, 然后将账户信息和sessionId返回到手机页面
  8. 手机端选择业务帐号并调用快捷登录接口,并生成token(已授权)
  9. PC端轮询到 sessionId 状态为授权状态后 获取token并校验 。(已完成)
  10. PC端轮询 sessionId 状态, 当 已完成 状态时路由到首页。

最后

本文到此结束,感谢阅读。如果您觉得不错,请关注公众号【当我遇上你】,您的支持是我写作的最大动力。