Node 微信公众号验证代码

23 min read
const crypto = require('crypto');

function sha1(str) {
  return crypto.createHash('sha1').update(str).digest('hex');
}

// 假设config是您的配置对象,其中包含了token
const config = {
  token: 'YOUR_TOKEN_HERE' // 您需要在这里提供实际的token
};

// ... 您之前的代码片段 ...

// Express.js的路由处理示例
app.get('/your-webhook-url', (req, res) => {
  const { signature, echostr, timestamp, nonce } = req.query;
  const { token } = config;

  // 1. 将token、timestamp、nonce三个参数进行字典序排序
  const arr = [timestamp, nonce, token];
  const arrSort = arr.sort();
  
  // 2. 将三个参数字符串拼接成一个字符串进行sha1加密
  const str = arrSort.join('');
  const sha1Str = sha1(str);

  // 3. 获得加密后的字符串可与signature对比
  if (sha1Str === signature) {
    // 如果是一个有效的请求,返回echostr
    res.send(echostr);
  } else {
    // 如果请求不合法,返回错误信息
    res.status(403).send('error');
  }
});

// 监听端口
app.listen(3000, () => {
  console.log('应用启动成功');
});