小程序私密消息为何无法解密出 activity_id ?
发布于 4 年前 作者 mingwang 5777 次浏览 来自 官方Issues

问题接口wx.authPrivateMessage(Object object)

微信版本:安卓 8.0.16,基础库:2.21.0

问题:私密消息从后台生成 activity_id,使用接口 wx.updateShareMenu 定义私密消息,转发后另一个用户打开,能得到正常的加密信息,但无法解密获取之前生成的 activity_id。

相关代码

// 分享者
wx.updateShareMenu({
  withShareTicket: true,
  isPrivateMessage: true,
  activityId: '****', // 此处为后台获取 id,经测试有效
})
// 被分享者
// 省略 wx.login 过程
wx.authPrivateMessage({
  shareTicket: '****', //  wx.getLaunchOptionsSync() 获取,测试有效
  success (res) {
    // 后台解密过程
    $api.post('https://url.test',{ iv: res.iv, encryptedData: res.encryptedData })
    .then(result => {
      console.log(result)  // 结果解密失败 -41003
    })
  }
})

问题排查

  1. 后台解密代码逻辑正常。使用用户信息接口(wx.getUserProfile)测试可获取正常结果,因此解码逻辑正常。
  2. session_key 正常。使用 wx.checkSession 和上一条中获取用户信息并解密均正常工作。
  3. 使用接口 wx.getShareInfo(Object object) 可以解密得到结果 msgTicket: ****,但并没有 activity_id,无法获取预期结果,代码如下:
wx.getShareInfo({
  shareTicket: '****', //  wx.getLaunchOptionsSync() 获取,测试有效
  success (res) {
    // 后台解密过程
    $api.post('https://url.test',{ iv: res.iv, encryptedData: res.encryptedData })
    .then(result => {
      console.log(result)  // 获取正常结果:{msgTicket: ********}
    })
  }
})

已反复阅读文档,遍寻社区无果,特来请教官方指导,或有哪位朋友做过此类需求的烦请指教。

回到顶部