接口鉴权
ZTDX 接受两种鉴权方式,每个端点的文档会 标明它需要哪一种:
| 方式 | 头 / 体 | 适用场景 |
|---|---|---|
| HMAC SHA-256 签名 | X-MBX-APIKEY: <api_key> + signature | /fapi/v1/* 程序化 / 做市商客户端 |
| EIP-712 钱包签名 | Authorization: Bearer <JWT>(登录后) | /api/v1/* 交互 / 浏览器客户端 |
公开接口(行情、exchangeInfo、公开排行榜等)无需任何签名。
HMAC SHA-256 签名
这是 Binance 兼容的签名流程。任何要程序化下单的客户端都用这一套。
步骤
- 创建 API Key,详见 快速入门。
- 构造待签名字符串 ——
GET/DELETE取 URL query string (如symbol=BTCUSDT&side=BUY×tamp=…);POST/PUT取 query string 拼接 request body。 - 计算
HMAC_SHA256(secret_key, payload),将十六进制结果作为&signature=<hex>追加到 URL。 - 请求时带上
X-MBX-APIKEY: <api_key>。
必需参数
| 名 称 | 说明 |
|---|---|
timestamp | Unix 毫秒,必须落在 [serverTime - recvWindow, serverTime + 1000ms] 区间 |
recvWindow | 可选,默认 5000(毫秒),最大 60000。用来收紧或放宽 timestamp 容差窗口。 |
signature | 十六进制 HMAC SHA-256 |
timestamp 越界会返回
-1021 INVALID_TIMESTAMP。
Payload 编码兼容
部分 HTTP 库会先把 query string 里的特殊字符做 URL 编码(例如
[ → %5B,, → %2C)再签名;另一些直接对原始字节签名。
ZTDX 两种都接受:服务器先按 raw payload 验证,失败时回退到
URL-decoded 比较。客户端不必预先统一编码方式。
示例(Python)
import time, hmac, hashlib, requests
API_KEY = "your_api_key"
API_SECRET = "your_api_secret"
BASE_URL = "https://api.ztdx.io"
def sign(payload: str) -> str:
return hmac.new(API_SECRET.encode(), payload.encode(), hashlib.sha256).hexdigest()
def signed_get(path: str, params: dict):
params["timestamp"] = int(time.time() * 1000)
qs = "&".join(f"{k}={v}" for k, v in params.items())
return requests.get(
f"{BASE_URL}{path}?{qs}&signature={sign(qs)}",
headers={"X-MBX-APIKEY": API_KEY},
)
print(signed_get("/fapi/v1/openOrders", {"symbol": "BTCUSDT"}).json())
EIP-712 钱包签名
供前端及任何要 用钱包鉴权的客户端使用。完整登录流程(nonce → typed-data 签名 → 换 JWT)见 基本信息。
签发后 JWT 以 Authorization: Bearer <jwt> 发送。/api/v1/* 上大部分
交易动作还要求请求体内携带一个 EIP-712 签名(覆盖该动作的
typed-data 结构体)—— 各端点页会列出对应的 TypeHash。