最近在调试小程序私密消息,本人也是第一次用此功能,最后遇到一个比较大的问题,按照官方文档走下来,最后发现最后一步解码不好用,交流社区看了很多社友也遇到同样的问题,官方一直没有答复。 起初我也以为是大家自己问题,但调试下来,我最后发现此问题不是大家没用对,就是官方一个失误,这块官方应该没有做到严格的测试就上线了,好在问题好修复。
进来直接寻求结果同学,可以直接拉到最后,拿走改好的代码文件就可以了,如果关注过程,学习下经验的同学,可以从头看完,其实这事细纠起来,挺有意思,虽然问题好修正,但是这个事情的过程很值得学习,测试上有周全,返回值类型各个接口也没有保持一致。
下面会把这三个方面都剖析出来,如果有腾讯小程序的成员看到,希望能尽快修复此问题。
官方链接
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 问题也权衡一下。 感谢小程序团队带来贡献,抱拳!