画布 1
微信小程序-扫码登录
  小程序端
    扫web端二维码进行登录
      storage中有无token信息
        无
          提示小程序用户授权
        有
          携带token+扫码的QR信息
请求接口3
            提示小程序token过期 重新授权登录
            提示QR过期
            提示QR已经被扫码登录
            提示QR扫码登录成功
  web端
    storage中有无token信息
      无（非登录状态）
        storage中有无QR信息
          无
            向接口1请求QR信息并保存到storage
          有
            设置定时器
              携带QR信息向接口2定时查询：
QR是否已经过期+QR是否已经被扫码登录
                QR已经过期
                  销毁定时器
二维码加遮罩提示已过期
等待用户手动刷新二维码
                QR未被扫码登录
                QR已被扫码登录
                  将拿到的token存入storage
      有（处于登录状态）
        跳转到首页
  后端接口
    web端请求新的QR信息（接口1）
      将当前时间戳+随机数作为QR信息
        写入数据库表/redis
（结构为 id、QR信息、创建时间、有效秒数、用户token）
          返回
写入QR信息的base64形式的二维码
    web端请求查询QR状态（接口2）
      拿web用户携带的QR信息
从数据库查询创建时间、有效秒数、用户token
        当前时间 > 创建时间 + 有效秒数
          返回
此QR已过期
        当前时间 > 创建时间 + 有效秒数
          用户token为空
            返回
此QR未被扫码登录
          用户token不为空
            返回
此QR已被扫码登陆
    小程序端扫码请求（接口3）
      拿小程序用户携带的token信息
从用户表中查询此token是否有对应的用户
        有
          拿小程序用户携带的QR信息
从数据库查询创建时间、有效秒数、用户token
            当前时间 > 创建时间 + 有效秒数
              返回
此QR已过期
            当前时间 > 创建时间 + 有效秒数
              用户token为空
                将用户token信息写入此QR信息所在行
                  返回
成功登录信息
              用户token不为空
                返回
已经为登录状态
        无
          返回
提示小程序用户重新授权登录
    小程序用户授权登录（接口4）
      过程省略
（因为用的是wx.login()那套标准方法）
（最后拿到用户的openid）
        拿到openid+自己的加密规则
          生成用户token
            写入数据库
              返回
微信小程序用户的token