收藏
回答

小程序请求一次,但是服务端收到两次,code会失效,请问什么情况?

小程序开发第一次会走授权,获取用户信息,获取code,这些步骤都是腾讯的方法,但是时间返回的有时候比较长,另外最严重的问题,前端请求一次,但是后端收到两次数据,返回结果是code失效,请大佬帮忙解答下

最后一次编辑于  08-02
回答关注问题邀请回答
收藏

3 个回答

  • 铭锋科技
    铭锋科技
    08-02

    收到两次,第一次是成功还是失败的

    08-02
    赞同
    回复 3
    • sitm
      sitm
      08-02
      第一次成功的,第二次失败的,但是用的是第二次的
      08-02
      回复
    • 铭锋科技
      铭锋科技
      08-02回复sitm
      那你按 @烬 的方法做
      08-02
      回复
    • sitm
      sitm
      08-02
      两次间隔100ms左右吧,第一次还没有执行完,第二次就来了,然后就失效了
      08-02
      回复
  • 米法(BINNIE SMILE)
    米法(BINNIE SMILE)
    08-02

    后台把code缓存一下,code消费过,下次进来就根据code从缓存中读取数据,不要再调用api了,这种情况在小程序中偶然出现的,不是代码的问题

    08-02
    赞同
    回复 2
    • sitm
      sitm
      08-02
      目前就是这么实现的,两次间隔100ms左右吧,第一次还没有执行完,第二次就来了,然后就失效了
      08-02
      回复
    • 米法(BINNIE SMILE)
      米法(BINNIE SMILE)
      08-02回复sitm
      要么就拦截器,短时间内的重复请求,只有第一次请求的有效
      08-02
      回复
  • 三去云
    三去云
    08-02

    提供下代码片段,应该代码问题

    08-02
    赞同
    回复 1
    • sitm
      sitm
      08-02
      // 首次登录,授权 获取unionid firstLogin: function(source) { console.log(4) var source = source wx.clearStorage('mdd_token') // 获取用户信息 wx.getSetting({ success: res => { // wx.showLoading({ // title: '正在授权···' // }) console.log(5) var that = this if (res.authSetting['scope.userInfo']) { // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框 wx.showLoading({ title: '获取信息中···' }) wx.getUserInfo({ success: res => { console.log(6) console.log(res) var resData = res // 可以将 res 发送给后台解码出 unionId wx.showLoading({ title: '微信登录···' }) wx.login({ success: res => { console.log(7) console.log(res) // 发送 res.code 到后台换取 openId, sessionKey, unionId var code = res.code console.log(code) var iv = resData.iv var encryptedData = resData.encryptedData wx.showLoading({ title: '用户登录中····' }) // that.test(code, iv, encryptedData, source) that.loginWechat(code, iv, encryptedData, source) } }) // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回 // 所以此处加入 callback 以防止这种情况 if (this.userInfoReadyCallback) { console.log(14) this.userInfoReadyCallback(res) } } }) } else { wx.showToast({ title: '取消授权', icon:"none" }) console.log('没有授权权限') } }, fail: res => { wx.showToast({ title: '授权失败', icon: "none" }) console.log('没有授权') } }) },
      08-02
      回复