214 lines
5.3 KiB
Markdown
214 lines
5.3 KiB
Markdown
|
|
# 企微回调服务器配置指南
|
|||
|
|
|
|||
|
|
## 一、问题现象
|
|||
|
|
|
|||
|
|
在企微后台设置接收消息服务器时,保存配置提示:
|
|||
|
|
> "openapi回调地址请求不通过"
|
|||
|
|
|
|||
|
|
## 二、问题原因
|
|||
|
|
|
|||
|
|
1. **AES解密未实现** - 回调验证需要解密echostr,原代码只返回了原始密文
|
|||
|
|
2. **环境变量未配置** - Docker容器中缺少企微配置
|
|||
|
|
3. **回调地址不可访问** - 服务器无法访问配置的URL
|
|||
|
|
|
|||
|
|
## 三、配置步骤
|
|||
|
|
|
|||
|
|
### 步骤1:获取企微配置信息
|
|||
|
|
|
|||
|
|
登录 [企业微信管理后台](https://work.weixin.qq.com/wework_admin/frame),进入:
|
|||
|
|
|
|||
|
|
**应用管理 → 接收消息 → 设置接收消息服务器**
|
|||
|
|
|
|||
|
|
你需要获取以下信息:
|
|||
|
|
|
|||
|
|
| 配置项 | 说明 | 示例 |
|
|||
|
|
|--------|------|------|
|
|||
|
|
| 企业ID (CorpID) | 企业微信后台 → 我的企业 → 企业信息 | `ww1234567890abcdef` |
|
|||
|
|
| 应用Secret | 应用管理 → 自建应用 → Secret | `a1b2c3d4e5f6...` |
|
|||
|
|
| 回调Token | 自定义,用于验证请求 | `my_callback_token_123456` |
|
|||
|
|
| 消息加密密钥 | 43位字符,系统自动生成 | `abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG` |
|
|||
|
|
|
|||
|
|
### 步骤2:配置Docker环境变量
|
|||
|
|
|
|||
|
|
在服务器上创建 `.env` 文件:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd /path/to/baodanagent/deploy-package/baodanagent
|
|||
|
|
cp .env.example .env
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
编辑 `.env` 文件,填入真实配置:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 企微配置
|
|||
|
|
WECOM_CORP_ID=ww1234567890abcdef
|
|||
|
|
WECOM_SECRET=a1b2c3d4e5f6...
|
|||
|
|
WECOM_TOKEN=my_callback_token_123456
|
|||
|
|
WECOM_AES_KEY=abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 步骤3:确保回调地址可访问
|
|||
|
|
|
|||
|
|
#### 方案A:使用HTTPS(推荐,生产环境)
|
|||
|
|
|
|||
|
|
1. 配置域名和SSL证书
|
|||
|
|
2. 设置Nginx反向代理
|
|||
|
|
|
|||
|
|
```nginx
|
|||
|
|
server {
|
|||
|
|
listen 443 ssl;
|
|||
|
|
server_name your-domain.com;
|
|||
|
|
|
|||
|
|
ssl_certificate /path/to/cert.pem;
|
|||
|
|
ssl_certificate_key /path/to/key.pem;
|
|||
|
|
|
|||
|
|
location / {
|
|||
|
|
proxy_pass http://127.0.0.1:8080;
|
|||
|
|
proxy_set_header Host $host;
|
|||
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|||
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|||
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
location /api/ {
|
|||
|
|
proxy_pass http://127.0.0.1:5001/api/;
|
|||
|
|
proxy_set_header Host $host;
|
|||
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|||
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|||
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 方案B:使用内网穿透(开发测试环境)
|
|||
|
|
|
|||
|
|
使用 ngrok、frp 等工具:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 使用 ngrok
|
|||
|
|
ngrok http 8080
|
|||
|
|
|
|||
|
|
# 获取公网地址,如:https://xxxx.ngrok.io
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 步骤4:重启Docker服务
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd /path/to/baodanagent/deploy-package/baodanagent
|
|||
|
|
|
|||
|
|
# 停止服务
|
|||
|
|
docker compose down
|
|||
|
|
|
|||
|
|
# 重新构建(代码有改动时需要)
|
|||
|
|
docker compose build baodanagent-api
|
|||
|
|
|
|||
|
|
# 启动服务
|
|||
|
|
docker compose up -d
|
|||
|
|
|
|||
|
|
# 查看日志,确认启动成功
|
|||
|
|
docker compose logs -f baodanagent-api
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 步骤5:在企微后台配置回调地址
|
|||
|
|
|
|||
|
|
1. 进入 **企业微信管理后台 → 应用管理 → 接收消息**
|
|||
|
|
2. 点击 **设置接收消息服务器**
|
|||
|
|
3. 填写配置:
|
|||
|
|
|
|||
|
|
| 配置项 | 值 |
|
|||
|
|
|--------|-----|
|
|||
|
|
| URL | `https://your-domain.com/api/wecom/callback` |
|
|||
|
|
| Token | 你在 `.env` 中设置的 `WECOM_TOKEN` |
|
|||
|
|
| EncodingAESKey | 你在 `.env` 中设置的 `WECOM_AES_KEY` |
|
|||
|
|
|
|||
|
|
4. 点击 **保存**
|
|||
|
|
|
|||
|
|
## 四、验证配置
|
|||
|
|
|
|||
|
|
### 1. 检查服务是否正常运行
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 检查API服务
|
|||
|
|
curl http://localhost:5001/api/health
|
|||
|
|
|
|||
|
|
# 检查前端
|
|||
|
|
curl http://localhost:8080
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 手动测试回调接口
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 测试GET验证接口
|
|||
|
|
curl "https://your-domain.com/api/wecom/callback?msg_signature=test×tamp=1234567890&nonce=test&echostr=test"
|
|||
|
|
|
|||
|
|
# 应该返回:Invalid signature(说明服务正常,只是参数不对)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 查看Docker日志
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
docker compose logs -f baodanagent-api | grep -i wecom
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 五、常见问题
|
|||
|
|
|
|||
|
|
### 问题1:仍然提示"回调地址请求不通过"
|
|||
|
|
|
|||
|
|
**排查步骤:**
|
|||
|
|
|
|||
|
|
1. 检查URL是否正确(注意路径是 `/api/wecom/callback`,不是 `/wecom/callback`)
|
|||
|
|
2. 检查防火墙是否开放了443端口
|
|||
|
|
3. 检查SSL证书是否有效
|
|||
|
|
4. 查看Docker日志:`docker compose logs baodanagent-api`
|
|||
|
|
|
|||
|
|
### 问题2:返回"Invalid signature"
|
|||
|
|
|
|||
|
|
**原因:** Token配置不一致
|
|||
|
|
|
|||
|
|
**解决:** 确保企微后台配置的Token与 `.env` 中的 `WECOM_TOKEN` 完全一致
|
|||
|
|
|
|||
|
|
### 问题3:返回"Invalid echostr"
|
|||
|
|
|
|||
|
|
**原因:** AES密钥配置不一致
|
|||
|
|
|
|||
|
|
**解决:** 确保企微后台配置的EncodingAESKey与 `.env` 中的 `WECOM_AES_KEY` 完全一致
|
|||
|
|
|
|||
|
|
### 问题4:5秒内未返回success
|
|||
|
|
|
|||
|
|
**原因:** 服务器响应太慢
|
|||
|
|
|
|||
|
|
**解决:** 检查服务器性能,优化网络延迟
|
|||
|
|
|
|||
|
|
## 六、完整配置示例
|
|||
|
|
|
|||
|
|
### .env 文件
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 数据库
|
|||
|
|
DB_PASSWORD=your_secure_password
|
|||
|
|
|
|||
|
|
# JWT
|
|||
|
|
JWT_SECRET=your_jwt_secret_key
|
|||
|
|
|
|||
|
|
# 企微配置
|
|||
|
|
WECOM_CORP_ID=ww1234567890abcdef
|
|||
|
|
WECOM_SECRET=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
|
|||
|
|
WECOM_TOKEN=my_callback_token_2024
|
|||
|
|
WECOM_AES_KEY=abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 企微后台配置
|
|||
|
|
|
|||
|
|
| 配置项 | 值 |
|
|||
|
|
|--------|-----|
|
|||
|
|
| URL | `https://example.com/api/wecom/callback` |
|
|||
|
|
| Token | `my_callback_token_2024` |
|
|||
|
|
| EncodingAESKey | `abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG` |
|
|||
|
|
|
|||
|
|
## 七、安全建议
|
|||
|
|
|
|||
|
|
1. **Token和AES密钥**:使用随机生成的强字符串
|
|||
|
|
2. **HTTPS**:生产环境必须使用HTTPS
|
|||
|
|
3. **IP白名单**:在企微后台配置IP白名单
|
|||
|
|
4. **日志监控**:定期检查回调日志,发现异常及时处理
|