收藏
回答

解密用户信息有时报41003

服务端语言:php

在小程序和服务端代码没有问题的情况下,为什么有时解密用户信息的时候会报41003的错误?

最后一次编辑于  2018-11-30  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

1 个回答

  • 微盟
    微盟
    2018-11-30

    session_key、encryptedData、iv一定要严格对应,可能是你的前端获取encryptedData、iv到后端生成session_key的方法是点击授权按钮以后再用授权接口获取,所以其实生成了两个session_key。一般情况下是可以用的,但是有时微信只同步到了第一个session_key所以你获取的session_key是无效的。

    2018-11-30
    赞同
    回复 5
    • Dave
      Dave
      2018-11-30

      我就是用的button 组件的 open-type="getUserInfo"去获取的用户信息,这个信息中有一个加密字符串encryptedData,也没有看到有session_key,session_key不是后端服务器在解密过程中生成的吗?


      2018-11-30
      回复
    • 微盟
      微盟
      2018-11-30回复Dave

      不好意思我解释一下,session_key是通过appId和appScret在后端生成的,它会和encryptedData、iv对应。如果你只生成了一次encryptedData、iv,那么对应这个事件去生成的session_key应该是可用的,所以有可能是后端生成session_key的机制并不是完全根据你的登录事件导致的。

      2018-11-30
      回复
    • Dave
      Dave
      2018-11-30回复微盟

      我现在频繁的去登录进行测试,有时候几次就报一次这个错误,有时候几十次才报一次,就是有这么一个不确定因素。

      我看很多博客说是iv这个参数前端生成的时候包含空格就会出现这个错误,在服务端把空格转换成+号就可以了;

      我也对iv做了这个处理,所以也打印出来看了一下iv参数的差异;

      LPnlKYveLLdSla9JBn0LZQ==                     (这个是未做处理的iv)
      LPnlKYveLLdSla9JBn0LZQ==---报错了 (这个是做了处理的iv)

      但是,经过打印出来的iv比如发现:并非网上说的iv有空格就会报错;因为在下面的那个iv并没有出现+号

      针对于这个问题你是否有什么解决方案没有?

      2018-11-30
      回复
    • 微盟
      微盟
      2018-11-30回复Dave

      有的,把错误抛会给前端,让前端调用登录接口,重新获取encryptedData、iv,然后给后端再重试,初次重试为半秒等待,每次重试等待时间翻倍,重试3-10次后放弃。

      2018-11-30
      1
      回复
    • Dave
      Dave
      2018-11-30回复微盟

      谢了,目前也没有看到有别的方面的解决方案,貌似也的确只能这样处理了

      2018-11-30
      回复