分析微信小程序的登录和支付

  • 关于登录
    在小程序初始化的时候调用两个方法,一个是检查登录态,另一个则是缓存用户信息。

    • onLaunch
      • checkSession()
      • getUserInfo()
  • 检查登录态checkSession()
    • 请求api,wx.checkSession成功则登录态还没过期,失败则重新请求登录。
    • 成功–>调用getLoginSession()方法,用于获取localStorage中的3rd_session,需要登录授权的接口使用。
      - getLoginSession()方法:调用wx.getStorage将数据存储在本地缓存中指定的 key 中。成功则执行回调,失败则再次登录拿到3rd_session,执行回调。
  • 关于登录
    • 请求wx.login成功则请求自己后台的接口,请求的参数是code,成功则返回t_session:openid+session_Key->存储3rd_session->wx.setStorage.
      • 缓存用户信息
      • 判断有没有用户信息有就直接提交用户信息,没有则请求登录后再调用获取用户信息的方法。
      • 提交用户信息->判断有没有用户信息,再调用getLoginSession()方法将数据存在本地缓存,然后调用自己后台的获取用户信息接口将用户信息存储在后台数据库。

对于登录态的逻辑上我可能解释得不清楚,具体可以查看的链接
小程序登录态维护实现流程

  • 通过wx.login获取登录态。 通过登录返回的code发送给服务器,服务器用code换取session_key和openid后。

  • 获取session_key后一般使用缓存框架保存登录态,服务端随机生成一串唯一字符串3rdSessionId为key,session_key为value组成键值对并存到缓存当中,缓存时间视情况自行决定。

  • 将3rdSessionId返回给客户端

  • 客户端将3rdSessionId缓存到localStorage中,后续接口从缓存中读取3rdSessionId,传递给服务器;服务器根据3rdSessionId来判断用户身份。
  • 如果服务器根据3rdSessionId在缓存中查找是否存在session_key,如果存在正常执行;如果不存在小程序未登录,重新从第一步流程走。

  • 关于支付

  • 提交订单请求后台->获取支付信息->唤起支付功能wx.requestPayment

你可能感兴趣的:(微信小程序)