收藏
回答

getPhoneNumber获取用户手机号有失败的概率

框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
小程序 Bug getPhoneNumber 客户端 iOS 6.7.1 2.2.1

线上环境。

5个用户测试,其中一个用户(iphone8p)连续4次获取手机号失败之后才成功了。

不知道是什么原因?

//登录,获取手机号
login: function (e) {
console.log(e.detail.errMsg);
   // 如果用户授权且微信已绑定手机号
   if (e.detail.iv) {
app.showLogin();
       const sys=wx.getSystemInfoSync();//获取手机和型号
       const brand=sys.brand || '';
       const model=sys.model || '';
       wx.login({
success: res => {
console.log('发code到后台换取 openid, sessionKey');
               if (res.code) {
wx.request({
url: app.globalData.appUrl + 'login',
                       method: 'POST',
                       data: {
code: res.code,
                           iv: e.detail.iv,
                           encryptedData: e.detail.encryptedData,
                           brand:brand,
                           model:model
},
                       success: (res) => {
if (res.data.openid) {
console.log(res.data);
                               wx.hideLoading();
                               wx.setStorageSync('openid', res.data.openid);      //拿到openid存本地
                               this.setData({
isLogin: true,
                               });
                               this.getData(res.data);//调用共用方法--得出所有数据
                               wx.hideLoading();
                               // this.stickyTop();//再次算出固定栏距离顶部的距离
                           } else {//解密手机号失败等
                               console.log(res.data.errCode);
                               app.loginFail();
                           }
},
                       fail: () => {//wx.request失败--情况很少
                           app.loginFail();
                       }
})
} else {//没有获取到code--情况很少
                   app.loginFail();
               }
},
           fail: () => {//wx.login失败--情况很少
               app.loginFail();
           }
})
} else if (e.detail.errMsg.indexOf('10000') !== -1) {
//用户未绑定手机号
       console.log('未绑定手机');
       this.setData({
showHint: true
       })
}
// else 用户拒绝授权--不管了
},


最后一次编辑于  2018-07-30
回答关注问题邀请回答
收藏

4 个回答

  • 永强
    永强
    2018-08-10

    确实是这样的,死循环。 什么时间获取code都不合适

    2018-08-10
    有用 1
    回复 1
    • 刘小军Lebus
      刘小军Lebus
      2018-08-10

      就是!

      2018-08-10
      回复
  • 2018-07-28

    遇到过但是一直没法解决,因为这东西你都不知道哪里错了,返回结果是填充无效,要是我们写的有问题为什么有的可以,没找到过官方建议,之前我们获取unionId也是这种错误,后来反馈了一下,把获取code和iv的先后顺序换了一下就再没出过问题,正常来说这两个都是新获取的跟先后顺序应该没关系,解决了都不知道为啥


    2018-07-28
    有用 1
    回复 5
    • 刘小军Lebus
      刘小军Lebus
      2018-07-30

      说到我心坎里了!

      每次开发微信总感觉自己像个搞ui的新手前端在那调样式,成功与否都凭运气,也都不知道为什么成功或失败了。

      我本地调试的时候返回的错误信息一般是解密失败,好像是41003错误码,但是用户登录失败的时候也没办法调试,所以也不知道究竟错哪了。


      有空的话可否把那个先后顺序跟我说一下呢?我把代码贴上去了。

      2018-07-30
      回复
    • 2018-07-31回复刘小军Lebus

      是这样的,我们获取UnioID时候,之前是先获取data iv在获取code,后来换了一下,先获取code再获取iv就好了,但是这个手机号需要授权,只能先获取iv

      2018-07-31
      回复
    • 刘小军Lebus
      刘小军Lebus
      2018-08-01回复

      了解了,非常感谢!

      等以后用到unionid的时候可以少踩雷了。

      2018-08-01
      回复
    • 晨
      2019-03-23回复

      那是因为你之前获取的data是用的失效的session_key加密的,再获取code刷新了session_key,当然会有概率解密失败,导致获取不到。
      你把顺序换一下就能保证session_key一致了,所以不会失败了

      2019-03-23
      回复
    • 一条有理想的小咸鱼
      一条有理想的小咸鱼
      2019-10-12
      你好,请问怎么先获取code再获取iv呢
      2019-10-12
      回复
  • 百姓
    百姓
    2020-10-14

    应该不是 code 与 iv 先后问题,你也可以先获取 code啊,打开页面的时候获取,接着setData,然后获取手机号码的时候 code = that.data.code

    2020-10-14
    有用
    回复
  • 
    2018-08-01

    恐怖的回调地狱,微信改善一下吧


    2018-08-01
    有用
    回复 1
    • 刘小军Lebus
      刘小军Lebus
      2018-08-03

      同意!

      2018-08-03
      回复
登录 后发表内容