如何构造携带API Key的Binance API请求URL调用myTrades接口
无第三方封装调用Binance
/api/v3/myTrades 接口实现 核心鉴权规则
Binance 所有需要签名的私有接口(包括/api/v3/myTrades)必须遵循以下鉴权逻辑,无需依赖官方或第三方封装SDK:
- 请求头必须携带
X-MBX-APIKEY字段,值为你在Binance后台生成的API Key - 所有请求参数必须额外追加
timestamp字段,值为Unix毫秒级时间戳,和Binance服务器时间偏差不能超过5000ms,建议提前调用公开接口/api/v3/time同步服务器时间避免签名报错 - 把所有请求参数按参数名的字典序排序后,拼接成
key1=value1&key2=value2格式的待签名字符串 - 用你的API Secret作为密钥,对待签名字符串做HMAC SHA256运算,得到的十六进制结果作为
signature参数追加到请求参数末尾 - API Secret仅用于本地签名计算,不要作为参数传递到请求中
完整可运行代码示例
import requests import hmac import hashlib import time from urllib.parse import urlencode # 配置项 - 建议从环境变量读取,不要硬编码到代码中 API_KEY = "替换为你的API Key" API_SECRET = "替换为你的API Secret" BASE_URL = "https://api.binance.com" SYMBOL = "ETHUSDT" # 要查询的交易对 def get_binance_server_time(): """获取Binance服务器毫秒时间戳,避免本地时间偏差报错""" resp = requests.get(f"{BASE_URL}/api/v3/time").json() return resp["serverTime"] def get_all_my_trades(symbol): """拉取指定交易对的所有成交记录,自动处理分页""" all_trades = [] from_id = None limit = 1000 # 接口单次最大返回1000条 while True: # 构造公共请求参数 params = { "symbol": symbol, "limit": limit, "timestamp": get_binance_server_time(), # 可选参数:按时间范围筛选,格式和拉K线的时间参数一致 # "startTime": 1513375200000, # "endTime": 1656489800000, # "recvWindow": 5000 # 网络差时可配置,单位毫秒,最大不能超过60000 } if from_id: params["fromId"] = from_id # 构造待签名字符串:参数按key字典序排序后拼接 query_string = urlencode(sorted(params.items())) # 生成HMAC SHA256签名 signature = hmac.new( API_SECRET.encode("utf-8"), query_string.encode("utf-8"), hashlib.sha256 ).hexdigest() # 把签名追加到参数末尾 params["signature"] = signature # 构造请求头,携带API Key headers = { "X-MBX-APIKEY": API_KEY } # 发送请求 resp = requests.get( f"{BASE_URL}/api/v3/myTrades", params=params, headers=headers ) resp.raise_for_status() # 请求报错直接抛出异常 batch_trades = resp.json() if not batch_trades: break # 没有更多数据,退出循环 all_trades.extend(batch_trades) # 下一页从当前批次最早的一条记录ID往后取 from_id = batch_trades[-1]["id"] + 1 # 主动休眠避免触发限流,Binance现货该接口请求权重为10/次 time.sleep(0.2) return all_trades if __name__ == "__main__": trades = get_all_my_trades(SYMBOL) print(f"共获取到{len(trades)}条成交记录") # 打印前3条示例 for t in trades[:3]: print(t)
常见报错排查
- 返回错误码
-1021:本地时间戳和服务器偏差超过5秒,重新同步服务器时间即可 - 返回错误码
-2014/-2015:API Key格式错误、API Key没有开通对应交易品类的读取权限、请求IP不在API Key绑定的白名单内 - 返回错误码
-1003:请求频率过高触发限流,加大请求间隔即可 - 签名校验失败:检查待签名字符串是否包含多余参数、参数是否按字典序排序、签名计算时编码是否为utf-8
安全注意事项
- 永远不要把API Key和API Secret硬编码在公开可访问的代码、仓库中,建议通过环境变量、本地加密配置文件读取
- 生成API Key时遵循最小权限原则,仅开通必要的读取/交易权限,不要开通提币权限
- 务必给API Key绑定固定出口IP白名单,避免密钥泄露后资产损失
内容的提问来源于stack exchange,提问作者Olga
相关产品推荐
相关产品推荐

