Node.js 验证微信小程序消息推送配置示例代码

分享

最近在做一个微信小程序,其中一步涉及到服务端消息推送配置,根据微信的官方文档的说明,大概的流程是这样的:

  • tokentimestampnonce 三个参数进行字典序排序。
  • 将三个参数字符串拼接成一个字符串进行 sha1 加密
  • 开发者获得加密后的字符串可与 signature 对比,标识该请求来源于微信。

验证 URL 有效性成功后即接入生效,成为开发者。

官网没有提供 Node.js 的示例代码。

Node.js 示例代码如下:

需要使用到的模块:Crypto

1
npm install crypto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
router.get('/', function(req, res, next) {
const crypto = require('crypto');
//使用SHA1算法
const sha1 = crypto.createHash('sha1');

//替换 'YourToken'
//Token 从小程序配置页面可以获取到
let token = 'YourToken';
//从 req 中的到的四个参数
let timestamp = req.query.timestamp;
let nonce = req.query.nonce;
let signature = req.query.signature;
let echoStr = req.query.echoStr;
let tempArray = [];
//放入 temp 数组
tempArray.push(token);
tempArray.push(timestamp);
tempArray.push(nonce);
tempArray.sort();

let tmpStr = tempArray.join('');
sha1.update(tmpStr);
let resStr = sha1.digest('hex');
//与Signature 作比较,成功则返回 echoStr,否则返回 failed
if (resStr == signature) {
res.send(echoStr);
} else {
res.json('failed');
}
});