常见问题
请求接口的timestamp参数和到达服务器时间最大差值是多少?
服务器收到请求时会判断请求中的时间戳,如果是5000毫秒之前发出的,则请求会被认为无效。这个时间窗口值可以通过发送可选参数recvWindow来自定义。
请求头"X-CH-TS"不能为空 如何解决?
首先建议用户打印一下X-CH-TS,出现异常时检查X-CH-TS是否为空,另外建议用户代码优化,每次请求前先判断X-CH-TS是否为空。
为什么签名认证总返回无效的签名?
按下列顺序逐项排查,90% 以上的签名问题来自第 1、2 条:
requestPath错带了网关前缀。完整 URL 是https://openapi.bitbaby.com/futures/open/fapi/v1/openOrders,但签名只能用/fapi/v1/openOrders,不要把/futures/open或/spot/open写进 PreHash。现货的/sapi/...同理。- POST 时 body 被序列化两次。一种典型错误:先
json.dumps(obj)出字符串去签名,然后 HTTP 请求又传json=obj,requests 会再json.dumps一次,导致字段顺序、空格变化,签名校验失败。请坚持「序列化一次 → 用同一字符串签名 → 用同一字符串当 body 发送」。 - GET 与 POST 的 PreHash 拼装方式不同:
GET:timestamp + GET + requestPath + (?queryString)?,不带 body。POST:timestamp + POST + requestPath + (?queryString)? + body,body 为请求体原始字符串。?由公式拼接,queryString自身不要含开头的?。
X-CH-TS与 PreHash 中的timestamp必须完全相同(都是 13 位毫秒字符串)。- API-Key / API-Secret 大小写敏感,且不要包含两端空格。
Content-Type必须为application/json,否则可能直接返回-1017 ILLEGAL_CONTENT_TYPE。- 服务器与客户端时间偏差超过 ±5s 也会被网关拒绝。可以先调用
/sapi/v1/time或/fapi/v1/time查看serverTime,然后调整本地时钟或在请求中传recvWindow(POST 写在 body 中,GET 写在 query 中)。
排查时建议在客户端 打印 出三样东西,与抓包对比:
- 实际发送的 HTTP method、URL、Headers、Body
- 你计算签名时所用的 PreHash 字符串
- 你计算出的
X-CH-SIGN
PreHash 示例(与 基本信息 完全一致):
text
GET 示例: 1588591856950GET/sapi/v1/openOrders?symbol=BTCUSDT&limit=10
POST 示例: 1588591856950POST/sapi/v1/order/test{"symbol":"BTCUSDT","price":"9300","volume":"1","side":"BUY","type":"LIMIT"}请求头示例:
bash
Content-Type: application/json
X-CH-APIKEY: 44c541a1-****-****-****-10fe390df2
X-CH-TS: 1574327555669
X-CH-SIGN: c50d0a74bb9427a9a03933d0eded03af9bf50115dc5b706882a4fcf07a26b761调用接口提示ILLEGAL_CONTENT_TYPE (-1017),是什么原因?
我们建议在所有的请求头附加Content-Type, 并设置成application/json
API每秒调用频率有限制吗?
有限制,具体可以看下文档中每个接口的访问频率限制。
API的访问频率是根据什么限制的?
个人数据是根据API-key限制的,公共数据是根据ip限制,需要注意的是,若用户请求公共数据时传入有效的个人信息就根据API-key限制。
HTTP状态码429是怎样造成的?
请求接口超过访问频率限制,建议降低访问频率。
API调用接口报超过访问频率会被封IP吗?封多久?
通常情况下不会的,降低访问频率就可以。
为什么WebSocker出现了断开连接?
- 未添加心跳,WebSocket连接需客户端需要回pong,保证连接的稳定。
- 网络原因造成客户端发送的pong消息,但服务端并未接收到,或其他网络原因也会导致自动断开连接。
- 建议用户做好WebSocket断开重连机制,在确保心跳(ping/pong)连接意外断开时,程序能够自动重新进行连接。
用户请求接口报错Time Out?
网络无法连接服务器,建议您检查下网络是否通畅。
如何拿到平台所有的币对
币币的 /sapi/v1/symbols 接口可以拿到
批量下单/撤单有条数限制吗?
是的, 批量接口会限制10条订单
newClientOrderId是什么, 有什么作用?
- newClientOrderId是您自定义的订单号,可以用来标识您的一笔订单,当下单完成后,可以使newClientOrderId调用 “订单信息“接口,查看订单状态;
- 用户需要自己保证此ID不重复,我方不会进行排重提示,如有重复,撤单和查询订单时只能撤销或者查询最新的一条数据
如何获取最新成交价格?
可以通过获取ticker信息, last就是最新成交价
ticker接口中的24小时成交量会出现负增长吗?
会的。因为24小时成交量,为24小时滚动数据(平移窗口大小24小时),有可能会出现后一个窗口内的累计成交量、累计成交额小于前一窗口的情况。