2026-05-06bg等Python異步下單失敗報(bào)簽名錯誤的原因

今天用ai查出來了,錯誤原因是表單提交時
session.post(..., params=params)
換成
session.post(..., data=params)
下面是個完整的批量下單的demo,

import asyncio
import aiohttp
import hmac
import hashlib
import time
import json
from urllib.parse import urlencode

# ===================== 實(shí)盤配置 =====================
API_KEY = ""  # 替換為你的API Key
API_SECRET = ""  # 替換為你的API Secret
BASE_URL = "https://fapi.binance.com"  # U本位合約實(shí)盤
# ====================================================

def sign_params(secret, params):
    """生成幣安簽名"""
    query_str = urlencode(params)
    signature = hmac.new(
        secret.encode(),
        query_str.encode(),
        hashlib.sha256
    ).hexdigest()
    return signature

async def async_batch_place_order(orders):
    """異步批量下單"""
    if len(orders) > 5:
        return {"error": "最多一次下5單"}

    timestamp = int(time.time() * 1000)

    params = {
        "batchOrders": json.dumps(orders),  # 必須用json.dumps
        "timestamp": timestamp
    }

    params["signature"] = sign_params(API_SECRET, params)

    headers = {
        "X-MBX-APIKEY": API_KEY
    }

    try:
        async with aiohttp.ClientSession() as session:
            async with session.post(
                url=f"{BASE_URL}/fapi/v1/batchOrders",
                params=params,
                headers=headers,
                timeout=100
            ) as resp:
                return await resp.json()

    except Exception as e:
        return {"error": str(e)}

# ===================== 測試異步批量下單 =====================
if __name__ == "__main__":
    # 批量訂單(最多5個)
    order_list = [
        {
            "symbol": "BTCUSDT",
            "side": "BUY",
            "type": "LIMIT",
            "quantity": "0.001",
            "price": "65000",
            "timeInForce": "GTC",
            "positionSide": "LONG"
        },
        {
            "symbol": "ETHUSDT",
            "side": "BUY",
            "type": "LIMIT",
            "quantity": "0.01",
            "price": "2300",
            "timeInForce": "GTC",
            "positionSide": "LONG"
        }
    ]

    # 異步運(yùn)行
    result = asyncio.run(async_batch_place_order(order_list))
    print("異步下單結(jié)果:")
    print(result)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容