收藏
回答

openid偶尔获取不到?

1.openid的获取过程是这样的:

先调用wx.login 拿到code, 然后用code调后台的接口获取到openid,把openid存到storage。

每次调后台接口的时候,从storage拿openid。

另外,在页面的onShow方法中,会判断storage中有没有openid,如果没有,会再获取一次。

2.现在的现象:

调用后台的接口的时候提示openid为空,还是偶现问题。刷新小程序后再调用同一个接口,就不会出现这个问题。

3.代码如下:

page/test/test.js

onShow: function () {

    var _openid = wx.getStorageSync("openid");

    if (!_openid){

      wx.login({

        success: res => {

// 发送 res.code 到后台换取 openId, sessionKey, unionId

          utils.getOpenId(res.code, function (response) {

            wx.setStorage({

      key: 'openid',

      data: response.data.resBody.openid,

    })

          }, function () {

            //console.log("调用失败");

          })

        }

      })

    }

  }

回答关注问题邀请回答
收藏

4 个回答

  • 云羊习习
    云羊习习
    2021-08-20

    res是什么啊怎么解释,有懂哥吗

    2021-08-20
    有用
    回复
  • M小
    M小
    2021-06-03

    接口请求返回的数据打印过了吗 是不是存了undefined

    2021-06-03
    有用
    回复 3
    • Shine
      Shine
      2021-06-03
      倒是有这个可能,我看了下代码,没有判断获取到的啥就直接存了。
      那么,什么情况会返回一个undefined呢?
      2021-06-03
      回复
    • M小
      M小
      2021-06-03回复Shine
      这要看后端怎么写的咯,我这边这样的
      2021-06-03
      回复
    • Shine
      Shine
      2021-06-03回复M小
      好的,谢谢
      2021-06-03
      回复
  • 睡前原谅一切
    睡前原谅一切
    2021-06-02

    因为code有5分钟有效期。有没有可能是code失效了 再调用你们接口获取失败了?

    2021-06-02
    有用
    回复 4
    • Shine
      Shine
      2021-06-02
      没可能啊,获取到code,立马去调获取openid的接口了
      2021-06-02
      回复
    • 睡前原谅一切
      睡前原谅一切
      2021-06-02回复Shine
      那应该都能获取到哦。一进页面调用wx.login获取code 然后调用接口获取openId么? 还是一进页面获取code 用户点按钮再调用接口获取openId
      2021-06-02
      回复
    • Shine
      Shine
      2021-06-02
      一进入页面不是就会触发onShow么,上面贴代码了,哈哈哈,获取到code,立马调获取openid的接口了
      2021-06-02
      回复
    • 睡前原谅一切
      睡前原谅一切
      2021-06-02回复Shine
      那应该木有啥问题~
      2021-06-02
      回复
  • 微喵网络
    微喵网络
    2021-06-02

    为什么要在前端存储openid?

    2021-06-02
    有用
    回复 1
    • 丶
      2021-11-23
      确保是当前微信的openid吧,毕竟存在服务端的话,比如A的账号,B登录,如果服务端存储openid更新成了B,A从服务端获取的是B的openid,如果服务端没有更新,那么B获取的则是A的openid,这个时候,本地缓存的,一定是当前的openid,因为是走登录缓存,,一定是当前微信授权的
      2021-11-23
      回复
登录 后发表内容