当前位置:   article > 正文

微信小程序获取用户运动步数后端返回-41003_errcode": -41003,

errcode": -41003,

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

一、授权流程

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

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

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

具体代码:

  1. getUserInfo: function(){ //获取用户信息和运动步数以及产品信息
  2. let that = this;
  3. wx.login({
  4. success(res){
  5. console.log(res.code,'code------------')
  6. wx.getUserInfo({
  7. success(res2){ //在这边调用登录接口,获取用户的id
  8. //console.log(res2,'用户信息')
  9. that.setData({
  10. userInfo: res2.userInfo
  11. });
  12. app.globalData.userInfo = res2.userInfo;
  13. wx.request({
  14. url: app.globalData.baseUrl+'login.php?code='+res.code+'&nickName='+res2.userInfo.nickName+'&avatarUrl='+res2.userInfo.avatarUrl,
  15. success(res3){
  16. console.log(res3,'++++++登录接口返回的信息')
  17. if (Number(res3.data.succeed)===1){
  18. app.globalData.uid = res3.data.data.userId;
  19. }
  20. wx.getWeRunData({//获取运动步数
  21. success(res4) {
  22. console.log(res4, '=====获取用户步数,授权成功')
  23. wx.request({
  24. url: app.globalData.baseUrl+'decrypt.php?encryptedData='+res4.encryptedData+'&iv='+res4.iv+'&userId='+app.globalData.uid,
  25. success(res) {
  26. console.log(res, '后端返回的用户步数数据')
  27. }
  28. })
  29. },
  30. fail(res5) { //授权微信运动步数失败
  31. console.log(res5, '获取用户步数,授权失败')
  32. that.setData({
  33. authorizeMsg: '该小程序需要授权微信步数才能使用',
  34. isAuthorize: true,
  35. isOpensetting: true
  36. })
  37. }
  38. })
  39. }
  40. });
  41. }
  42. })
  43. }
  44. })
  45. },
  46. onLoad: function () { //在onload进行数据的获取
  47. let that = this;
  48. wx.getSetting({ //判断用户是否授权
  49. success: res=>{
  50. //console.log(res,'——————————————判断用户是否授权');
  51. if (res.authSetting['scope.userInfo']) { //用户有授权,直接调用函数进行登录
  52. this.getUserInfo();
  53. }else{ //用户未授权,弹窗引导用户授权
  54. console.log('用户未授权')
  55. this.setData({
  56. authorizeMsg: '该小程序需要授权用户信息才能使用',
  57. isAuthorize: true,
  58. isOpensetting: false
  59. })
  60. }
  61. }
  62. })
  63. },
  64. closeAuthorize: function(){ //关闭弹窗
  65. console.log('res')
  66. this.setData({
  67. isAuthorize: false
  68. })
  69. },
  70. onGotUserInfo: function(e){ //button授权按钮事件
  71. console.log(e.detail.errMsg)
  72. if (e.detail.errMsg ==='getUserInfo:ok'){ //授权成功
  73. this.getUserInfo();
  74. }else{ //授权失败
  75. this.setData({
  76. authorizeMsg: '该小程序需要授权用户信息才能使用',
  77. isAuthorize: true,
  78. isOpensetting: false
  79. })
  80. }
  81. }

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

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

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

授权:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/308217
推荐阅读
相关标签
  

闽ICP备14008679号