接收消息服务器配置 URL https://pactgo.cn/wecom Token mytoken123456 EncodingAESKey PXP7FjoinIPc9WscGymDlf1VwMyBLh1cKJJSJFx2SO8 接收的消息事件类型 用户发送的普通消息,自定义菜单操作,上报地理位置 ,上报进入应用事件,审批状态通知事件,外部联系人变更回调,微信客服消息和事件,支付和退款通知,上下游变更回调,直播状态变更回调,会议室预定状态变更回调,成员申请高级功能状态通知
2.8 KiB
2.8 KiB
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"
验证逻辑
- 接收企业微信发送的验证请求
- 将
token、timestamp、nonce、echostr四个参数进行字典序排序 - 将排序后的字符串拼接成一个字符串
- 对拼接后的字符串进行 SHA1 哈希
- 将哈希值与
msg_signature进行比较 - 验证成功返回
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 解码
- 场景 1:【消息加解密】(业务消息)
许可证
本项目仅供学习和参考使用。