使用Binance Spot API下买单报错:symbol参数异常求助
问题解决:Binance API下单报错-1102的修复
核心错误原因
你代码里有两个关键问题导致报错:
- 参数传递方式错误:Binance下单接口要求POST参数放在请求体(
data字段)中,你却用params传递序列化后的JSON字符串,导致API无法解析到symbol参数。 - 缺少签名验证:Binance私有接口(如下单)必须对参数做HMAC-SHA256签名,否则即使参数传对也会被拒绝。
修正后的代码
import requests import time import hmac import hashlib API_KEY = "你的API密钥" SECRET_KEY = "你的密钥" ENDPOINT = "https://api.binance.com/api/v3/order" HEADERS = { "X-MBX-APIKEY": API_KEY } # 构造请求参数 PAYLOAD = { "symbol": "BTCUSDT", "side": "BUY", "type": "MARKET", "quantity": "0.1", "timestamp": int(time.time() * 1000) } # 生成签名:将参数拼接为URL查询字符串后用密钥加密 query_string = "&".join([f"{k}={v}" for k, v in PAYLOAD.items()]) signature = hmac.new(SECRET_KEY.encode('utf-8'), query_string.encode('utf-8'), hashlib.sha256).hexdigest() PAYLOAD["signature"] = signature # 用data字段传递参数,符合Binance API要求 response = requests.post(ENDPOINT, headers=HEADERS, data=PAYLOAD) if response.status_code != 200: print("下单失败:") print(response.json()) else: print("下单成功:") print(response.json())
关键修改说明
- 替换参数传递方式:把
params=json.dumps(PAYLOAD)改成data=PAYLOAD,requests会自动将字典转为表单格式,匹配Binance API的参数解析规则。 - 新增签名逻辑:按照Binance要求,将所有请求参数拼接为URL查询字符串,用SECRET_KEY做HMAC-SHA256加密,把加密结果作为
signature参数加入请求。
修改后你会收到预期的资金不足提示,验证接口逻辑正常。
内容的提问来源于stack exchange,提问作者Shiny
相关产品推荐
相关产品推荐

