参数签名
API验证
发起请求
所有REST请求的header都必须包含以下key:
- ACCESS-KEY:API KEY作为一个字符串。
- ACCESS-SIGN:使用base64编码签名 (参考 HMAC 与 RSA)。
- ACCESS-TIMESTAMP:您请求的时间戳。
- ACCESS-PASSPHRASE:您在创建API KEY时设置的口令。
- Content-Type:统一设置为application/json。
- locale: 支持多语言, 如:中文(zh-CN),英语(en-US)
获取时间戳
- Java
- Python
- Go
- JS
- PHP
Long timestamp = System.currentTimeMillis();
import time
time.time_ns() / 1000000
time.time_ns() / 1000000
import (
"time"
)
int64(time.Now().UnixNano()/1000000)
"time"
)
int64(time.Now().UnixNano()/1000000)
Math.round(new Date())
microtime(true) * 1000;
签名
ACCESS-SIGN的请求头是对 timestamp + method.toUpperCase() + requestPath + "?" + queryString + body
字符串(+表示字符串连接)使用 HMAC SHA256 方法加密,通过BASE64 编码输出而得到的。
签名各字段说明
- timestamp:与 ACCESS-TIMESTAMP 请求头相同。
- method:请求方法(POST/GET),字母全部大写。
- requestPath:请求接口路径。
- queryString:请求URL中(?后的请求参数)的查询字符串。需按key字母序升序
- body:请求主体对应的字符串,如果请求没有主体(通常为GET请求)则body可省略。
queryString为空时,签名格式
timestamp + method.toUpperCase() + requestPath + body
queryString不为空时,签名格式
timestamp + method.toUpperCase() + requestPath + "?" + queryString + body
举例说明
获取合约深度信息,以 BTCUSDT 为例:
- Timestamp = 16273667805456
- Method = "GET"
- requestPath = "/api/mix/v2/market/depth"
- queryString= "?limit=20&symbol=BTCUSDT"
生成待签名的字符串:
16273667805456GET/api/mix/v2/market/depth?limit=20&symbol=BTCUSDT
合约下单,以 BTCUSDT 为例:
- Timestamp = 16273667805456
- Method = "POST"
- requestPath = "/api/v2/mix/order/place-order"
- body = {"productType":"usdt-futures","symbol":"BTCUSDT","size":"8","marginMode":"crossed",side":"buy","orderType":"limit","clientOid":"123456"}
生成待签名的字符串:
16273667805456POST/api/v2/mix/order/place-order{"productType":"usdt-futures","symbol":"BTCUSDT","size":"8","marginMode":"crossed",side":"buy","orderType":"limit","clientOid":"123456"}
生成最终签名的步骤
HMAC
第1步,将待签名字符串使用私钥secretkey进行hmac sha256加密
Signature = hmac_sha256(secretkey, Message)
第2步,对于Signature进行base64编码
Signature = base64.encode(Signature)
RSA
第一步,使用RSA私钥privateKey对待签名字符串进行SHA-256签名。
第二步,对生成的签名字符串进行编码为 base64 string,得到签名字符串进行接口请求。