收藏
回答

[BUG]shareTicket解密bug

问题模块 框架类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
API和组件 小程序 shareTicket 客户端 iOS 最新版本 最新版本

转发页面到群里,拿到shareTicket后,用wx.getShareInfo()获取到encryptedData 和 iv,传到后端进行解密,每两分钟就解密失败之后除非重新用wx.login()获取code刷新后端的sessionkey,否则一直解密失败,怀疑是sessionkey失效,但是用wx.checksession()获取到的是没失效的。


请问wx.getShareInfo()拿到的数据为什么两分钟就失效了呢?


最后一次编辑于  2018-01-24  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

10 个回答

  • 吴剑波
    吴剑波
    2018-01-25

    getShareInfo 获取到的信息需要立即解密,建议保存解密后的结果而不是加密信息。

    2018-01-25
    赞同
    回复
  • 土豆豆
    土豆豆
    2018-01-25

    @吴剑波 是立即解密的,我的问题是,每次转发后拿到信息传给后端解密,前两分钟,解密都可以通过,两分钟后就解密失败,这个两分钟不是指拿到数据后隔了两分钟才去解密,而是过了两分钟重新获取shareTicket重新wx.getShareInfo()拿到数据去解密,就会解密失败,并且重新登录后正常

    2018-01-25
    赞同
    回复
  • 吴剑波
    吴剑波
    2018-01-26

    可能是你的代码的执行顺序哪里出了问题,我这边只要保证 getSessionKey 之后再获取加密信息,解密就一定会成功。这一点是有测试和成千上万线上小程序保证的,不太会出问题。

    2018-01-26
    赞同
    回复
  • 阿勇
    阿勇
    2018-01-27

    @土豆豆 是由于引入的第三方的sdk内私自使用的wx.login()导致存在服务端的sessionkey失效 这个是啥意思

    2018-01-27
    赞同
    回复
  • 土豆豆
    土豆豆
    2018-01-29

    @阿勇 后端解密信息需要使用wx.login()的code换取的sessionkey来解密,如果在这之前,前端又一次的调用了wx.login(),后端已经保存的sessionkey会失效,需要重新保存的。

    2018-01-29
    赞同
    回复
  • 阿勇
    阿勇
    2018-01-29

    有重新保存,但是还是解密异常,能否提供一下C# 解密方法

    2018-01-29
    赞同
    回复
  • 福peter
    福peter
    2018-03-05

    我的代码中,有时候解密成功,有时候报错: javax.crypto.BadPaddingException: pad block corrupted,不知什么原因?

    2018-03-05
    赞同
    回复
  • 土豆豆
    土豆豆
    2018-03-05

    @福peter  检查下代码中是否有地方重新调用了wx.login()的地方吧,这个会导致sessionkey失效,导致解密失败

    2018-03-05
    赞同
    回复
  • 福peter
    福peter
    2018-03-05

    @土豆豆   每次login时都有保存  sessionkey

    2018-03-05
    赞同
    回复
  • 福peter
    福peter
    2018-03-05

    找到原因,开发者工具和手机同时测试时,两者的sessionKey可能有干扰,尽管openId是一样的。

    2018-03-05
    赞同
    回复