通用基本信息

通用API信息

  • 有些端点需要Key和Secret才能访问。请访问这里来获取指导您在用户中心里生成。

  • 所有的端点都会返回一个JSON object或者array.

  • 数据返回的是一个 升序。更早的在前,更新的在后。

  • 所有的时间/时间戳有关的变量都是milliseconds(毫秒级)。

端点信息

名称

基本端点

rest-api

https://api.wenxpro.com

web-socket-streams

wss://wsapi.wenxpro.com

user-data-stream

wss://wsapi.wenxpro.com

HTTP返回错误码

  • 所有的端点都会返回一个JSON object或者array.

  • 数据返回的是一个 升序。更早的在前,更新的在后。

  • 所有的时间/时间戳有关的变量都是milliseconds(毫秒级)。

  • HTTP 4XX 返回错误码是指请求内容有误,这个问题是在请求发起者这边。

  • HTTP 429 返回错误码是指请求次数上限被打破。

  • HTTP 418 返回错误码是指IP在收到429错误码后还继续发送请求被自动封禁。

  • HTTP 5XX 返回错误码是内部系统错误;这说明这个问题是在券商这边。在对待这个错误时,千万 不要把它当成一个失败的任务,因为执行状态 未知,有可能是成功也有可能是失败。

  • 任何端点都可能返回ERROR(错误); 错误的返回payload如下

{
  "code": -1121,
  "msg": "Invalid symbol."
}
  • Specific error codes and messages defined in another page.

端点通用信息

  • 对于GET端点,必须发送参数为query string(查询字串)。

  • 对于POST, PUT, 和 DELETE 端点,必需要发送参数为query string(查询字串)或者发送参数在request body(请求主体)并设置content type(内容类型)为application/x-www-form-urlencoded。可以同时在query string或者request body里混合发送参数如果有需要的话。

  • 参数可以以任意顺序发送。

  • 如果有参数同时在query stringrequest body里存在,只有query string的参数会被使用。

限制

  • /openapi/v1/brokerInforateLimits array里存在当前broker的REQUEST_WEIGHTORDER频率限制。

  • 如果任一频率限额被超过,429 会被返回。

  • 每条线路有一个weight特性,这个决定了这个请求占用多少容量(比如weight=2说明这个请求占用两个请求的量)。返回数据多的端点或者在多个symbol执行任务的端点可能有更高的weight

  • 429被返回后,你有义务停止发送请求。

  • 多次反复违反频率限制和/或者没有在收到429后停止发送请求的用户将会被收到封禁IP(错误码418)

  • IP封禁会被跟踪和 调整封禁时长(对于反复违反规定的用户,时间从 2分钟到3天不等

频率限制

端点安全类型

  • 每个端点有一个安全类型,这决定了你会怎么跟其交互。

  • API-key要以X-BH-APIKEY的名字传到REST API header里面。

  • API-keys和secret-keys 要区分大小写

  • 默认情况下,API-keys可以访问所有的安全节点。

  • TRADEUSER_DATA 端点是 SIGNED(需要签名)的端点。

安全类型

描述

NONE

端点可以自由访问。

TRADE

端点需要发送有效的API-Key和签名。

USER_DATA

端点需要发送有效的API-Key和签名。

USER_STREAM

端点需要发送有效的API-Key。

MARKET_DATA

端点需要发送有效的API-Key。

SIGNED(有签名的)(TRADE和USER_DATA) 端点安全

  • SIGNED(需要签名)的端点需要发送一个参数,signature,在query string 或者 request body里。

  • 端点用HMAC SHA256签名。HMAC SHA256 signature是一个对key进行HMAC SHA256加密的结果。用你的secretKey作为key和totalParams作为value来完成这一加密过程。

  • signature 不区分大小写

  • totalParams 是指 query string串联request body

时效安全

  • 一个SIGNED(有签名)的端点还需要发送一个参数,timestamp,这是当请求发起时的毫秒级时间戳。

  • 一个额外的参数(非强制性), recvWindow, 可以说明这个请求在多少毫秒内是有效的。如果recvWindow没有被发送,默认值是5000

  • 在当前,只有创建订单的时候才会用到recvWindow

  • 该参数的逻辑如下:

if (timestamp < (serverTime + 1000) && (serverTime - timestamp) <= recvWindow) {
  // process request
} else {
  // reject request
}

严谨的交易和时效紧紧相关 网络有时会不稳定或者不可靠,这会导致请求发送服务器的时间不一致。 有了recvWindow,你可以说明在多少毫秒内请求是有效的,否则就会被服务器拒绝。

建议使用一个相对小的recvWindow(5000或以下)!

SIGNED(签名) 的例子(对于POST /openapi/v1/order)

这里有一个详细的用Linuxecho, openssl, 和 curl举例来展示如何发送一个有效的签名payload。

参数名

参数值

symbol

ETHBTC

side

BUY

type

LIMIT

timeInForce

GTC

quantity

1

price

0.1

recvWindow

5000

timestamp

1538323200000

Key

apiKey

tAQfOrPIZAhym0qHISRt8EFvxPemdBm5j5WMlkm3Ke9aFp0EGWC2CGM8GHV4kCYW

secretKey

lH3ELTNiFxCQTmi9pPcWWikhsjO04Yoqw3euoHUuOLC3GYBW64ZqzQsiOEHXQS76

例子 1: 在queryString里

queryString: symbol=ETHBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000&timestamp=1538323200000

  • HMAC SHA256 signature:

[linux]$ echo -n "symbol=ETHBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000&timestamp=1538323200000" | openssl dgst -sha256 -hmac "lH3ELTNiFxCQTmi9pPcWWikhsjO04Yoqw3euoHUuOLC3GYBW64ZqzQsiOEHXQS76"
(stdin)= 5f2750ad7589d1d40757a55342e621a44037dad23b5128cc70e18ec1d1c3f4c6
  • CURL command:

(HMAC SHA256)
[linux]$ curl -H "X-BH-APIKEY: tAQfOrPIZAhym0qHISRt8EFvxPemdBm5j5WMlkm3Ke9aFp0EGWC2CGM8GHV4kCYW" -X POST 'https://$HOST/openapi/v1/order?symbol=ETHBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000&timestamp=1538323200000&signature=5f2750ad7589d1d40757a55342e621a44037dad23b5128cc70e18ec1d1c3f4c6'

例子 2: 在request body里

  • requestBody: symbol=ETHBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000&timestamp=1538323200000

  • HMAC SHA256 signature:

[linux]$ echo -n "symbol=ETHBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000&timestamp=1538323200000" | openssl dgst -sha256 -hmac "lH3ELTNiFxCQTmi9pPcWWikhsjO04Yoqw3euoHUuOLC3GYBW64ZqzQsiOEHXQS76"
(stdin)= 5f2750ad7589d1d40757a55342e621a44037dad23b5128cc70e18ec1d1c3f4c6

CURL command:

(HMAC SHA256)
[linux]$ curl -H "X-BH-APIKEY: tAQfOrPIZAhym0qHISRt8EFvxPemdBm5j5WMlkm3Ke9aFp0EGWC2CGM8GHV4kCYW" -X POST 'https://$HOST/openapi/v1/order' -d 'symbol=ETHBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000&timestamp=1538323200000&signature=5f2750ad7589d1d40757a55342e621a44037dad23b5128cc70e18ec1d1c3f4c6'

例子 3: queryString和request body混合在一起

  • queryString: symbol=ETHBTC&side=BUY&type=LIMIT&timeInForce=GTC

  • requestBody: quantity=1&price=0.1&recvWindow=5000&timestamp=1538323200000

  • HMAC SHA256 signature:

[linux]$ echo -n "symbol=ETHBTC&side=BUY&type=LIMIT&timeInForce=GTCquantity=1&price=0.1&recvWindow=5000&timestamp=1538323200000" | openssl dgst -sha256 -hmac "lH3ELTNiFxCQTmi9pPcWWikhsjO04Yoqw3euoHUuOLC3GYBW64ZqzQsiOEHXQS76"
(stdin)= 885c9e3dd89ccd13408b25e6d54c2330703759d7494bea6dd5a3d1fd16ba3afa
  • CURL command:

(HMAC SHA256)
[linux]$ curl -H "X-BH-APIKEY: tAQfOrPIZAhym0qHISRt8EFvxPemdBm5j5WMlkm3Ke9aFp0EGWC2CGM8GHV4kCYW" -X POST 'https://$HOST/openapi/v1/order?symbol=ETHBTC&side=BUY&type=LIMIT&timeInForce=GTC' -d 'quantity=1&price=0.1&recvWindow=5000&timestamp=1538323200000&signature=885c9e3dd89ccd13408b25e6d54c2330703759d7494bea6dd5a3d1fd16ba3afa'

注意在例子3里有一点不一样,"GTC"和"quantity=1"之间没有&

最后更新于

这有帮助吗?