收藏
回答

关于jscode2session,解密手机号码问题?

界面

问题:每次‘点击获取‘’第一次总是失败重试,第二次就OK了。

小程序端传入encryptedData, iv 到后端PHP

php 处理代理

如果代码有问题应该没有成功的解密号码的可能性。接口是这样返回的。

请问有没高手是啥问题啊。。。。百思不得姐啊

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

3 个回答

  • Sky
    Sky
    2023-04-20

    这问题搞了我2天,来挖个坟

    我和楼主的思路原本是一样的,触发getPhoneNumber后,再调用wx.login及wx.request(到我的后台解密),问题就出在这。

    我个人猜测,调用getPhoneNumber后,微信后台生成一个session,再调用wx.login,又再生成一个session,这时候通过getPhoneNumber得到的iv、encryptedData等信息就失效,再用这些参数去解密得到的session_key自然就失败了。这也解析了为何第一次失败,第二次就成功。因为在login的code仍生效时,再调用wx.login,微信后台不会再产生新的session_key。

    所以解决方法是先调用wx.login,保存好code。调用getPhoneNumber后就直接调用wx.request去后台解密,亲测有效

    但这个方法还是有坑,如果调用wx.login后,没有在5分钟内调用getPhoneNumber,那code就是会失效,拿不到session_key。这个就只能重新执行一次wx.login了.....谁设计的.......

    2023-04-20
    有用
    回复
  • zero
    zero
    2020-12-21

    楼主解决了吗 ,跟你碰到的问题一样。求指导!!

    2020-12-21
    有用
    回复
  • 污昂ᰔᩚ王࿐
    污昂ᰔᩚ王࿐
    2020-06-16

    把官方返回的错误看看 不要用自己的错误返回

    2020-06-16
    有用
    回复 9
    • 雷胜
      雷胜
      2020-06-17
      官方没有返回错误。接口是正常的。解密的时候是空白的。
      2020-06-17
      回复
    • 雷胜
      雷胜
      2020-06-17
      主要是openssl_decrypt这函数解密为空白,没有错误。
      2020-06-17
      回复
    • 污昂ᰔᩚ王࿐
      污昂ᰔᩚ王࿐
      2020-06-17回复雷胜
      空白?   既然第二次能成功的话  你把所有的参数都打印一下   看看第一次请求和第二次有什么区别吧    这样看我也看不出什么错误
      2020-06-17
      回复
    • 雷胜
      雷胜
      2020-06-17回复污昂ᰔᩚ王࿐
      嗯,打出很多次,base64_encode 这都有数据,就是openssl_decrypt 返回空什么都没有。很无语,两次请求必须间隔一段时间可能5分钟左右。这让我感觉是不是code过期,拿到seesion_key是过期的。
      2020-06-17
      回复
    • 污昂ᰔᩚ王࿐
      污昂ᰔᩚ王࿐
      2020-06-17回复雷胜
      你这么一说  我看你代码好像有点问题啊
      2020-06-17
      回复
    查看更多(4)
登录 后发表内容
问题标签