如何在 Node.js 环境下配置企业微信回调 URL 白名单

文章导读
企业微信的回调 URL 配置主要在管理后台完成,Node.js 侧的核心任务是实现验证逻辑以通过后台校验。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

企业微信的回调 URL 配置主要在管理后台完成,Node.js 侧的核心任务是实现验证逻辑以通过后台校验。

先说结论:这不是单纯的代码配置,而是需要配合企业微信管理后台进行双向验证。

如何在 Node.js 环境下配置企业微信回调 URL 白名单
  • 适合:需要接收企业微信事件推送或调用回调接口的场景
  • 先准备:获取 Token 和 EncodingAESKey,确保服务器公网可达
  • 验收:管理后台显示验证成功且能正常接收消息

命令速用版

核心是编写一个 GET 接口,验证签名并返回 echostr。以下是一个基于原生 crypto 模块的验证逻辑片段:

如何在 Node.js 环境下配置企业微信回调 URL 白名单
const crypto = require('crypto');

function verifySignature(token, timestamp, nonce, echostr) {
  const str = [token, timestamp, nonce].sort().join('');
  const sha1 = crypto.createHash('sha1').update(str).digest('hex');
  // 对比请求中的 msg_signature 与计算出的 sha1
  // 验证通过后直接返回 echostr
  return echostr;
}

为什么会这样

企业微信为了防止恶意冒充,在保存回调 URL 前会向该地址发送 GET 请求,携带签名参数。服务器必须按特定算法计算签名并原样返回随机字符串,才能证明域名所有权。

如何在 Node.js 环境下配置企业微信回调 URL 白名单

分步处理

  1. 获取凭证:在企业微信管理后台“应用管理”或“自建应用”中找到回调设置,记录 Token 和 EncodingAESKey。
  2. 编写接口:在 Node.js 项目中创建一个 GET 路由,解析 query 参数中的 msg_signature、timestamp、nonce、echostr。
  3. 实现算法:将 Token、timestamp、nonce 字典序排序后拼接,进行 SHA1 加密,与 msg_signature 比对。
  4. 提交配置:将公网可访问的 URL 填入管理后台,点击保存触发验证。

怎么验证是否生效

查看企业微信管理后台回调设置页面,状态显示为“正常”即表示验证通过。后续可通过发送测试消息或查看服务器日志确认是否收到 POST 推送。

常见坑

  • 超时限制:企业微信要求验证请求必须在 5 秒内响应,耗时逻辑请异步处理。
  • 请求方式:验证阶段是 GET 请求,正式推送是 POST 请求,不要写死方法。
  • 编码问题:返回 echostr 时注意编码格式,加密模式下需要解密,明文模式直接返回。

参考来源

  • 企业微信官方文档 - 回调模式 - 验证 URL
  • https://work.weixin.qq.com/api/doc/90000/90135/90930