准备工作

  1. 项目集成 WX 微信SDK
  2. 配置公众号:公众号 IP 白名单、公众号设置=》JS接口安全域名、网页授权域名

微信获取 OPENID 的三次重定向

  1. 用户进入项目首页,页面上面判断本地缓存中是否存在 token,不存在则进入登录流程。
    1. windows.loaction = 登录地址(authorize)+ &当前访问项目的标识 = XXX
  2. 登录地址(authorize)接收到用户请求
    1. 根据项目标识,查询对应公众号的配置信息,set 进 wxMpService
    2. 项目标识、其他参数(如果有需要)存入 redis
    3. 生成访问微信获取 code 的 url,state 参数的值为 第二步 redis 的 key
    4. redirect 重定向 url (第一次重定向)
  3. 微信根据第二步携带的重定向地址,在处理完成后携带 code、state 重定向回我们设置的地址(第二次重定向)
  4. 验证微信重定向回来时携带的参数并进行相应的处理。
    1. 验证 code ,并且获取 openid 等信息
    2. 根据 state 读取 redis 获取我们需要的参数
    3. 根据 1、2 步的数据、业务逻辑生成 token
    4. 将 openid、业务逻辑相关的数据保存到 token 中
    5. 生成重定向回项目的地址,并且在地址上携带 token参数(第三次重定向)
  5. 用户浏览器上(微信),我们的项目首页检测到链接中携带有 token,将 token 保存到本地缓存。
  6. 微信获取 OPENID 进行登录的流程执行完毕。