跳到主要内容

参数签名

API验证

发起请求

所有REST请求的header都必须包含以下key:

  • ACCESS-KEY:API KEY作为一个字符串。
  • ACCESS-SIGN:使用base64编码签名 (参考 HMACRSA)。
  • ACCESS-TIMESTAMP:您请求的时间戳。
  • ACCESS-PASSPHRASE:您在创建API KEY时设置的口令。
  • Content-Type:统一设置为application/json。
  • locale: 支持多语言, 如:中文(zh-CN),英语(en-US)

获取时间戳

Long timestamp = System.currentTimeMillis();

签名

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,得到签名字符串进行接口请求。

您的阅读体验如何?