MGBX WebSocket API接入文档
1. WebSocket 概述
MGBX 交易平台提供WebSocket接口,支持实时订阅行情数据和用户数据,相比REST API具有更低的延迟和更高的效率。WebSocket连接不需要认证,但订阅用户私有数据时需要提供认证token。
2. 服务地址
- WebSocket基础URL:
wss://open.mgbx.com/spot/v1/ws/socket
- 获取用户认证Token URL:
https://open.mgbx.com/spot/v1/u/ws/token
3. 认证机制
3.1 用户数据认证流程
订阅用户私有数据需要先获取认证token,然后在订阅消息中提供该token:
- 调用
/spot/v1/u/ws/token
接口获取WebSocket认证token - 在订阅用户数据时将获取的token添加到订阅消息中
3.2 获取认证Token
接口信息:
- 路径:
/spot/v1/u/ws/token
- 方法:
GET
- 是否签名: 是
请求头:
请求头 | 说明 |
---|---|
X-Access-Key | 您的API访问密钥 |
X-Signature | 使用秘钥对请求参数生成的签名 |
X-Request-Timestamp | 请求时间戳(毫秒) |
X-Request-Nonce | 随机字符串,防止重放攻击 |
签名算法:
签名算法流程:
- 将常规请求参数按键名字母顺序排序(使用TreeMap)
- 构建参数字符串:
key1=value1&key2=value2&...
- 在参数字符串末尾附加时间戳:
key1=value1&key2=value2&...×tamp=xxx
(其中timestamp
值与请求头X-Request-Timestamp
相同) - 使用HMAC-SHA256算法,以secretKey为密钥对最终参数字符串进行签名
- 将签名结果转换为十六进制字符串
响应数据:
参数名 | 类型 | 说明 |
---|---|---|
code | Integer | 状态码,0表示成功 |
message | String | 响应信息 |
data | String | WebSocket认证Token |
4. 心跳机制
- 客户端需要每50秒发送一次
ping
消息 - 服务端会回复
pong
消息 - 如果服务端超过60秒未收到心跳,将断开连接
5. 订阅类型
5.1 行情数据订阅
5.1.1 单交易对行情订阅
无需API权限,公共接口
请求格式:
{
"sub": "subSymbol",
"symbol": "BTC_USDT"
}
响应数据类型:
- 单档深度数据 (qDepth):
字段说明:
id
: 深度更新唯一标识s
: 交易对p
: 价格q
: 数量m
: 方向(1买入/2卖出)t
: 时间戳(毫秒)
{
"resType": "qDepth",
"data": {
"id": "485241469557277058",
"s": "BTC_USDT",
"m": 2,
"p": "93503.08",
"q": "2.05713",
"t": 1745392581693
}
}
- 全量深度数据 (qAllDepth):
字段说明:
s
: 交易对id
: 更新IDa
: 卖单数组 [价格, 数量]b
: 买单数组 [价格, 数量]
{
"resType": "qAllDepth",
"data": {
"s": "BTC_USDT",
"id": "12345678",
"a": [
["30100.00", "0.1"],
["30200.00", "0.5"]
],
"b": [
["29900.00", "0.3"],
["29800.00", "0.6"]
]
}
}
- 成交数据 (qDeal):
字段说明:
s
: 交易对p
: 成交价a
: 成交量m
: 买卖方向,1买/2卖t
: 时间戳
{
"resType": "qDeal",
"data": {
"s": "BTC_USDT",
"p": "30050.00",
"a": "0.25",
"m": 1,
"t": 1687245871234
}
}
5.1.2 K线数据订阅
请求格式:
{
"sub": "subKline",
"symbol": "BTC_USDT",
"type": "1m"
}
支持的K线周期:1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w, 1M
响应格式:
字段说明:
s
: 交易对o
: 开盘价c
: 收盘价h
: 最高价l
: 最低价a
: 成交量v
: 成交额i
: K线周期t
: 时间戳
{
"resType": "qKLine",
"data": {
"s": "BTC_USDT",
"o": "30000.00",
"c": "30100.00",
"h": "30200.00",
"l": "29900.00",
"a": "10.5",
"v": "315000.50",
"i": "1m",
"t": 1687245871234
}
}
5.1.3 统计数据订阅
请求格式:
{
"sub": "subStats"
}
响应格式:
字段说明:
s
: 交易对o
: 开盘价c
: 收盘价h
: 最高价l
: 最低价a
: 24h成交量v
: 24h成交额r
: 涨跌幅(小数表示)
{
"resType": "qStats",
"data": {
"s": "BTC_USDT",
"o": "30000.00",
"c": "30100.00",
"h": "30200.00",
"l": "29900.00",
"a": "10.5",
"v": "315000.50",
"r": "0.0033"
}
}
5.2 用户数据订阅
需要请求/spot/v1/u/ws/token获取 token
请求格式:
{
"sub": "subUser",
"token": "获取到的认证Token"
}
响应数据类型:
- 用户余额变动 (uBalance):
字段说明:
coin
: 币种balanceType
: 账户类型(1现货,2杠杆)balance
: 总余额freeze
: 冻结金额availableBalance
: 可用余额estimatedTotalAmount
: 总余额估值estimatedCynAmount
: CNY估值estimatedAvailableAmount
: 可用余额估值estimatedCoinType
: 估值使用的币种
{
"resType": "uBalance",
"data": {
"coin": "USDT",
"balanceType": 1,
"balance": "76027890.2214756",
"freeze": "948.5",
"availableBalance": "76027890.2214756",
"estimatedTotalAmount": "76028838.72147560",
"estimatedCynAmount": "547407638.79462432",
"estimatedAvailableAmount": "76027890.22147560",
"estimatedCoinType": "USDT"
}
}
- 用户订单更新 (uOrder):
字段说明:
orderId
: 订单IDbalanceType
: 账户类型(1现货,2杠杆)orderType
: 订单类型(1限价单,2市价单,3止盈止损)symbol
: 交易对price
: 价格direction
: 方向(1买入,2卖出)origQty
: 原始数量avgPrice
: 成交均价dealQty
: 已成交数量state
: 状态(1未成交,2部分成交,3完全成交,4已撤单)createTime
: 创建时间
{
"resType": "uOrder",
"data": {
"orderId": "475533479170587712",
"balanceType": 1,
"orderType": 1,
"symbol": "BTC_USDT",
"price": "30000.00",
"direction": 1,
"origQty": "0.1",
"avgPrice": "30050.00",
"dealQty": "0.05",
"state": 2,
"createTime": 1687245871234
}
}
- 用户成交通知 (uTrade):
字段说明:
orderId
: 订单IDprice
: 成交价格quantity
: 成交数量marginUnfrozen
: 解冻保证金timestamp
: 成交时间戳
{
"resType": "uTrade",
"data": {
"orderId": "475533479170587712",
"price": "30050.00",
"quantity": "0.05",
"marginUnfrozen": "15.025",
"timestamp": 1687245871500
}
}
5.3 系统通知订阅
系统通知会自动推送,无需特殊订阅。当系统有重要通知(如价格波动提醒)时,会通过此通道推送。
响应数据类型 (znxMessage):
字段说明:
id
: 通知消息IDtenantId
: 租户IDtitle
: 通知标题content
: 通知内容aggType
: 消息聚合类型,如"SYSTEM"detailType
: 消息详细类型,如"SYSTEM_PRICE"表示价格提醒createdTime
: 创建时间戳(毫秒)allScope
: 是否全局范围消息userId
: 用户ID,-1表示系统消息read
: 是否已读
{
"resType": "znxMessage",
"data": {
"id": 336912,
"tenantId": 1,
"title": "行情价格",
"content": "VVVUSDT 10分钟涨跌幅 -3.01%,现价 4.177 USDT",
"aggType": "SYSTEM",
"detailType": "SYSTEM_PRICE",
"createdTime": 1745932297862,
"allScope": true,
"userId": -1,
"read": false
}
}
6. 错误码
错误码 | 描述 |
---|---|
invalid param | 参数无效,请检查订阅格式 |
auth fail | 认证失败,请检查认证参数 |
sub fail | 订阅失败 |
system error | 系统错误 |
7. 最佳实践
- 心跳维护: 每25秒发送一次心跳消息,确保连接不断开
- 断线重连: 实现自动重连机制,处理网络波动情况
- Token管理: Token有效期有限,需要及时更新
- 异步获取Token: 连接成功后异步获取Token,不阻塞主线程
- 数据验证: 关键业务数据建议同时使用REST API进行二次确认
- 高效处理: 针对高频数据实现合理的缓存和处理策略,避免内存溢出
- 错误处理: 妥善处理各类异常情况,包括认证失败、订阅错误等