API KEY 接口认证
为了方便接入,我们提供了一些语言的SDK供参考
本章节主要为验证的细节分以下四个方面:
- 生成API Key
- 发起请求
- 签名
- 时间戳
1.生成API Key
在对任何请求进行签名之前,您必须通过BitMart网站创建一个API Key。创建API Key后,您将获得3个必须记住的信息:
- Access Key
- Secret Key
- Memo
Access Key和Secret Key将由BitMart随机生成和提供,Memo将由您提供以确保API访问的安全性。BitMart将存储Secret Key加密后的哈希值进行验证,但如果您忘记Secret Key,则无法恢复,请您通过BitMart网站重新生成新的API Key。
示例
登录 Bitmart网站, 进入账户页面
点击 API 设置 按钮,进入创建API 页面
2.发起请求
请求包含两个部分,一个是header,一个是queryString
接口头部参数
所有REST请求头都必须包含以下内容:
X-BM-KEY字符串类型的Access Key。
X-BM-SIGN使用Sha-256签名(请参阅签名)。
X-BM-TIMESTAMP发起请求的时间戳。(UTC0时区时间戳精确到毫秒)
接口内容参数
- GET 和 DELETE 方法的接口, 内容形式可以是application/json, 也可以是application/x-www-form-urlencoded, 参数必须在 query string中发送。(对参数的顺序不做要求。)
curl {{host}}/v1/goto?symbol=BMXBTC&side=BUY
# queryString: symbol=BMXBTC&side=BUY
- POST, PUT 方法的接口, 参数可以在内容形式为application/json 的 query string 中发送。 (对参数的顺序不做要求。)
curl -X POST {{host}}/v1/goto -H "Content-type: application/json" -d '{"symbol":"BMX","side":"BUY"}'
# queryString: {"symbol":"BMX","side":"BUY"}
3.签名
X-BM-SIGN的请求头是对timestamp + "#" + memo + "#" + queryString,以及Secret Key,使用HMAC SHA256方法加密得到的。
例如:sign=CryptoJS.HmacSHA256(timestamp + "#" + memo + "#" + queryString, Secret Key)
其中,timestamp的值与 X-BM-TIMESTAMP 请求头相同。
4.时间戳
发起请求的时间戳。(UTC0时区Unix时间戳精确到毫秒) 如果当前时间: 2020-04-28 09:21:30.000,那么 timestamp=1588065690000
示例
申请后获取到的key如下:注意,下面2个接口是部署在生产环境的,用户替换成自己的KEY后可以直接测试调用。
Key | Value |
---|---|
accessKey | 80618e45710812162b04892c7ee5ead4a3cc3e56 |
secretKey | 6c6c98544461bbe71db2bca4c6d7fd0021e0ba9efc215f9c6ad41852df9d9df9 |
memo | test001 |
请求目标接口: /spot/v1/test-get
请求方式: GET
假设当前时间戳:timestamp=1589793795969
参数 | 取值 |
---|---|
symbol | BTC_USDT |
返回: 返回内容里code == 1000 表示调用成功
{"message":"OK","code":1000,"trace":"17105b32-cc5b-406a-ab6e-6d9ed0fa4fd8","data":{}}
这里演示 curl 如何调用
echo -n "1589793795969#test001#symbol=BTC_USDT" | openssl dgst -sha256 -hmac "6c6c98544461bbe71db2bca4c6d7fd0021e0ba9efc215f9c6ad41852df9d9df9"
(stdin)= 118eb558afa7d84e8710004f8416ddb771f50718c85f60a45069d0ccbe6ee1e0
curl --location --request GET 'localhost:8080/spot/v1/test-get?symbol=BTC_USDT'
--header 'Content-Type: application/json'
--header 'X-BM-KEY: 80618e45710812162b04892c7ee5ead4a3cc3e56'
--header 'X-BM-SIDN: 118eb558afa7d84e8710004f8416ddb771f50718c85f60a45069d0ccbe6ee1e0'
--header 'X-BM-TIMESTAMP: 1589793795969'
请求目标接口: /spot/v1/test-post
请求方式: POST
假设当前时间戳:timestamp=1589793796145
参数 | 取值 |
---|---|
symbol | BTC_USDT |
price | 8600 |
count | 100 |
返回: 返回内容里code == 1000 表示调用成功
{"message":"OK","code":1000,"trace":"17105b32-cc5b-406a-ab6e-6d9ed0fa4fd8","data":{}}
这里演示 curl 如何调用
echo -n '1589793796145#test001#{"symbol":"BTC_USDT","price":"8600","count":"100"}' | openssl dgst -sha256 -hmac "6c6c98544461bbe71db2bca4c6d7fd0021e0ba9efc215f9c6ad41852df9d9df9"
(stdin)= c31dc326bf87f38bfb49a3f8494961abfa291bd549d0d98d9578e87516cee46d
curl --location --request POST 'localhost:8080/spot/v1/test-post'
--header 'Content-Type: application/json'
--header 'X-BM-KEY: 80618e45710812162b04892c7ee5ead4a3cc3e56'
--header 'X-BM-SIDN: c31dc326bf87f38bfb49a3f8494961abfa291bd549d0d98d9578e87516cee46d'
--header 'X-BM-TIMESTAMP: 1589793796145'
--d '{"symbol":"BTC_USDT","price":"8600","count":"100"}'