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

发布于 6 年前作者 chentao12031 次浏览最后编辑 6 年前来自 ask
  • 当前 问题 的表现(可附上截图)

目前出现了用户偶尔授权登录会解密失败,但是重新登录授权的时候又成功了,参数是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有效后,依旧会出现解密报错

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

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

- 预期表现

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

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

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

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

10 回复
yangxiang
yangxiang1 楼6 年前

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

ohou
ohou2 楼6 年前

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

zhengyan
zhengyan3 楼6 年前

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

longmin
longmin4 楼6 年前

那现在这种解密失败的问题没有办法避免么

nyi
nyi5 楼6 年前

公司小程序也遇到这个问题,后台人员说 unionId 有时候解密不出来。

我们的流程是点击微信登录按钮(open-type=‘getUserInfo’)获取到用户的信息,然后调用 login 接口获取 code,最后把加密数据和 code 一起传给服务器,由服务器来获取 session_key 并解密数据完成登录/自动注册功能。

不过解密失败仅限于未关注过公众号、未使用微信授权登录App的微信用户。

nalin
nalin6 楼6 年前

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

lshi
lshi7 楼6 年前

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

nding
nding8 楼6 年前

我也遇到了这样的问题

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

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

jing64
jing649 楼6 年前

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

qiang01
qiang0110 楼5 年前

微信的 这个机制是有问题

按微信的说的来   也不能百分百保证   解密成功

还是有几率解密失败