评论

『笔记』聊天工具模式解密wx.getChatToolInfo遇到一个官方库的坑

聊天工具模式解密wx.getChatToolInfo遇到一个官方库的坑。

在聊天工具模式下通过wx.getChatToolInfo获取到到返回数据下:

{
      errMsg: 'getChatToolInfo:ok',
      encryptedData: '',
      iv: ''
}


根据官方文档,这里我们需要使用 加密数据解密算法 对数据进行解密。

官方也很贴心的提供了相关的demo供开发者下载。

demo中的WXBizDataCrypt.js为通用函数,可以用于解密获取用户信息获取手机号等其他加密数据。

前面一切顺利,但是恰恰坑就在这里,把demo中的数据替换成真实数据后出现错误。服务端返回的错误信息怎么看都看不出问题出在哪里,一开始还怀疑是自己获取的加密信息哪里搞错了。

TypeError: Cannot read property 'appid' of undefined

本地运行后才知道真实错误信息:

if (decoded.watermark.appid !== this.appId) {
TypeError: Cannot read properties of undefined (reading 'appid')

经过测试发现官方不同加密信息返回的解密数据格式是不一样的,比如获取用户信息和获取手机号是正常的,而聊天工具模式返回就不包含appid。

下面为对比:

{
  openId: 'oGZUI0egBJY1zhBYw2KhdUfwVJJE',
  nickName: 'Band',
  gender: 1,
  language: 'zh_CN',
  city: 'Guangzhou',
  province: 'Guangdong',
  country: 'CN',
  avatarUrl: 'http://wx.qlogo.cn/mmopen/vi_32/aSKcBBPpibyKNicHNTMM0qJVh8Kjgiak2AHWr8MHM4WgMEm7GFhsf8OYrySdbvAMvTsw3mo8ibKicsnfN5pRjl1p8HQ/0',
  unionId: 'ocMvos6NjeKLIBqg5Mr9QjxrP1FA',
  watermark: { timestamp: 1477314187, appid: 'wx4f4bc4dec97d474b' }
}

{
 "opengid": "OPENGID",       // 多聊群下返回的群唯一标识
 "open_single_roomid": "",   // 单聊群下返回的群唯一标识
 "group_openid": "",         // 用户在当前群的唯一标识
 "chat_type": 3,             // 聊天室类型
}

在官方未更新示例代码的情况下目前的解决方案是删除WXBizDataCrypt.js中的这段代码即可。

if (decoded.watermark.appid !== this.appId) {
  throw new Error('Illegal Buffer')
}

由于自己使用的是Node,其他语言未测。

最后一次编辑于  03-28  
点赞 0
收藏
评论
登录 后发表内容