收藏
回答

微信登录授权偶尔出现第一次解密失败,第二次解密成功,报错为pad block

框架类型 问题类型 终端类型 微信版本 基础库版本
小程序 Bug 客户端 安卓 6.7.3 2.4

- 当前 问题 的表现(可附上截图)

目前出现了用户偶尔授权登录会解密失败,但是重新登录授权的时候又成功了,参数是session_key两次相同,但是iv不同.


登录流程为: 用户进入小程序,前端调用wx.login() 获取code,传给开发者服务器,开发者服务器通过jscode2session拿到session_key 和用户openId,在没有调用需要的逻辑业务之前,不需要做授权弹框处理.开发者服务器将session_key返回给了前端,前端自己进行缓存.


在需要做逻辑业务时,前端调用checkSession检查之前缓存的session_key是否有效,如果有效就直接调用getUserInfo接口获取用户加密参数.然后将session_key和用户加密字符串传给开发者服务器,开发者服务器进行解密,解密时会出现pad block corrupted 错误.如果session_key被checkSession检查出无效.再次调用wx.login获取code,重新拿到session_key进行上一步的循坏..


首先想咨询下各位大佬 该流程是否会有问题.并且在检查session_key有效后,依旧会出现解密报错


下面是解密代码和调用过程



该处红色框内就是报错行,下图就是报错代码




- 预期表现


偶然事件,不知道怎么复现,


在社区中查看了多个相同问题的提问,但是没有得到有效的方法解决.

当前流程只是被要求 需要保留一些未授权人员的阅读记录.所以流程才写成了两步.

请各位大佬多多指点,谢谢


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

13 个回答

  • 朱建林
    朱建林
    2019-05-12

    一开始是通过button获取用户信息的时候也出现了,后来改成  先login  然后getUserInfo  再去服务端解密,好像就没问题了,button获取的信息直接丢掉

    2019-05-12
    有用 3
    回复 3
    • 半兽人
      半兽人
      2020-01-20
      使用此方案问题解决
      2020-01-20
      回复
    • 守护者
      守护者
      2020-08-11
      new Promise<{ data: { doctor: UserInfo } }>((resolve, reject) => {
              wx.login().then(({ code }) => {
                wx.getUserInfo({
                  //获取用户微信信息
                  success: res => {
                    if (res.encryptedData && res.iv) {
                          // code = code,
                          // iv: res.iv,
                          // encryptedData: res.encryptedData
                    } else {
                      reject(res);
                    }
                  },
                  fail: reject
                });
              });
            })
      2020-08-11
      回复
    • Wx
      Wx
      2020-12-22
      问题解决
      2020-12-22
      回复
  • Bitterblue
    Bitterblue
    2021-01-29

    个人的解决办法:在登录页面生命周期函数onShow() 调用 wx.login(); 然后用户会点击button获取用户信息(加密数据),再一次wx.login(); 获取到code,最后将code与加密数据发给后端

    2021-01-29
    有用
    回复
  • 一路凯歌
    一路凯歌
    发表于移动端
    2020-07-30
    3.:m%
    2020-07-30
    有用
    回复
  • swallow
    swallow
    2020-05-29

    请问老哥解决了吗

    2020-05-29
    有用
    回复 3
    • 肖
      2020-05-29
      这老铁的方法就可以啊
      2020-05-29
      回复
    • Aleio
      Aleio
      2020-06-19
      服务端不得用en和iv获取用户信息吗?不用button怎么获取?
      2020-06-19
      回复
    • 肖
      2020-08-12回复Aleio
      现在微信这边获取用户授权必须要通过button点击
      2020-08-12
      回复
  • 2019-08-29

    我也遇到了这样的问题

    第一次点击授权 不可以 第二次点击就可以了 但是 后台返回sessionKey是一样的 data传参也是一样的

    第一次失败 第二次就成功了

    2019-08-29
    有用
    回复
  • 尧文
    尧文
    2019-06-06

    客户端拿到code的时候  应该是要同步到微信自己的server的   这个时候后端如果立马向微信server发起请求  可能导致解析失败    解决办法 :  客户端拿到code及加密数据后 延迟1s再向后端发出请求      或者后端去做延迟请求

    2019-06-06
    有用
    回复 2
    • 尧文
      尧文
      2019-06-10

      此方案还是有问题  后端换了个jar包 问题解决了

      2019-06-10
      回复
    • 有两把刷子
      有两把刷子
      2019-08-16回复尧文
      麻烦问下,换的什么jar包?
      2019-08-16
      回复
  • 路遥|宠夫子
    路遥|宠夫子
    2019-05-11

    也遇到了,出现概率还是很大。

    2019-05-11
    有用
    回复
  • 肖
    2019-04-06

    有搞好的老铁没,官方倒是出来个人啊


    2019-04-06
    有用
    回复
  • 李林
    李林
    2018-12-27

      我是在onload 时 把code 存起来了   在调用button时 把 code 传过去  之前也是有时报非法解密 有时不报 现在这么写就没在出现了

    2018-12-27
    有用
    回复 1
  • YF
    YF
    2018-12-27

    一般都是没有获取下次重试的方式。。官方api也是解析不出来这就没有办法了

    2018-12-27
    有用
    回复

正在加载...

登录 后发表内容