5b458b9b0c
- 实现订单推送服务,支持多账户订单实时推送 - 添加 WebSocket 自动重连机制,支持指数退避策略 - 修复订单详情接口 L2 认证问题,通过 PolymarketClobService 获取 - 配置 Gson lenient 模式,支持解析格式不严格的 JSON - 添加响应日志拦截器,便于调试 API 响应问题 - 使用 Gamma API 获取市场信息,支持通过 condition_ids 查询 - 修复字段映射问题,使用 @SerializedName 替代 @JsonProperty - 订单推送消息包含订单详情和市场信息
4.1 KiB
4.1 KiB
订单推送功能测试指南
测试准备
1. 确保有测试账户
- 账户必须已导入到系统
- 账户必须有有效的 API Key、Secret 和 Passphrase
- 可以通过
/api/accounts/import接口导入账户
2. 启动后端服务
cd backend
./gradlew bootRun
3. 检查日志
启动后,应该看到以下日志:
订单推送服务已初始化已为账户 X (账户名) 建立 User Channel 连接并发送订阅消息
测试步骤
测试 1: 检查服务初始化
- 启动后端服务
- 查看日志,确认
OrderPushService已初始化 - 确认所有有 API 凭证的账户都已建立连接
预期结果:
- 日志显示:
订单推送服务已初始化 - 对于每个有 API 凭证的账户,日志显示:
已为账户 X 建立 User Channel 连接并发送订阅消息
测试 2: 通过 WebSocket 订阅订单推送
2.1 使用 WebSocket 客户端连接
# 使用 wscat 或其他 WebSocket 客户端
wscat -c ws://localhost:8000/ws
2.2 发送订阅消息
{
"type": 1,
"channel": "order",
"payload": {
"accountId": 1
}
}
预期结果:
- 收到订阅确认消息:
{
"type": 4,
"channel": "order",
"status": 0,
"message": null
}
2.3 等待订单消息
当账户有订单活动时(下单、更新、取消),应该收到推送消息:
{
"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: 多账户支持
- 导入多个账户(都有 API 凭证)
- 订阅不同账户的订单推送
- 验证每个账户的订单消息都能正确推送
测试 5: 连接重连
- 断开网络连接
- 恢复网络连接
- 验证连接是否自动重连(需要实现重连逻辑)
测试 6: 代理支持
如果配置了代理:
export ENABLE_PROXY=1
export PROXY_HOST=127.0.0.1
export PROXY_PORT=8888
启动服务后,应该看到日志:
已配置 WebSocket 代理: 127.0.0.1:8888
常见问题排查
问题 1: 连接建立失败
可能原因:
- Polymarket RTDS 服务不可用
- 网络连接问题
- 代理配置错误
排查步骤:
- 检查
polymarket.rtds.ws-url配置是否正确 - 检查网络连接
- 查看详细错误日志
问题 2: 订阅消息发送失败
可能原因:
- 连接未完全建立就发送消息
- API 凭证无效
排查步骤:
- 检查日志中的连接状态
- 验证 API 凭证是否正确
- 增加连接建立的等待时间
问题 3: 收不到订单消息
可能原因:
- 账户没有订单活动
- 订阅消息格式错误
- API 凭证权限不足
排查步骤:
- 在 Polymarket 上手动创建一个订单
- 检查订阅消息格式是否正确
- 验证 API Key 是否有订单查询权限
问题 4: 账户 ID 为 null
可能原因:
- 账户未正确保存到数据库
- 账户 ID 未正确传递
排查步骤:
- 检查数据库中的账户记录
- 验证订阅消息中的 accountId 是否正确
日志关键字
搜索以下关键字查看相关日志:
订单推送服务已初始化已为账户 X 建立 User Channel 连接已发送 User Channel 订阅消息处理订单消息失败推送订单消息失败
下一步
测试通过后,可以:
- 实现前端订阅和 Notification 显示
- 添加连接重连逻辑
- 优化错误处理
- 添加单元测试