接收消息服务器配置 URL https://pactgo.cn/wecom Token mytoken123456 EncodingAESKey PXP7FjoinIPc9WscGymDlf1VwMyBLh1cKJJSJFx2SO8 接收的消息事件类型 用户发送的普通消息,自定义菜单操作,上报地理位置 ,上报进入应用事件,审批状态通知事件,外部联系人变更回调,微信客服消息和事件,支付和退款通知,上下游变更回调,直播状态变更回调,会议室预定状态变更回调,成员申请高级功能状态通知
152 lines
2.8 KiB
Markdown
152 lines
2.8 KiB
Markdown
# 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):
|
||
|
||
```bash
|
||
rustup update stable
|
||
```
|
||
|
||
克隆项目后,进入项目目录:
|
||
|
||
```bash
|
||
cd d:\Projects\trunk\JoyD\WeCom
|
||
```
|
||
|
||
## 运行
|
||
|
||
开发模式运行:
|
||
|
||
```bash
|
||
cargo run
|
||
```
|
||
|
||
生产构建:
|
||
|
||
```bash
|
||
cargo build --release
|
||
```
|
||
|
||
运行生产版本:
|
||
|
||
```bash
|
||
.\target\release\wecom_server.exe
|
||
```
|
||
|
||
## 配置
|
||
|
||
在 `src/main.rs` 中修改以下配置:
|
||
|
||
```rust
|
||
const WECOM_TOKEN: &str = "mytoken123456"; // 企业微信后台填写的 Token
|
||
```
|
||
|
||
服务器默认监听地址:`127.0.0.1:8000`
|
||
|
||
## API 接口
|
||
|
||
### GET /wecom
|
||
|
||
企业微信服务器验证接口。
|
||
|
||
**请求参数:**
|
||
|
||
- `msg_signature` - 消息签名
|
||
- `timestamp` - 时间戳
|
||
- `nonce` - 随机数
|
||
- `echostr` - 随机字符串
|
||
|
||
**响应:**
|
||
|
||
- 验证成功:返回 `echostr` 原值
|
||
- 验证失败:返回 `"invalid"`
|
||
|
||
## 验证逻辑
|
||
|
||
1. 接收企业微信发送的验证请求
|
||
2. 将 `token`、`timestamp`、`nonce`、`echostr` 四个参数进行字典序排序
|
||
3. 将排序后的字符串拼接成一个字符串
|
||
4. 对拼接后的字符串进行 SHA1 哈希
|
||
5. 将哈希值与 `msg_signature` 进行比较
|
||
6. 验证成功返回 `echostr`,失败返回 `"invalid"`
|
||
|
||
## 开发
|
||
|
||
代码检查:
|
||
|
||
```bash
|
||
cargo check
|
||
```
|
||
|
||
代码格式化:
|
||
|
||
```bash
|
||
cargo fmt
|
||
```
|
||
|
||
运行 linter:
|
||
|
||
```bash
|
||
cargo clippy
|
||
```
|
||
|
||
运行测试:
|
||
|
||
```bash
|
||
cargo test
|
||
```
|
||
|
||
强制静态打包所有依赖
|
||
```bash
|
||
set RUSTFLAGS=-C target-feature=+crt-static && cargo build --release
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
- 确保 Token 与企业微信后台配置一致
|
||
- 服务器需要能够被企业微信服务器访问(如需外网访问,请配置端口转发或使用公网 IP)
|
||
- 生产环境建议使用环境变量管理敏感配置
|
||
- 企业微信的加解密分两个完全不同的场景:
|
||
- **场景 1:【消息加解密】(业务消息)**
|
||
- 格式:URL_SAFE Base64
|
||
- 字符:- / _
|
||
- 使用 URL_SAFE 解码
|
||
- **场景 2:【URL 验证】(echostr 验证)**
|
||
- 格式:标准 Base64
|
||
- 字符:+ / =
|
||
- 必须使用 STANDARD 解码
|
||
|
||
|
||
## 许可证
|
||
|
||
本项目仅供学习和参考使用。
|