1. 首页>
  2. 技术文章>
  3. C# .net 填充无效,无法被移除 微信小程序解密失败的解决办法

C# .net 填充无效,无法被移除 微信小程序解密失败的解决办法

11/6/19 2:37:43 PM 浏览 1475 评论 0

小程序

微信小程序获取用户信息诸如unionId的时候需要解密,如果遇到偶然的解密失败(填充无效,无法被移除),原因很有可能是session_key错误,也是就你用作解密的session_key并不是微信用作加密的那个了,但是并不代表你的session_key已经失效.

由于 iv 和 encryptedData 是从wx.getUserInfo()或者是点击<button open-type='getUserInfo' >获取的,所以没有什么问题,问题出在 你获取的session_key 失效了。调用wx.login()可能会触发session_key 刷新,如果你是先获取到iv和encryptedData,再去获取session_key ,那么你获取到的session_key 就可能已经不是加密用的那个session_key 了。

我之所以用到了可能是因为我通过测试,发现先获取到iv和encryptedData,再去获取session_key这种方式并不是每次都失效,而是偶尔错误。

解决方案:

 1. 如果你是老的小程序,用wx.getUserInfo()获取encryptedData只需要先wx.login(),再wx.getUserInfo()就可以了.

 2. 如果你是新开发的小程序,微信已经更改的授权方式,是通过<button open-type=‘getUserInfo‘ >这种方式获取授权的,建议:

在登录页 onload 的时候调用wx.login().将openId和session_key 先缓存下来(session_key 建议缓存到后台),然后引导用户点击<button open-type=‘getUserInfo‘ >获取encryptedData,最后再去解密.


网友讨论