跳到主要内容

签名生成

https://open-api.j2coin.com/api/v1/orders 为例。

以下是在 linux bash 环境下使用 echo openssl 和 curl 工具实现的一个调用接口下单的示例 appkey、secret 仅供示范:

appKey: ak_95e7762883a06dfc93ea479c08018afd

secretKey: sk_057b2334f7c52095b1cfb6290758287b5f16b51fb0e9eb5e0935f37bb7ebbcf4

Header 部分数据:

validate-algorithms: HmacSHA256

validate-appkey: ak_95e7762883a06dfc93ea479c08018afd

validate-recvwindow: 5000

validate-timestamp: 1641446237201

validate-signature: 763788e346f7251dd5813d93cd8686fccc3f936acd945be4cc501c03b1bb1f5b

请求数据:

{
"type": "LIMIT",
"timeInForce": "GTC",
"side": "BUY",
"symbol": "btc_usdt",
"price": "39000",
"quantity": "2"
}

1. 数据部分

method: 大写的请求方法,例如: GET、POST、DELETE、PUT

path: 按照 path 中顺序将所有 value 进行拼接。形如 /test/{var1}/{var2}/ 的 restful 路径将按填入的实际参数后路径拼接,示例: /api/v1/orders

query: 按照 key 的字典序排序,将所有 key=value 进行拼接。示例: userName=dfdfdf&password=ggg

body:
Json: 直接按 JSON 字符串不做转换或排序操作。
x-www-form-urlencoded: 按照 key 的字典序排序,将所有 key=value 进行拼接,示例:userName=dfdfdf&password=ggg
form-data: 此格式暂不支持。

如果存在多种数据形式,则按照 path、query、body 的顺序进行再拼接,得到所有数据的拼接值。

方法 method 示例:POST

路径 path 示例:/api/v1/orders

上述拼接值记作为 path

参数通过 query 示例:symbol=btc_usdt

上述值拼接记作 query

参数通过 body 示例:

x-www-form-urlencoded:
symbol=btc_usdt&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1
上述值拼接记作 body

json:
{"symbol":"btc_usdt","side":"BUY","type":"LIMIT","timeInForce":"GTC","quantity":2,"price":39000}
上述值拼接记作 body

混合使用 query 与 body(分为表单与 json 两种格式)

query:
symbol=btc_usdt&side=BUY&type=LIMIT
上述值拼接记作 query

body:
{"symbol":"btc_usdt","side":"BUY","type":"LIMIT"}
上述值拼接记作 body

整个数据最且拼接值由 # 符号分别与 method、path、query、body 进行拼接成 #method#path#query#body,最终拼接值记作为 Y=#method#path#query#body。注意:

query 有数据,body 无数据: Y=#method#path#query
query 无数据,body 有数据: Y=#method#path#body
query 有数据,body 有数据: Y=#method#path#query#body

2. 请求头部分

将 key 按照字母自然升序后,使用 & 方式拼接在一起,作为 X。如:

validate-algorithms=HmacSHA256&validate-appkey=ak_95e7762883a06dfc93ea479c08018afd&validate-recvwindow=5000&validate-timestamp=1641446237201. 生成签名

最终把需要进行加密的字符串,记作为 `original=XY`

最后将最终拼接值按照如下方法进行加密得到签名。

```text
signature=org.apache.commons.codec.digest.HmacUtils.hmacSha256Hex(secretkey, original);

将生成的签名 singature 放到请求头中,以 validate-signature 为 Key,以 singature 为值。

4. 样例

签名原始报文样例:

validate-algorithms=HmacSHA256&validate-appkey=ak_95e7762883a06dfc93ea479c08018afd&validate-recvwindow=60000&validate-timestamp=1666026215729#POST#/api/v1/orders#{"symbol":"BTC_USDT","side":"BUY","type":"LIMIT","timeInForce":"GTC","bizType":"SPOT","price":"0.1","quantity":"10"}

请求报文样例:

curl --location --request POST 'https://open-api.j2coin.com/api/v1/orders' \
--header 'accept: */*' \
--header 'Content-Type: application/json' \
--header 'validate-algorithms: HmacSHA256' \
--header 'validate-appkey: ak_95e7762883a06dfc93ea479c08018afd' \
--header 'validate-recvwindow: 60000' \
--header 'validate-timestamp: 1666026215729' \
--header 'validate-signature: 017097d75f9506e2c6e6a074dd5a5556d4aefa8def40a455fe1240a9cd4e5ae9' \
--data-raw '{"symbol":"BTC_USDT","side":"BUY","type":"LIMIT","timeInForce":"GTC","bizType":"SPOT","price":"0.1","quantity":"10"}'

注意事项:

注意检查 Content-Type、签名原始报文中的参数格式、请求报文中的参数格式