Files
PolyHermes/backend/TEST_ORDER_PUSH.md
WrBug 5b458b9b0c feat: 实现订单推送服务和 WebSocket 重连机制
- 实现订单推送服务,支持多账户订单实时推送
- 添加 WebSocket 自动重连机制,支持指数退避策略
- 修复订单详情接口 L2 认证问题,通过 PolymarketClobService 获取
- 配置 Gson lenient 模式,支持解析格式不严格的 JSON
- 添加响应日志拦截器,便于调试 API 响应问题
- 使用 Gamma API 获取市场信息,支持通过 condition_ids 查询
- 修复字段映射问题,使用 @SerializedName 替代 @JsonProperty
- 订单推送消息包含订单详情和市场信息
2025-11-27 14:51:46 +08:00

184 lines
4.1 KiB
Markdown

# 订单推送功能测试指南
## 测试准备
### 1. 确保有测试账户
- 账户必须已导入到系统
- 账户必须有有效的 API Key、Secret 和 Passphrase
- 可以通过 `/api/accounts/import` 接口导入账户
### 2. 启动后端服务
```bash
cd backend
./gradlew bootRun
```
### 3. 检查日志
启动后,应该看到以下日志:
- `订单推送服务已初始化`
- `已为账户 X (账户名) 建立 User Channel 连接并发送订阅消息`
## 测试步骤
### 测试 1: 检查服务初始化
1. 启动后端服务
2. 查看日志,确认 `OrderPushService` 已初始化
3. 确认所有有 API 凭证的账户都已建立连接
**预期结果**:
- 日志显示:`订单推送服务已初始化`
- 对于每个有 API 凭证的账户,日志显示:`已为账户 X 建立 User Channel 连接并发送订阅消息`
### 测试 2: 通过 WebSocket 订阅订单推送
#### 2.1 使用 WebSocket 客户端连接
```bash
# 使用 wscat 或其他 WebSocket 客户端
wscat -c ws://localhost:8000/ws
```
#### 2.2 发送订阅消息
```json
{
"type": 1,
"channel": "order",
"payload": {
"accountId": 1
}
}
```
**预期结果**:
- 收到订阅确认消息:
```json
{
"type": 4,
"channel": "order",
"status": 0,
"message": null
}
```
#### 2.3 等待订单消息
当账户有订单活动时(下单、更新、取消),应该收到推送消息:
```json
{
"type": 3,
"channel": "order",
"payload": {
"accountId": 1,
"accountName": "测试账户",
"order": {
"assetId": "...",
"eventType": "order",
"id": "...",
"market": "...",
"type": "PLACEMENT",
"side": "BUY",
"price": "0.5",
"originalSize": "10",
"sizeMatched": "0",
...
},
"timestamp": 1234567890
},
"timestamp": 1234567890
}
```
### 测试 3: 测试订单类型
#### 3.1 PLACEMENT (下单)
- 在 Polymarket 上创建一个订单
- 应该收到 `type: "PLACEMENT"` 的订单消息
#### 3.2 UPDATE (订单更新)
- 订单部分成交时
- 应该收到 `type: "UPDATE"` 的订单消息,`sizeMatched` 字段会更新
#### 3.3 CANCELLATION (订单取消)
- 取消一个订单
- 应该收到 `type: "CANCELLATION"` 的订单消息
### 测试 4: 多账户支持
1. 导入多个账户(都有 API 凭证)
2. 订阅不同账户的订单推送
3. 验证每个账户的订单消息都能正确推送
### 测试 5: 连接重连
1. 断开网络连接
2. 恢复网络连接
3. 验证连接是否自动重连(需要实现重连逻辑)
### 测试 6: 代理支持
如果配置了代理:
```bash
export ENABLE_PROXY=1
export PROXY_HOST=127.0.0.1
export PROXY_PORT=8888
```
启动服务后,应该看到日志:
- `已配置 WebSocket 代理: 127.0.0.1:8888`
## 常见问题排查
### 问题 1: 连接建立失败
**可能原因**:
- Polymarket RTDS 服务不可用
- 网络连接问题
- 代理配置错误
**排查步骤**:
1. 检查 `polymarket.rtds.ws-url` 配置是否正确
2. 检查网络连接
3. 查看详细错误日志
### 问题 2: 订阅消息发送失败
**可能原因**:
- 连接未完全建立就发送消息
- API 凭证无效
**排查步骤**:
1. 检查日志中的连接状态
2. 验证 API 凭证是否正确
3. 增加连接建立的等待时间
### 问题 3: 收不到订单消息
**可能原因**:
- 账户没有订单活动
- 订阅消息格式错误
- API 凭证权限不足
**排查步骤**:
1. 在 Polymarket 上手动创建一个订单
2. 检查订阅消息格式是否正确
3. 验证 API Key 是否有订单查询权限
### 问题 4: 账户 ID 为 null
**可能原因**:
- 账户未正确保存到数据库
- 账户 ID 未正确传递
**排查步骤**:
1. 检查数据库中的账户记录
2. 验证订阅消息中的 accountId 是否正确
## 日志关键字
搜索以下关键字查看相关日志:
- `订单推送服务已初始化`
- `已为账户 X 建立 User Channel 连接`
- `已发送 User Channel 订阅消息`
- `处理订单消息失败`
- `推送订单消息失败`
## 下一步
测试通过后,可以:
1. 实现前端订阅和 Notification 显示
2. 添加连接重连逻辑
3. 优化错误处理
4. 添加单元测试