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

Fiddler中使用C#调用Binance API提交订单返回Bad Request求助

Binance Fiddler脚本发送订单返回bad request排查方案

优先级最高的错误排查点

  • 签名内容错误:你用于HMAC签名的字符串末尾多了&signature=后缀,币安要求仅对除signature参数外的所有查询/请求体参数拼接后签名,多余的后缀会导致签名校验失败直接返回400。
  • 参数位置错误:币安合约fapi/v1/order私有接口的POST请求要求参数放在请求体中,你当前将所有参数拼接在URL查询串中,不符合接口规范,会直接被拦截返回400。
  • 缺失API Key请求头:所有币安私有接口必须在请求头中携带X-MBX-APIKEY字段,值为你的API公钥,未携带该头会直接返回权限类400错误。
  • 参数提取逻辑脆弱:你硬编码查找BTC作为symbol结束标识、硬编码查找&price作为quantity结束标识,一旦原始请求的交易对后缀不是BTC、参数顺序发生变化,会直接提取到错误参数甚至抛出异常,导致请求内容异常。
  • 浮点数精度问题:使用float类型存储数量、价格,转字符串时极易出现科学计数法、多余小数位,不符合币安对应交易对的步长精度要求,会返回参数格式错误。
  • 重复请求问题:你修改了原始session的host、url后又调用SendRequest,会同时发送修改后的原始请求+新请求,两笔请求都会发到币安,大概率触发参数重复错误。

核心代码修正示例

public static void OnBeforeResponse(Session oSession)
{
    if (oSession.HTTPMethodIs("POST") && oSession.uriContains("order"))
    {
        try
        {
            String strBody = oSession.GetRequestBodyAsString();
            // 改用键值对解析参数,避免硬编码查找报错
            var paramDict = System.Web.HttpUtility.ParseQueryString(strBody);
            
            string baseSymbol = paramDict["symbol"].Replace("BTC", "");
            float quantity = float.Parse(paramDict["quantity"], System.Globalization.CultureInfo.InvariantCulture) * 2;
            // 根据交易对要求调整数量精度,比如U本位合约多数交易对数量保留3位小数
            quantity = (float)Math.Round(quantity, 3);
            
            long timestamp = (long)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;

            string apiPublicKey = "你的币安API公钥";
            string secretKey = "lfaeGkjitNwvyG2lqDueMhSAOzRFlzL73w5pKRCAvSy7YrxyTkvwKCcHBHj...";
            
            // 构建待签名参数,不包含signature字段
            string signSource = $"symbol={baseSymbol}USDT&side=BUY&type=MARKET&quantity={quantity.ToString(System.Globalization.CultureInfo.InvariantCulture)}&recvWindow=5000&timestamp={timestamp}";
            
            // 生成签名,币安要求签名为小写十六进制
            Encoding ascii = Encoding.ASCII;
            HMACSHA256 hmac = new HMACSHA256(ascii.GetBytes(secretKey));
            string signature = BitConverter.ToString(hmac.ComputeHash(ascii.GetBytes(signSource))).Replace("-", "").ToLower();
            
            // 构建最终请求体
            string finalBody = $"{signSource}&signature={signature}";
            byte[] bodyBytes = ascii.GetBytes(finalBody);
            
            // 新建独立请求头,避免原始请求头的干扰字段
            HTTPHeaders newHeaders = new HTTPHeaders();
            newHeaders.Add("X-MBX-APIKEY", apiPublicKey);
            newHeaders.Add("Content-Type", "application/x-www-form-urlencoded");
            newHeaders.Add("Host", "fapi.binance.com");
            
            // 仅发送新请求,不修改原始session的内容
            FiddlerApplication.oProxy.SendRequest("POST", "https://fapi.binance.com/fapi/v1/order", newHeaders, bodyBytes, null);
        }
        catch (Exception ex)
        {
            // 输出错误日志到Fiddler日志面板方便排查
            FiddlerApplication.Log.LogString("发送开仓请求失败:" + ex.Message);
        }
    }
}

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:15:03