微信小程序> 微信小程序解析运动步数时小概率解析出错问题解决

微信小程序解析运动步数时小概率解析出错问题解决

浏览量:674 时间: 来源:AloneAsFoam

核心接口  wx.login、wx.checkSession、wx.getWeRunData

上代码:

    //获取步数    async getWxStep(){      let that = this;        wx.getWeRunData({          success: res => {            Utils.wxRequest({              url: API.api.getStepDecode, //服务端解析微信运动信息的接口              data: {                encryptedData: res.encryptedData,                iv: res.iv              }            }, false).then(res => {              if(res.code === 12000){                if(wx.showLoading) wx.hideLoading()                let i = res.data.length;                that.todayPace = res.data[i-1].step  //get今天的运动步数                //。。。。。业务逻辑                that.$apply()              }else if(res.code == 16000){                  //当解析失败的时候重新登录更新session                Utils.loginAgain().then(r=>{                  console.log(r)                  that.Init()                },err=>{})              }else {                Utils.showToast(res.msg)              }            }, err => {                Utils.showToast(err.msg)            })          },          fail: err=>{            Utils.showToast('获取运动信息失败');            that.$apply()          }        })           };    async Init(){      let that = this;      Utils.wxRequest({        url: API.api.getStepIndex      }, false).then((res) => {        if(res.code === 12000) {          //....业务逻辑          that.getWxStep();        }else {          Utils.showToast(res.msg);        }      }, (err) => {        Utils.showToast(err.msg);      })    }    onShow() {      this.Init()    }    onLoad() {      let that = this;      Utils.showLoading()      //加载页面之前先判断当前session是否过期      //如果过期就重新登录更新session      wx.checkSession({        success: ()=>{            that.Init()          console.log('没过期')        },        fail:()=>{          Utils.loginAgain().then(res=>{            that.Init()            console.log('已过期')          },err=>{})        }      })    };

需要注意的是当前的session是否过期 wx.checkSession判断当前session是否过期,如果过期的话就重新调用登录接口,把获取到的code传给服务端,通知服务端更新session_key(前后端必须保证session_key一致才能解析成功)

//重新登录function loginAgain(){  return new Promise((res, rej)=>{    wepy.login({      success: data => {        wepy.request({          url: API.api.getLogin, //开发者服务器接口地址",          data: {jsCode: data.code}, //请求的参数",          method: 'GET',          success: r => {                  //缓存更新的Uid和token              wx.setStorageSync('uId',r.data.data.id)              wx.setStorageSync('token', r.data.data.token)              res(r)          },          fail: (e) => {            rej(e)          },          complete: () => {}        });      }    })  })}

但是有一个问题,即时前后端session_key一致,还是有一定的几率出现解析失败的

开发者社区有朋友遇到这个问题,微信官方也也一直没有给出原因和解决方式

目前来看bug来源应该是小程序底层

出现解析失败的原因应该还是出现在session_key上,我提供的解决思路是当出现解析失败的时候,让服务端给一个特殊的状态码,根据这个状态码再去重新登录一次,这样就保证了session_key绝对同步

测试结果显示正常;

在onLoade(){}里调用一次wx.login() 不请求后台接口 , 这时客户端的session_key已更新,服务端还是旧session_key , 解析步数是后端返回异常码16000,然后重新登录后再解析,正常。。。  哟吼吼

微信小程序

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎