- 微信小店的消息解密时而成功,时而失败?
我使用云函数订阅了微信小店的事件消息,现在我在测试订单的相关消息,但是发现接收到的消息有的能解密,有的就解密失败。 消息的签名验证是通过的。 报错信息如下: [图片] 解密代码如下: function decryptWXMessage(EncodingAESKey, Encrypt, expectedAppId) { try { console.log('开始解密...'); console.log('EncodingAESKey:', EncodingAESKey); console.log('Encrypt长度:', Encrypt.length); console.log('expectedAppId:', expectedAppId); // 1. 生成AESKey const aesKey = Buffer.from(EncodingAESKey + '=', 'base64'); console.log('AESKey字节长度:', aesKey.length); console.log('AESKey (hex):', aesKey.toString('hex')); if (aesKey.length !== 32) { throw new Error('Invalid AES Key length'); } // 2. Base64解码Encrypt密文 const tmpMsg = Buffer.from(Encrypt, 'base64'); console.log(`TmpMsg字节长度: ${tmpMsg.length}`); // 3. AES解密 const iv = aesKey.slice(0, 16); // CBC模式的IV是AESKey的前16字节 console.log('IV (hex):', iv.toString('hex')); const decipher = crypto.createDecipheriv('aes-256-cbc', aesKey, iv); decipher.setAutoPadding(true); // 自动处理PKCS#7填充 let decrypted = Buffer.concat([decipher.update(tmpMsg), decipher.final()]); console.log(`FullStr字节长度: ${decrypted.length}`); console.log('FullStr (hex):', decrypted.toString('hex')); // 4. 解析FullStr结构 // random(16B) + msg_len(4B) + msg + appid const randomStr = decrypted.slice(0, 16).toString('hex'); console.log(`random(16B): ${randomStr}`); // 读取msg_len (网络字节序,大端序) const msgLen = decrypted.readUInt32BE(16); console.log(`msg_len: ${msgLen}`); // 提取msg const msgStart = 20; // 16 + 4 const msgEnd = msgStart + msgLen; if (msgEnd > decrypted.length) { throw new Error(`消息长度超出范围: msgEnd=${msgEnd}, decrypted.length=${decrypted.length}`); } const msg = decrypted.slice(msgStart, msgEnd).toString('utf8'); console.log(`msg: ${msg}`); // 提取appid const appid = decrypted.slice(msgEnd).toString('utf8'); console.log(`appid: ${appid}`); // 5. 验证AppId if (appid !== expectedAppId) { throw new Error(`AppId不匹配: 期望 ${expectedAppId}, 实际 ${appid}`); } return { random: randomStr, msg_len: msgLen, msg: JSON.parse(msg), // 解析JSON消息 appid: appid }; } catch (error) { console.error('解密失败:', error.message); console.error(error.stack); throw error; } } 无法解密的这条消息的消息参数如下: body: '{"ToUserName":"gh_5f4c50c935eb","Encrypt":"GKsTtFYTq3g4XOQzh7aa2dz+0fv0f4Pnj+7yhd5QdijrNQNUYtjrgCmmMwdZOK4zBqElQ5B/ga1ooq2SP8pmjsDe0qs9t9+dPYbCTrjQomqKf4S/33UYnqbo7Ph+aLCyY8i8HxFstbAyO71cF+jKZHOqWfbESFedLoNFaq+C8oqx1CxECtMtvqFV/ToUdqy69PTH8WoRMbOnHU1jfXrAIPmGcCmoU5RkUCCZjwCqGZhfexER0bjaLuKBrmGa6aSJ66X4F8Ho7P4KTBcA83Rcs4FQWPGbC5TpsyGIxXm/7JHLXVXwHyRkwL+6ArAHCQa9HyYNwJhKQJ2VsGFMhZCt6k9Iv32CSJCWNHxFA/+1BrotS3tdN+WWvDYrTh7p+vz3"}'; aesKey:'MqueyTZsLhJS3o3L4gTkuapiwXc1K2ASkUD8kDrkdAS'; appId:'wxfeedff1d7050a2fd' 可以看到,签名都是验证通过的: [图片] 另外,提供一组解密成功的参数: body: '{"ToUserName":"gh_5f4c50c935eb","Encrypt":"Iv0naarho/gX68QP+KOeLe9FIrdlqWRtkVblvvURvFDT963SAcicwclw9stFBmC1DMi7WrigFElTiIGX+hisCSlxW2RSZ2bmTD7jbNaL/LeoKWJSNmA4fQWrjT7RXljqGWEf+p/IkY5QLjg0c8uWFMsHVX9UTRd8K/JXl/uCOfJxfpdTfIEB3VZTNJZbmvsBNsutwpDKNSCPiDwgGB5G6Aza6bZy2g9tVRBzoDHMyDJ3M9pk4o8189o29xfM6v0FYWlAuKFhDmxn0F5XxSC1IlnaeHinHxR6JwbSTX0NYxlrbWCNeq0PwWri2TwfQ0BH39L4QNXx9kd+1p02Dfqhuh9PXl22gl6DcYXNIDY4M2LQkI1wCnX3yrMIpLPZz4uEhuMUMvNNlgDRUNGYDpZaMONIoVdjrOeWJyYMjRSyRAYV/2S+aQUeqRz+kI3dlGvr8EIuMNLNNCXJ58d58NtSxA=="}'; aesKey:'MqueyTZsLhJS3o3L4gTkuapiwXc1K2ASkUD8kDrkdAS'; appId:'wxfeedff1d7050a2fd' 上面这组的解析结果: [图片]
11-28 - 微信小店关联小程序的时间消息为什么无法直接在小程序云开发的配置中选择?
下图中这个事件消息,如果小程序和小店已经成为合作账号了,是不是应该得能在云开发的消息通知中直接选择? [图片] 下面是现在云开发里的可选的event事件,可以看到并没有这个选项。 [图片] 是我理解有问题吗?按理说是不是应该在这里能直接选择,然后消息直接发给小程序的云函数,多么顺畅的链接
11-25 - 手机端预览时,VConsole按钮能不能不要默认在左上角?
因为现在一般手机左上角都有下滑的手势操作,这个按钮在左上角基本点不到也拉不下来,一直只能触发手机的下拉。
08-15 - 同步上传云函数至服务器时候报错?
[图片] [图片]
08-15 - 已是最新版本仍然提示更新及界面问题再反馈?
已经是最新版,还提示更新,代码颜色全没了,一片黑 [图片]
07-30 - 有人能看清楚这个快捷面板的选中色吗?
白色主题下,这个快捷面板的选中色真的是人类能看清楚的吗? [图片]
07-28 - 无法新建component?
为什么新建不了component了,一致提示我必须提供文件或文件夹名 [图片] [图片]
07-28 - 为什么把重新编译按钮放到模拟器界面上?
最新版本把编译按钮放在了模拟器界面里,导致不开模拟器界面就没法快捷编译按钮,为啥? 另外就是,模拟器的开关按钮呢?为啥删了,我有时候不需要模拟器我现在还得点界面按钮来进行调整才行,很费劲啊
07-25 - 微信开发工具最新稳定版或Nightly版本引入chatbot插件后编译报错?
微信开发者工具更新到最新的稳定版本 Stable Build (1.06.2503290) 或最新的Nightly版本后,编译项目报错如下: [图片] 经过云开发团队定位问题,发现错误指向这里: [图片] 后我移除了项目里对话插件,编译错误消失 补充一下: 插件依赖信息: "chatbot": { "version": "1.4.8", "provider": "wx8c631f7e9f2465e1" },
05-08 - 最新微信开发工具编译错:property 'customVersion' of undefined?
升级微信开发工具到最新版本(包括最新的稳定版1.06.2503290和Nightly版本)升级完成都会在项目编译启动时显示如下报错。 [图片] 后续经联系云开发团队定位到我的这个问题是插件chatbot引发的: "chatbot": { "version": "1.4.8", "provider": "wx8c631f7e9f2465e1" } 经过验证确实在移除(注释掉)该插件后,项目编译正常。目前还没得到chatbot板块的回复和解决。
05-07