转发页面到群里,拿到shareTicket后,用wx.getShareInfo()获取到encryptedData 和 iv,传到后端进行解密,每两分钟就解密失败之后除非重新用wx.login()获取code刷新后端的sessionkey,否则一直解密失败,怀疑是sessionkey失效,但是用wx.checksession()获取到的是没失效的。
请问wx.getShareInfo()拿到的数据为什么两分钟就失效了呢?
框架类型 | API/组件名称 | 终端类型 | 操作系统 | 微信版本 | 基础库版本 |
---|---|---|---|---|---|
小程序 | shareTicket | 客户端 | iOS | 最新版本 | 最新版本 |
10 个回答
找到原因,开发者工具和手机同时测试时,两者的sessionKey可能有干扰,尽管openId是一样的。
@土豆豆 每次login时都有保存 sessionkey
@福peter 检查下代码中是否有地方重新调用了wx.login()的地方吧,这个会导致sessionkey失效,导致解密失败
我的代码中,有时候解密成功,有时候报错: javax.crypto.BadPaddingException: pad block corrupted,不知什么原因?
有重新保存,但是还是解密异常,能否提供一下C# 解密方法
@阿勇 后端解密信息需要使用wx.login()的code换取的sessionkey来解密,如果在这之前,前端又一次的调用了wx.login(),后端已经保存的sessionkey会失效,需要重新保存的。
@土豆豆 是由于引入的第三方的sdk内私自使用的wx.login()导致存在服务端的sessionkey失效 这个是啥意思
可能是你的代码的执行顺序哪里出了问题,我这边只要保证 getSessionKey 之后再获取加密信息,解密就一定会成功。这一点是有测试和成千上万线上小程序保证的,不太会出问题。
@吴剑波 是立即解密的,我的问题是,每次转发后拿到信息传给后端解密,前两分钟,解密都可以通过,两分钟后就解密失败,这个两分钟不是指拿到数据后隔了两分钟才去解密,而是过了两分钟重新获取shareTicket重新wx.getShareInfo()拿到数据去解密,就会解密失败,并且重新登录后正常
getShareInfo 获取到的信息需要立即解密,建议保存解密后的结果而不是加密信息。