Files
JoyD/WeCom/README.md
zqm 9e81bed829 API接收消息
接收消息服务器配置
URL
https://pactgo.cn/wecom
Token
mytoken123456
EncodingAESKey
PXP7FjoinIPc9WscGymDlf1VwMyBLh1cKJJSJFx2SO8
接收的消息事件类型
用户发送的普通消息,自定义菜单操作,上报地理位置 ,上报进入应用事件,审批状态通知事件,外部联系人变更回调,微信客服消息和事件,支付和退款通知,上下游变更回调,直播状态变更回调,会议室预定状态变更回调,成员申请高级功能状态通知
2026-03-12 10:46:39 +08:00

2.8 KiB
Raw Blame History

WeCom Server

企业微信验证服务器 - 基于 Rust 和 Axum 框架实现的 Web 服务器,用于企业微信应用的服务器验证。

功能特性

  • 基于 Axum 0.7 框架的高性能 Web 服务器
  • 企业微信服务器验证接口
  • SHA1 签名验证
  • 异步处理(基于 Tokio

技术栈

  • Rust 2021 Edition
  • Axum 0.7 - Web 框架
  • Tokio 1.0 - 异步运行时
  • Serde 1.0 - 序列化/反序列化
  • SHA1 0.10 - 哈希算法
  • Tracing 0.1 - 日志追踪

项目结构

WeCom/
├── Cargo.toml          # 项目配置和依赖
├── README.md           # 项目说明文档
└── src/
    └── main.rs         # 主程序入口

安装

确保已安装 Rust 工具链(建议使用 rustup

rustup update stable

克隆项目后,进入项目目录:

cd d:\Projects\trunk\JoyD\WeCom

运行

开发模式运行:

cargo run

生产构建:

cargo build --release

运行生产版本:

.\target\release\wecom_server.exe

配置

src/main.rs 中修改以下配置:

const WECOM_TOKEN: &str = "mytoken123456";  // 企业微信后台填写的 Token

服务器默认监听地址:127.0.0.1:8000

API 接口

GET /wecom

企业微信服务器验证接口。

请求参数:

  • msg_signature - 消息签名
  • timestamp - 时间戳
  • nonce - 随机数
  • echostr - 随机字符串

响应:

  • 验证成功:返回 echostr 原值
  • 验证失败:返回 "invalid"

验证逻辑

  1. 接收企业微信发送的验证请求
  2. tokentimestampnonceechostr 四个参数进行字典序排序
  3. 将排序后的字符串拼接成一个字符串
  4. 对拼接后的字符串进行 SHA1 哈希
  5. 将哈希值与 msg_signature 进行比较
  6. 验证成功返回 echostr,失败返回 "invalid"

开发

代码检查:

cargo check

代码格式化:

cargo fmt

运行 linter

cargo clippy

运行测试:

cargo test

强制静态打包所有依赖

set RUSTFLAGS=-C target-feature=+crt-static && cargo build --release

注意事项

  • 确保 Token 与企业微信后台配置一致
  • 服务器需要能够被企业微信服务器访问(如需外网访问,请配置端口转发或使用公网 IP
  • 生产环境建议使用环境变量管理敏感配置
  • 企业微信的加解密分两个完全不同的场景:
    • 场景 1【消息加解密】业务消息
      • 格式URL_SAFE Base64
      • 字符:- / _
      • 使用 URL_SAFE 解码
    • 场景 2【URL 验证】echostr 验证)
      • 格式:标准 Base64
      • 字符:+ / =
      • 必须使用 STANDARD 解码

许可证

本项目仅供学习和参考使用。