收藏
回答

获取微信手机号, 解密手机号码偶尔失败?

使用方法:

1.小程序调用wx.login,后台会把sessionkey存入数据库没有设置过期时间

2.用户点击"我的"页面会检查session是否过期。当需要解密用户信息需要用到sessionkey时,小程序端checksession看是否登录过期,如果过期,进行重新登录,更新数据库的sessionkey,解密用更新后的sesskonkey;如果没有过期,直接调用后台解密,用的是数据库当前的sessionkey


1.用的小程序组件

<button class="phone cu-btn line roundopen-type="getPhoneNumberbindgetphonenumber="getPhoneNumber">

                获取手机号

            </button>


以上这种使用,会出现偶尔解密失败,如下报文:

开始解析请求报文:{"openId":"otdJ85WS4_-smz-Bk3Vbb7Z6TpO0","encryptedData":"jHpilc+/JnVFmO+nesdjGYMwfP/9T18ejgDgqeiPJJkFSn6KAC3iUfGgxpy47XClyWnsw8IcyCKeY859wEpxnYyOKCVN24HNPNJOawjKD5kuNkp6qWbd7fO86MtnIL6n1xMoB07eRMLLvk7CsGfUe2wyoNZZtAPuc0Ndogq6VqNbh3LH+JyWTeNvxpfnSDgvbzfvBE2FAr8+kM6bFM+lmw==","iv":"N+gnWn9zbkkJp+awnfVi0w=="}

解密微信用户数据异常

解密后用户信息:null


因为是偶发性,不太好定位,很多帖子也没有看到好的解决方案,求会用的大神赐教。



刚想出来一个方案,应该可以很优雅的处理,能成功解密,给用户比较好的体验,待验证:

1.使用sessionkey前先进行wx.login,更新数据库的sessionkey(解决99%的解密问题)

2.使用<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>组件,用户点击获取手机号码并授权

3.在获取手机号码回调函数中,先checksession(如果用户在获取手机号码界面停留时间过长,刚更新的sessionkey可能过期)

4.checksession检查没有过期,说明数据库和微信手机号码加密的sessionkey一致,一定会解密成功(checksession时间在微信加密时间后都没过期,解密过程中sessionkey过期也不会影响解密成功),正常解密调用后台,如果后台返回失败,调用wx.login,刷新数据库的sessionkey,跳转到6

5.checksession检查过期,调用wx.login,刷新数据库的sessionkey(解决1%解密问题)

6.让用户重试获取手机号码,提示用户:没有获取到手机号码,请重试(检查过期页面要在用户点击获取手机号码的按钮页面)


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

5 个回答

  • จุ๊บ
    จุ๊บ
    06-11

    获取手机号,重新调用wx.login 不管 session_key 是否过期,都重新获取。偶发性 获取失败,就是这个session_key的问题,明明没过期,但是就是不能用。

    06-11
    有用 1
    回复 7
    • 品歌🎉
      品歌🎉
      06-11
      兄弟,你这个是有问题,还是能解决这个问题?
      06-11
      回复
    • จุ๊บ
      จุ๊บ
      06-11回复品歌🎉
      解决问题啊,偶发性 获取失败后面,是告诉你失败原因是啥。前面是告诉你怎么解决
      06-11
      回复
    • 品歌🎉
      品歌🎉
      06-11回复จุ๊บ
      你这种方案能保证0解密失败吗?
      06-11
      回复
    • จุ๊บ
      จุ๊บ
      06-11回复品歌🎉
      至少目前 我通过这种方式,尝试了 电信号 至少两个,移动号至少5个,联通至少3个。其中重复点击次数 N 次。没有一次失败
      06-11
      回复
    • 已婚小姐姐
      已婚小姐姐
      06-16
      能上代码看一下么
      06-16
      回复
    查看更多(2)
  • 品歌🎉
    品歌🎉
    06-11

    获取用户手机号码,一般都是用户注册,有意向下单,对这种偶发性解密失败是零容忍。

    06-11
    有用 1
    回复 1
  • 亮子🌞
    亮子🌞
    06-11

    是的 我这也会偶然失败

    06-11
    有用 1
    回复 1
    • 品歌🎉
      品歌🎉
      06-11
      被折腾得不要不要啊。。。这个功能好难用,也没有给文档怎么正确使用这个功能。
      06-11
      回复
  • 付
    10-19

    仔细看文档 分两次操作。初始获取code, 回调更新code

    10-19
    有用
    回复
  • 莫奈的有趣灵魂
    莫奈的有趣灵魂
    07-20

    解密需要的值编码再传到接口试试,不然+号会变成空格

    07-20
    有用
    回复 1
    • Doer
      Doer
      09-04
      这样子编码吗
      09-04
      回复
登录 后发表内容
问题标签