Skip to content

会话服务

Together we can fly! edited this page Nov 20, 2016 · 10 revisions

会话服务可以让开发者很方便地在业务服务器中获取微信用户信息,然后在此基础上处理其他业务逻辑。

会话服务涉及四个模块协作处理通信过程,它们分别是:微信小程序客户端(需使用客户端增强 SDK)、业务服务器(需使用服务端 SDK)、会话管理服务器及微信服务器。

会话服务主要包含处理用户登录处理业务请求时校验登录态两个功能。以下阐述这两个功能的具体实现。

处理用户登录

登录流程

  • 客户端 SDK 获取登陆参数
    • 调用 wx.login() 获取登录凭证 code
    • 调用 wx.getUserInfo() 获取用户信息的加密数据 encryptedData 和加密初始向量 iv
  • 客户端 SDK 调用 wx.request() 向业务服务器发起登录请求(codeencryptedDataiv 以请求头的形式发送)
  • 业务服务器收到请求后
    • 从请求头中取出 codeencryptedDataiv
    • 调用会话管理服务器提供的用户登录接口 qcloud.cam.id_skey 请求登录
  • 会话管理服务器收到请求后
    • 调用微信服务器 jscode2session 接口,使用 code 换取 session_key 和用户 openId
    • 使用 session_keyopenId 处理得到自己的 idskey 写入数据库用来管理会话
    • 使用 session_keyiv 对加密的用户信息 encryptedData 进行解密得到用户明文信息 userInfo
    • idskeyuserInfo 一并返回给业务服务器
  • 业务服务器收到会话管理服务器的响应后,将 idskey 返回给微信小程序客户端
  • 微信小程序客户端将 idskey 存入 storage 中供后续请求使用

处理业务请求时校验登录态

登录态校验

  • 小程序客户端使用 SDK 的请求方法 qcloud.request() 发送业务请求
  • SDK 通过 wx.getStorage() 取出会话参数 idskey
  • 调用 wx.request() 把业务请求发送到业务服务器(idskey 会附加在请求头中)
  • 业务服务器收到请求后,从请求头中取出 idskey,调用会话管理服务器提供的登录态校验接口
  • 会话管理服务器收到请求后,校验参数 idskey,返回用户信息 userInfo(校验成功)或失败信息(校验失败)给业务服务器
    • 校验成功时,业务服务器可以使用用户信息处理其他业务逻辑,并进行响应
    • 校验失败时,业务服务器将错误信息直接响应给微信小程序客户端,SDK 如果发现错误是登录态失效,会自动重新发起登录流程后重新进行业务请求