本篇列出REST接口的baseurl https://openapi.xxx.com
所有接口都会返回一个JSON object或者array.
响应中如有数组,数组元素以时间倒序排列,越早的数据越提前.
所有时间、时间戳均为UNIX时间,单位为毫秒.
HTTP 4XX
错误码用于指示错误的请求内容、行为、格式.
HTTP 429
错误码表示警告访问频次超限,即将被封IP.
HTTP 418
表示收到429后继续访问,于是被封了.
HTTP 5XX
返回错误码是内部系统错误;这说明这个问题是在服务器这边。在对待这个错误时,千万 不要把它当成一个失败的任务,因为执行状态 未知,有可能是成功也有可能是失败.
HTTP 504
表示API服务端已经向业务核心提交了请求但未能获取响应,特别需要注意的是504
代码不代表请求失败,而是未知。很可能已经得到了执行,也有可能执行失败,需要做进一步确认.
任何接口都可能返回ERROR(错误); 错误的返回payload如下:
{"code": -1121,"msg": "Invalid symbol."}
所有请求基于Https协议,请求头信息中Content-Type
需要统一设置为: 'application/json'
GET
方法的接口, 参数必须在query string
中发送.
POST
方法的接口, 参数必须在request body
中发送
对参数的顺序不做要求。
在每个接口下面会有限频的说明.
违反频率限制都会收到HTTP 429,这是一个警告.
当收到429告警时,调用者应当降低访问频率或者停止访问.
每个接口都有自己的鉴权类型,鉴权类型决定了访问时应当进行何种鉴权
如果需要 API-key,应当在HTTP头中以X-CH-APIKEY
字段传递
API-key 与 API-secret 是大小写敏感的
可以在网页用户中心修改API-key 所具有的权限,例如读取账户信息、发送交易指令、发送提现指令
鉴权类型 | 描述 |
NONE | 不需要鉴权的接口 |
TRADE | 需要有效的API-KEY和签名 |
USER_DATA | 需要有效的API-KEY和签名 |
USER_STREAM | 需要有效的API-KEY |
MARKET_DATA | 需要有效的API-KEY |
调用TRADE
或者USER_DATA
接口时,应当在HTTP头中以X-CH-SIGN
字段传递签名参数.
签名使用HMAC SHA256
算法. API-KEY所对应的API-Secret作为 HMAC SHA256
的密钥.
X-CH-SIGN
的请求头是以timestamp + method + requestPath + body字符串(+表示字符串连接)作为操作对象
其中timestamp的值与X-CH-TS
请求头相同, method是请求方法,字母全部大写:GET/POST.
requestPath是请求接口路径 例如:/sapi/v1/order?orderId=211222334&symbol=BTCUSDT
body
是请求主体的字符串(post only) 如果是GET
请求则body
可省略
签名大小写不敏感。
签名接口均需要在HTTP头中以X-CH-TS
字段传递时间戳, 其值应当是请求发送时刻的unix时间戳(毫秒) e.g. 1528394129373
服务器收到请求时会判断请求中的时间戳,如果是5000毫秒之前发出的,则请求会被认为无效。这个时间窗口值可以通过发送可选参数recvWindow
来自定义。
另外,如果服务器计算得出客户端时间戳在服务器时间的‘未来’一秒以上,也会拒绝请求。
逻辑伪代码:
if (timestamp < (serverTime + 1000) && (serverTime - timestamp) <= recvWindow) {// process request} else {// reject request}
关于交易时效性 互联网状况并不100%可靠,不可完全依赖,因此你的程序本地到交易所服务器的时延会有抖动. 这是我们设置recvWindow
的目的所在,如果你从事高频交易,对交易时效性有较高的要求,可以灵活设置recvWindow
以达到你的要求。 不推荐使用5秒以上的recvWindow
以下是在linux bash环境下使用 echo openssl 和curl工具实现的一个调用接口下单的示例 apikey、secret仅供示范
Key | Value |
apiKey | vmPUZE6mv9SD5V5e14y7Ju91duEh8A |
secretKey | 902ae3cb34ecee2779aa4d3e1d226686 |
参数 | 取值 |
symbol | BTCUSDT |
side | BUY |
type | LIMIT |
volume | 1 |
price | 9300 |
body:
{"symbol":"BTCUSDT","price":"9300","volume":"1","side":"BUY","type":"LIMIT"}
HMAC SHA256 签名:
[linux]$ echo -n "1588591856950POST/sapi/v1/order/test{\"symbol\":\"BTCUSDT\",\"price\":\"9300\",\"volume\":\"1\",\"side\":\"BUY\",\"type\":\"LIMIT\"}" | openssl dgst -sha256 -hmac "902ae3cb34ecee2779aa4d3e1d226686"(stdin)= c50d0a74bb9427a9a03933d0eded03af9bf50115dc5b706882a4fcf07a26b761
curl 调用:
(HMAC SHA256)[linux]$ curl -H "X-CH-APIKEY: c3b165fd5218cdd2c2874c65da468b1e" -H "X-CH-SIGN: c50d0a74bb9427a9a03933d0eded03af9bf50115dc5b706882a4fcf07a26b761" -H "X-CH-TS: 1588591856950" -H "Content-Type:application/json" -X POST 'http://localhost:30000/sapi/v1/order/test' -d '{"symbol":"BTCUSDT","price":"9300","quantity":"1","side":"BUY","type":"LIMIT"}'