You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构造携带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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:45:35