评论

小程序之私密消息解码解决方案-解码失败问题

本文章是关于小程序私密消息,解码解不出来的问题,围绕此问题展开,文中给出了解决方案。

最近在调试小程序私密消息,本人也是第一次用此功能,最后遇到一个比较大的问题,按照官方文档走下来,最后发现最后一步解码不好用,交流社区看了很多社友也遇到同样的问题,官方一直没有答复。 起初我也以为是大家自己问题,但调试下来,我最后发现此问题不是大家没用对,就是官方一个失误,这块官方应该没有做到严格的测试就上线了,好在问题好修复。

进来直接寻求结果同学,可以直接拉到最后,拿走改好的代码文件就可以了,如果关注过程,学习下经验的同学,可以从头看完,其实这事细纠起来,挺有意思,虽然问题好修正,但是这个事情的过程很值得学习,测试上有周全,返回值类型各个接口也没有保持一致。

下面会把这三个方面都剖析出来,如果有腾讯小程序的成员看到,希望能尽快修复此问题。

官方链接

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share/private-message.htm

前面的过程都没有问题,问题在于收到消息用户打开消息卡片时,收到了


数据结构如下

{ 
errMsg: 'authPrivateMessage:ok'
valid: true,
iv: 'xxxx',
encryptedData: 'xxxxxx'
}


到此一切都是正常,没有问题,就是在解密 encryptedData,解不出来。


https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html


开放数据获取二种方式,这个问题也是很巧合,这两方式在此问题上都行不通。


先说方式二,按理说,这个方式我最希望用,因为实现简单,我后端是结合云开发,解密数据是维护用户登录状态,用code 还得换取session_key 然后手动去解密.... ,这里不多说了,不支持,对于我们来说一点发挥余力也没有,希望官方能早日支持,类getShareInfo 只要一个cloudID 就好了。 这块不了解的同学可能糊涂了,没关系可以略过这一段。


再说方式一,这是本文的重点, 既然方式二不行,只能方式一了, 按照按照文档一步一步走下去,问题这个示例代码上,下载了示例代码,


经过一段时间苦逼的折腾,把有问题的代码给修复了,程序员就是这么秃的,哎!

修正后,直接解码出来了。 这在云函数里调用的,如下 。

终于拿到解密数据,这个其实就是activityID ,(关于转发的activityID 设计上我还觉得还有商榷地方,用着不是很方便, 比如动态消息,转给个人就拿不到shareTicket ,转给群才有,这个很奇怪,做协同应用这个很有用,不是营销那种转发,我觉得这个官方只考虑了那种营销场景,这得另开篇再议)

 我将代码重封装一了下,下面是调用示例。需要代码可以找我要,vx:pig9pig 

修改后的正确的代码

const WXBizDataCrypt = require('../decrypt/WXBizDataCrypt');

  try {
    const cryptor = new WXBizDataCrypt(APPID, sessionKey);
    const decryptData = cryptor.decrypt(encryptedData, iv);
    
    return decryptData;
  } catch (e) {
    console.log(e);
  }

//调用


小结一下,希望官方一是修复下示例代码,另外非常非常期待官方,方式二给实现了, 就是云调用直接获取开放数据。 还有就是动态消息转发给个人拿不到ShareTicket 问题也权衡一下。 感谢小程序团队带来贡献,抱拳!


最后一次编辑于  2023-05-27  
点赞 1
收藏
评论
登录 后发表内容