Binance(币安)作为全球领先的加密货币交易所,其提供的API(应用程序编程接口)为广大开发者、量化交易者和数据爱好者开启了自动化交易、数据分析和资产管理的新大门,本文将详细介绍怎样调用Binance接口,从环境准备、API创建到具体调用示例,助你快速上手。

前期准备:获取API Key与Secret

在调用任何Binance接口之前,你首先需要拥有自己的API凭证。

  1. 登录Binance账户:访问Binance官方网站并登录你的账户。
  2. 进入API管理页面:在账户设置中找到“API管理”或类似选项。
  3. 创建API
    • 点击“创建API”按钮。
    • 设置API标签:为你的API起一个易于识别的名称,我的交易机器人”。
    • 设置权限:Binance API权限分为“读取”和“交易”(通常包含读取和提币权限,提币权限需额外开启且风险极高)。
      • 仅读取:适用于获取市场数据、账户信息(余额)等,无法进行交易操作,相对安全。
      • 交易:除读取外,还可进行下单、取消订单等交易操作。请务必谨慎使用,并确保你的代码安全
    • IP白名单(可选但推荐):为了增强安全性,你可以设置允许访问该API的IP地址列表,如果你的应用只在特定服务器上运行,强烈建议开启此功能并填写对应IP。
    • 创建API:仔细阅读并同意相关风险提示后,点击创建。
  4. 保存API Key与Secret
    • 创建成功后,Binance会显示你的API KeySecret Key
    • 重要提示:Secret_key只会在创建时显示一次,请务必妥善保存在安全的地方,如同保险箱或密码管理器中,一旦丢失或泄露,你需要立即在API管理页面删除并重新创建。

选择合适的Binance API版本

Binance提供了多个API版本,主要包括:

  1. Binance API v1/v2:较早的版本,部分接口可能已废弃或不再推荐使用。
  2. Binance API v3 (推荐):目前主推的稳定版本,文档完善,功能全面,涵盖了现货、U本位合约、币本位合约等大部分接口。对于新项目,强烈建议使用v3版本
  3. Binance WebSocket API:提供实时数据推送,如市场深度、交易明细、账户信息变更等,适合需要低延迟实时数据的场景(如高频交易、实时监控)。

本文将主要围绕Binance API v3进行介绍。

理解API调用基本要素

调用Binance API通常需要以下几个关键要素:

  1. Endpoint(端点):API服务器的URL,对于v3 API,主网现货的Base URL通常是:
    • https://api.binance.com (生产环境)
    • https://testnet.binance.vision (测试网络,用于开发和测试,部分接口可用)
  2. Request Method(请求方法):Binance API主要使用GET和POST方法,GET通常用于查询数据,POST通常用于提交交易或修改操作。
  3. Parameters(参数):根据不同的接口,需要传递不同的参数,包括必填参数和可选参数,参数需要经过URL编码(对于GET请求)或放在请求体中(对于POST请求)。
  4. Signature(签名):这是保证API请求安全性的关键,你需要将所有请求参数(包括API Key)按照特定的规则拼接成字符串,然后使用你的Secret Key通过HMAC-SHA256算法进行加密,生成签名,服务器会使用相同的算法验证签名,以确保请求的合法性和完整性。

API签名生成步骤(以v3为例)

签名是API调用的核心安全机制,以下是生成签名的通用步骤:

  1. 参数准备:收集所有请求参数(不包括signature本身)。
  2. 参数排序:将所有参数按照参数名的字典序(ASCII码顺序)进行排序。
  3. 字符串拼接:将排序后的参数键值对用连接,然后用&连接起来,形成一个查询字符串。symbol=BTCUSDT&side=BUY&type=MARKET&quantity=0.001
  4. 添加API Key:将查询字符串与timestamp(当前时间戳,毫秒级)、recvWindow(可选,请求有效时间窗口,毫秒级,默认5000)以及你的apiKey拼接起来。symbol=BTCUSDT&side=BUY&type=MARKET&quantity=0.001×tamp=1625097600000&recvWindow=5000&apiKey=YOUR_API_KEY
  5. HMAC-SHA256加密:使用你的Secret Key对上述拼接好的字符串进行HMAC-SHA256加密,得到签名。
  6. 添加签名到请求:将生成的签名作为signature参数添加到请求中(对于GET请求,添加到URL查询字符串;对于POST请求,添加到请求体或URL查询字符串,取决于接口要求)。随机配图