先想清楚:你要用接口做什么

在动手申请之前,先明确用途。只读取行情和账户余额,与要下单交易,所需权限完全不同。用途决定权限,权限决定风险边界。常见的三类需求是:行情数据采集、账户资产监控、程序化交易。第三类风险最高,配置时务必单独建子账户,与主账户隔离。

申请API密钥与权限配置

登录后在账户的API管理页面创建密钥,你会得到一组 API Key 和 Secret Key。Secret Key 只在创建时显示一次,务必立即保存到密码管理器或密钥管理服务中。权限勾选遵循最小必要原则:只读需求就只勾“读取”;需要下单再勾“现货交易”,并视情况开启“允许现货划转”。IP白名单强烈建议开启,绑定固定的服务器出口IP,即使密钥泄露,攻击者也无法从其他地址调用。

很多新手会把提现权限一并打开,这是最危险的操作。币安交易所API接口本身不提供提现的二次确认,一旦密钥泄露,资产可能在几分钟内被转走。

REST 与 WebSocket:怎么选

  • REST:适合下单、查询订单、查询账户、获取K线快照等一次性请求。请求-响应模式,逻辑简单,但高频轮询会迅速触碰限频。
  • WebSocket:适合实时行情(逐笔成交、深度增量、K线推送)和用户数据流(订单状态变化、余额变动)。长连接推送,延迟低,几乎不消耗请求权重。

实践中的组合是:用 WebSocket 订阅行情和账户事件,用 REST 做交易指令和状态补偿查询。不要用 REST 每秒轮询深度,那是最容易被限频的写法。

签名机制:最容易出错的一环

私有接口需要在请求头带上 API Key,并对参数做 HMAC SHA256 签名。几个高频错误点:

  • 参数必须按字典序拼接成 key=value&key=value 的形式,顺序错则签名错。
  • timestamp 与服务器时间偏差过大(通常超过1秒)会被拒绝,服务器需开启 NTP 时间同步。
  • recvWindow 可适当放宽,但不要设置得过大,会削弱防重放效果。
  • 签名针对的是原始字符串,不要在拼接过程中做 URL 编码,编码应在签名之后进行。

建议先用官方提供的测试网(Spot Testnet)跑通完整链路,包括签名、下单、撤单、查询,再切到实盘。测试网的密钥与实盘不通用,需要单独申请。

限频、权重与错误码

币安交易所API接口对每个端点定义了权重,按分钟累计。返回头里会带当前已用权重,程序应当读取并做退避。收到 429 或 418 说明已经触发限频甚至被封禁,正确做法是立刻停止请求并等待指定秒数,而不是重试。错误码方面,-1021 表示时间戳偏差,-2015 多为密钥、权限或IP白名单问题,-1013 通常是下单数量不符合交易对的步进精度。下单前先查交易规则接口,拿到 stepSize 和 tickSize 再做数值截断,可以避免大量无效请求。

安全与工程实践

  • 密钥不要写进代码仓库,用环境变量或密钥管理服务注入。
  • 生产环境与测试环境使用不同密钥,权限分开。
  • 下单逻辑加入幂等设计,用 newClientOrderId 自定义订单号,网络超时后先查单再决定是否重发。
  • 记录完整的请求日志(脱敏后),便于事后排查。
  • WebSocket 断线要自动重连,并主动拉取一次 REST 快照做状态对齐,避免增量丢失。

把这几件事做到位,币安交易所API接口的对接基本不会踩大坑。剩下的就是业务逻辑本身:策略、风控、资金管理,那才是真正决定成败的部分。