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。继而调用 wx.request() 发送请求到业务服务器(codeencryptedDataiv 以请求头的形式发送)
  • 业务服务器收到请求后,从请求头中取出 codeencryptedDataiv,调用会话管理服务器提供的用户登录接口
  • 会话管理服务器收到请求后,会调用微信服务器 jscode2session 接口,使用 code 换取 session_key 和用户 openId
  • 然后用 session_keyiv 对微信用户信息 encryptedData 进行解密得到用户明文信息 userInfo,使用 session_keyopenId 处理得到自己的 idskey 写入数据库用来管理会话。最后将 idskeyuserInfo 一并返回给业务服务器
  • 业务服务器收到会话管理服务器的响应后,将 idskey 返回给微信小程序客户端
  • 微信小程序客户端将 idskey 存入 storage 中供后续请求使用

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

  • 微信小程序客户端从 storage 取出 idskey,调用 wx.request() 发送请求到业务服务器(idskey 以请求头的形式发送)
  • 业务服务器收到请求后,从请求头中取出 idskey,调用会话管理服务器提供的登录态校验接口
  • 会话管理服务器收到请求后,校验参数 idskey,返回用户信息 userInfo (校验成功)或失败信息(校验失败)给业务服务器
    • 校验成功时,业务服务器可以使用用户信息处理其他业务逻辑
    • 校验失败时,业务服务器将错误信息直接响应给微信小程序客户端。此时,微信小程序客户端会重新发起请求处理用户登录及校验登录态

以下是处理业务请求时校验登录态流程的时序图:

校验登录态