币安现货API基础URL
从零开始:全面解析如何调用币安(Binance)API接口进行交易与数据获取
币安(Binance)作为全球领先的加密货币交易所,为用户提供了功能强大的API接口,通过调用这些接口,开发者可以自动化交易、获取市场数据、管理账户资产等,本文将详细介绍如何调用币安API接口,从准备工作到具体代码示例,助您快速上手。
准备工作:开启API并获取密钥
在开始调用API之前,您需要先在币安账户中创建API。
- 登录币安账户:访问币安官网并登录您的账户。
- 进入API管理页面:在账户安全设置中找到“API管理”选项。
- 创建API:
- 点击“创建API”按钮。
- 设置API标签:为您的API设置一个易于识别的标签,我的交易机器人”。
- 设置权限:这是非常重要的一步!根据您的需求选择API权限:
- 读取权限:仅允许获取账户信息、交易历史、市场数据等,不能进行交易。
- 交易权限:在读取权限基础上,允许进行现货交易。
- 期权限:允许进行期货交易(需额外开启)。
- 提币权限:极其危险!除非您完全清楚后果且绝对必要,否则不建议开启,开启后,API具有提币权限,可能导致资产损失。
- IP白名单(推荐):为了增强安全性,您可以设置允许访问该API的IP地址列表,只有来自这些IP的请求才会被接受,如果您是在本地开发,可以添加您的公网IP。
- 创建API:确认无误后,点击“创建API”。
- 保存API Key和Secret Key:
- 创建成功后,币安会显示您的API Key和Secret Key。
- 请务必妥善保管Secret Key,它就像您的密码一样,绝不要泄露给他人!
- 建议将API Key和Secret Key保存在安全的地方,例如环境变量或加密的配置文件中,不要直接硬编码在代码里。
理解币安API的基本架构与认证
币安API主要分为两大类:现货API和U本位合约API / 币本位合约API,它们的基础URL和认证方式略有不同,但核心原理一致。
-
基础URL:
- 币安现货API(测试网):
https://testnet.binance.vision(部分接口可用,具体参考官方文档) - 币安现货API(生产环境):
https://api.binance.com - 币安U本位合约API:
https://fapi.binance.com - 币安币本位合约API:
https://dapi.binance.com - 币安现货和合约的WebSocket API URL也不同,用于实时数据推送。
- 币安现货API(测试网):
-
认证机制: 币安API使用HMAC SHA256进行签名认证,大部分需要权限的接口(如账户信息、交易)都需要在请求头中添加认证信息。
X-MBX-APIKEY:您的API Key,用于标识身份。- 签名(Signature):将请求的参数(按ASCII码顺序排序后)与您的Secret Key进行拼接,然后使用HMAC SHA256算法生成密文,作为签名参数
signature添加到请求中。
调用币安API的步骤(以Python为例)
Python是调用API的常用语言,我们将使用requests库来演示。
安装必要的库
pip install requests
获取服务器时间(示例:公共接口)
公共接口不需要认证,可以获取市场数据等。
示例:获取服务器时间
import requests
import hashlib
import hmac
import time
import urllib.parse
BASE_URL = "https://api.binance.com"
def get_server_time():
url = f"{BASE_URL}/api/v3/time"
response = requests.get(url)
data = response.json()
if data['code'] == 0:
print(f"服务器时间: {data['serverTime']}")
else:
print(f"获取服务器时间失败: {data['msg']}")
get_server_time()
获取账户信息(示例:需要认证的接口)
这是需要API Key和签名的典型示例。
步骤:
a. 构建请求参数(包括timestamp,部分接口还需要recvWindow)。
b. 将所有参数(除了signature)按key的字典序排序,然后使用&连接成字符串。
c. 将上一步得到的字符串与您的Secret Key拼接,使用HMAC SHA256进行加密,得到签名。
d. 将签名作为signature参数添加到请求参数中。
e. 发送GET或POST请求,并在请求头中添加X-MBX-APIKEY。
示例:获取账户余额
API_KEY = 'YOUR_API_KEY'
SECRET_KEY = 'YOUR_SECRET_KEY'
def get_account_balance():
url = f"{BASE_URL}/api/v3/account"
# 1. 构建参数
params = {
'timestamp': int(time.time() * 1000), # 时间戳(毫秒)
'recvWindow': 5000 # 允许请求的时间窗口(毫秒),可选但推荐
}
# 2. 对参数进行URL编码并排序
query_string = urllib.parse.urlencode(params)
# 或者手动排序:sorted_params = '&'.join([f"{k}={params[k]}" for k in sorted(params.keys())])
# 3. 生成签名
signature = hmac.new(
SECRET_KEY.encode('utf-8'),
query_string.encode('utf-8'),
hashlib.sha256
).hexdigest()
# 4. 添加签名到参数
params['signature'] = signature
# 5. 发送请求
headers = {
'X-MBX-APIKEY': API_KEY
}
response = requests.get(url, params=params, headers=headers)
data = response.json()
if 'balances' in data:
print("账户余额:")
for balance in data['balances']:
if float(balance['free']) > 0 or float(balance['locked']) > 0:
print(f"{balance['asset']}: 可用 {balance['free']}, 锁定 {balance['locked']}")
else:
print(f"获取账户信息失败: {data.get('msg', '未知错误')}")
# 注意:首次调用前请确保API Key有读取权限
# get_account_balance()
下单交易(示例:需要交易权限的接口)
下单同样需要认证,并且通常需要POST请求。
示例:限价买单(现货)
def place_limit_order(symbol, quantity, price):
url = f"{BASE_URL}/api/v3/order"
params = {
'symbol': symbol,
'side': 'BUY', # BUY 或 SELL
'type': 'LIMIT', # MARKET, LIMIT, STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT
'timeInForce': 'GTC', # GTC (Good Till Canceled), IOC (Immediate or Cancel), FOK (Fill or Kill)
'quantity': quantity,
'price': price,
'timestamp': int(time.time() * 1000),
'recvWindow': 5000
}
query_string = urllib.parse.urlencode(params)
signature = hmac.new(
SECRET_KEY.encode('utf-8'),
query_string.encode('utf-8'),
hashlib.sha256
).hexdigest()
params['signature'] = signature
headers = {
'X-MBX-APIKEY': API_KEY
}
response = requests.post(url, params=params, headers=headers)
data = response.json()
if data.get('orderId'):
print(f"下单成功!订单ID: {data['orderId']}")
else:
print(f"下单失败: {data.get('msg', '未知错误')}")
# 注意:此API需要交易权限,并且确保账户有足够余额和交易对存在
# place_limit_order('BTCUSDT', 0.001, 30000) # 示例:买入0.001 BTCUSDT,价格30000 USDT
常见问题与注意事项
- 错误处理:始终检查API响应中的
code和msg字段,处理可能出现的错误(如参数错误、权限不足、频率限制等)。 - 频率限制(Rate Limit):币安API有调用频率限制,超出限制会被暂时封禁,请合理