微信小程序之登录,模板消息,服务通知

1.登录流程图
 1).前端调用 wx.login()获取code
 2).前端调用 wx.request()发送code给后端

 3).后端根据appid(后台取得)+appsecret(后台取得)+code(前端发送)发送到微信接口,得到session_key+openid等

接口地址:https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

 4).后端接收 openid(用户唯一标识, 私密)与 session_key(会话密钥)后,生成自己自定义的用户登录标识: my_session_key,并保存到Mongo中
    在后面的用户检验中,均使用my_session_key进行验证

2.获取用户信息流程:
    前端调用 wx.getUserInfo
流程:先申请权限,再获取信息,所以开始要进行是否拥有权限的判断
    
 // 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
      }
    })
    // wx.openSetting({
      
    // })
    // 获取用户信息
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
          wx.getUserInfo({
            success: res => { //console.log(112233);
              // 可以将 res 发送给后台解码出 unionId
              this.globalData.userInfo = res.userInfo


              // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
              // 所以此处加入 callback 以防止这种情况
              if (this.userInfoReadyCallback) {
                this.userInfoReadyCallback(res)
              }
            }
          })
        }else{
          wx.authorize({
            scope: 'scope.userInfo',
            success: res => {
              console.log(111111);
              wx.getUserInfo({
                success: res => {
                  // 可以将 res 发送给后台解码出 unionId
                  this.globalData.userInfo = res.userInfo


                  // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
                  // 所以此处加入 callback 以防止这种情况
                  if (this.userInfoReadyCallback) {
                    this.userInfoReadyCallback(res)
                  }
                }
              })
            },
            fail:function(res){
              console.log(222);
            }
          })
        }
      }
    })


3. 身份校验

提供my_session_key,rawData,signature,callback 后端进行校验

后端校验:
1).my_session_key,rawData,signature全部非空

2).根绝my_session_key,从Mongo中查询是否存在,存在则用户已登录,发送success状态码,失败则用户未登录或登录过期,发送fault状态码


4. 提醒我
1).用户点击按钮,触发前端调用后端getwake接口,提供 my_session_key,formid(表单id),id(商品id),callback
2).后端进行处理后返回给前端处理结果
根据my_session_key 获取mongo,增加detail_id,form_id后,将数据写入数据库.并将是否成功的结果返回给前端

3).计划任务定时轮询,将符合要求的提醒事件发送服务通知.(服务器定时任务)


5.  服务通知
1).前端请求接口,参数为refresh,callback(可空)
2).后端处理请求
得到access_token
设置请求url
得到数据库中,尚未提醒过的事件的信息,
提醒规则: 根据商品id获得商品信息,判断商品秒杀开始时间与现在的时间差是否小于3分钟,若是,则提醒,不是则跳过
得到符合提醒规则的事件,根据取得的商品信息填写模板信息,封装成参数进行post请求
根据响应参数判断是否成功提醒,成功后更新数据库信息

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