微信小程序> 微信小程序获取用户运动步数后端返回41003

微信小程序获取用户运动步数后端返回41003

浏览量:615 时间: 来源:yemuxia_sinian

最近在做一个运动步数兑换的小程序,记录下自己遇到的一些问题:1、授权流程(需要获取用户信息的授权和获取运动步数的授权)2、在获取运动步数时后端一直返回-41003

一、授权流程

由于微信的一些授权接口都要废弃了,所以自己只能用弹窗+button的形式来引导用户授权。具体流程:

(1)调用getsetting来判断用户是否授权获取用户信息,有授权的话直接调用wx.login和wx.getUserInfo获取用户信息,然后调用后端的登录接口进行入库并登录(后端返回用户id过来存储到全局);如果没有授权的话,弹窗进行提示,然后通过button按钮进行授权引导。授权成功,就和前面一样,用户拒绝授权的话,继续弹窗强制授权。

(2)获取用户信息授权成功后,调用wx.getWeRunData(因为调用这个接口前,需要先调用wx.login所以放在用户信息授权后)进行获取运动步数的授权,授权成功,调用后端的接口,把getWeRunData返回的数据iv和encryptedData一起传过去就可以获取用户的运动步数了。如果授权失败,弹窗提示需要授权才能使用小程序,然后通过button按钮,打开授权设置让用户自己允许授权。

具体代码:

getUserInfo: function(){  //获取用户信息和运动步数以及产品信息    let that = this;    wx.login({      success(res){        console.log(res.code,'code------------')        wx.getUserInfo({          success(res2){  //在这边调用登录接口,获取用户的id            //console.log(res2,'用户信息')            that.setData({              userInfo: res2.userInfo            });            app.globalData.userInfo = res2.userInfo;            wx.request({              url: app.globalData.baseUrl+'login.php?code='+res.code+'&nickName='+res2.userInfo.nickName+'&avatarUrl='+res2.userInfo.avatarUrl,              success(res3){                console.log(res3,'++++++登录接口返回的信息')                if (Number(res3.data.succeed)===1){                  app.globalData.uid = res3.data.data.userId;                }                               wx.getWeRunData({//获取运动步数                  success(res4) {                    console.log(res4, '=====获取用户步数,授权成功')                    wx.request({                      url: app.globalData.baseUrl+'decrypt.php?encryptedData='+res4.encryptedData+'&iv='+res4.iv+'&userId='+app.globalData.uid,                      success(res) {                        console.log(res, '后端返回的用户步数数据')                      }                    })                  },                  fail(res5) {  //授权微信运动步数失败                    console.log(res5, '获取用户步数,授权失败')                    that.setData({                      authorizeMsg: '该小程序需要授权微信步数才能使用',                      isAuthorize: true,                      isOpensetting: true                    })                  }                })              }            });                      }        })      }    })  },  onLoad: function () {  //在onload进行数据的获取    let that = this;    wx.getSetting({ //判断用户是否授权      success: res=>{        //console.log(res,'——————————————判断用户是否授权');        if (res.authSetting['scope.userInfo']) {  //用户有授权,直接调用函数进行登录                   this.getUserInfo();        }else{  //用户未授权,弹窗引导用户授权          console.log('用户未授权')          this.setData({            authorizeMsg: '该小程序需要授权用户信息才能使用',            isAuthorize: true,            isOpensetting: false          })        }      }    })  },  closeAuthorize: function(){ //关闭弹窗    console.log('res')    this.setData({      isAuthorize: false    })  },  onGotUserInfo: function(e){ //button授权按钮事件     console.log(e.detail.errMsg)    if (e.detail.errMsg ==='getUserInfo:ok'){ //授权成功      this.getUserInfo();    }else{  //授权失败      this.setData({        authorizeMsg: '该小程序需要授权用户信息才能使用',        isAuthorize: true,        isOpensetting: false      })    }  }

二、获取运动步数时后端返回-41003

找了下博客发现问题是:前端传给后端的数据iv和encryptedData里面的+号都被解析成空格了,所以后端想了个办法说能不能把所有的空格都替换成+号,试了一下果然可以。之前找的资料是说前端把数据转码下,但是有几率还是会报-41003的错误所以没采用。

获取的数据:(只返回当天的步数)

授权:

微信小程序

版权声明

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

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

热门模板

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