WebSocket API 基本信息
ZTDX WebSocket API 的连接信息与使用指南。
基础地址
| 网络 | WebSocket 地址 |
|---|---|
| 主网 (Mainnet) | wss://api.ztdx.io/ws |
| 测试网 (Sepolia) | wss://api-sepolia.ztdx.io/ws |
端点说明
| 路径 | 说明 |
|---|---|
/ws | 内部行情数据(订单簿、成交、行情、K线、持仓、订单、余额) |
/ws/internal | 与 /ws 相同 — 内部数据显式端点 |
/ws/external | 外部价格源(Hyperliquid 代理) |
连接说明
- WebSocket 连接使用标准 WebSocket 协议(RFC 6455)。
- 所有消息均以 JSON 文本帧 的格式发送和接收。
- 服务端会自动响应 WebSocket
Ping帧并返回Pong帧。 - 单个 WebSocket 连接可以同时订阅 多个频道。
连接示例
- JavaScript
- Python
const ws = new WebSocket('wss://api.ztdx.io/ws');
ws.onopen = () => {
console.log('已连接');
// 订阅公共频道
ws.send(JSON.stringify({
type: 'subscribe',
channel: 'ticker:BTCUSDT'
}));
};
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('收到消息:', data);
};
import asyncio
import json
import websockets
async def connect():
async with websockets.connect('wss://api.ztdx.io/ws') as ws:
print('已连接')
# 订阅公共频道
await ws.send(json.dumps({
'type': 'subscribe',
'channel': 'ticker:BTCUSDT'
}))
async for message in ws:
data = json.loads(message)
print('收到消息:', data)
asyncio.run(connect())
消息格式
客户端 → 服务端消息
所有客户端消息必须包含 type 字段。
| 类型 | 说明 | 需要认证 |
|---|---|---|
auth | 通过 EIP-712 签名、JWT 或 fapi listenKey 进行认证 | — |
auth_token | 通过 JWT Token 进行认证 | — |
subscribe | 订阅频道 | 仅私有频道 |
unsubscribe | 取消订阅频道 | 否 |
ping | 心跳 Ping | 否 |
服务端 → 客户端消息
所有服务端消息都包含 type 字段。
| 类型 | 说明 |
|---|---|
auth_result | 认证结果 |
subscribed | 订阅确认 |
unsubscribed | 取消订阅确认 |
trade | 成交更新 |
orderbook | 订单簿快照/更新 |
ticker | 行情数据 |
kline | K线/蜡烛图数据 |
kline_snapshot | 订阅时的K线初始快照 |
position | 持仓更新(私有) |
order | 订单更新(私有) |
balance | 余额更新(私有) |
error | 错误消息 |
pong | 心跳 Pong |
认证
私有频道(positions、orders、balance)在订阅前需要进行认证。支持三种认证方式:
方式一:EIP-712 签名认证
{
"type": "auth",
"address": "0xYourWalletAddress",
"signature": "0x...",
"timestamp": 1711000000
}
address— 以太坊钱包地址。signature— EIP-712 类型化数据签名。timestamp— UNIX 时间戳(秒)。必须在服务器时间 5 分钟 以内。
方式二:JWT Token 认证
{
"type": "auth",
"token": "eyJhbGciOiJIUzI1..."
}
或使用专用的 auth_token 类型:
{
"type": "auth_token",
"token": "eyJhbGciOiJIUzI1..."
}
方式三:fapi listenKey
针对 HMAC 鉴权的 bot (Binance fapi 客户端),先通过 POST /fapi/v1/listenKey 申请 listenKey,然后在 WebSocket 上传:
{
"type": "auth",
"listenKey": "a1b2c3d4e5f6..."
}
服务端通过 Redis 把 listenKey 解析回所属 user_address。listenKey 的 TTL 为 3600 秒(60 分钟),且仅在用它鉴权的那一刻被刷新 —— 保持打开的 WebSocket 连接本身不会为其续期。请定期调用 PUT /fapi/v1/listenKey(例如每 30 分钟一次)延长 TTL;一旦过期,通过 POST /fapi/v1/listenKey 重新申请。
方式四:订阅时附带 Token
可以在 subscribe 消息中直接传递 token 字段,服务端会在处理订阅前自动完成认证:
{
"type": "subscribe",
"channel": "positions",
"token": "eyJhbGciOiJIUzI1..."
}
认证响应
成功:
{
"type": "auth_result",
"success": true,
"message": null
}
失败:
{
"type": "auth_result",
"success": false,
"message": "Invalid or expired token"
}