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

调用Binance API遇1101错误:Symbol参数值重复排查求助

问题排查:Binance API调用出现"Duplicate values for parameter 'symbol'"错误

调用Binance的/api/v3/order/test接口时收到错误响应:

{"code":-1101,"msg":"Duplicate values for parameter 'symbol'."}

但代码中symbol参数既不是数组也没有重复值,相关代码如下:

$apiKey = '';
$apiSecret = '';

$url = 'https://api.binance.com/api/v3/order/test';
$data = [
    'symbol' => 'BTCUSDT',
    'side' => self::SIDE_BUY,
    'type' => 'MARKET',
    'quantity' => 0.01,
];
$timestamp = time()*1000; //get current timestamp in milliseconds

$query_str = [];
$query_str = $data;
$query_str['timestamp'] = $timestamp;
$query_str = http_build_query($query_str);
$signature = hash_hmac('sha256', $query_str, $apiSecret);
$query_str .= "&signature=" . $signature;

//Decide content type
$content_type = ["Content-Type: application/x-www-form-urlencoded","X-MBX-APIKEY: ".$apiKey];

// Final url
$url .= '?' . $query_str;

$ch = @curl_init();
@curl_setopt($ch, CURLOPT_HEADER, false);
@curl_setopt($ch, CURLOPT_URL, $url);
@curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
@curl_setopt($ch, CURLOPT_HTTPHEADER, $content_type);
@curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
@curl_setopt($ch, CURLOPT_TIMEOUT, 10);
@curl_setopt($ch, CURLOPT_POSTFIELDS, $query_str);

$response = @curl_exec($ch);
$http_code = @curl_getinfo($ch, CURLINFO_HTTP_CODE);
@curl_close($ch);

问题原因

你代码里的核心错误是同时在URL查询参数和POST请求体中传递了包含symbol的完整参数串:

  • 代码执行$url .= '?' . $query_str;后,URL会带上所有参数(包括symbol)
  • 又通过CURLOPT_POSTFIELDS将同一个query_str作为POST表单数据发送
  • Binance服务器会从两个位置获取到重复的symbol参数,因此返回重复参数错误

解决方法

按照Binance API规范,选择一种参数传递方式即可,推荐使用POST方式传递参数,修改步骤如下:

  1. 移除URL拼接参数的代码,保持原始API地址:
// 删掉这行:$url .= '?' . $query_str;
  1. 显式指定curl使用POST请求(虽然设置CURLOPT_POSTFIELDS会默认触发POST,但显式声明更清晰):
@curl_setopt($ch, CURLOPT_POST, true);

修改后的关键代码片段:

// 保持原始URL,不拼接参数
$url = 'https://api.binance.com/api/v3/order/test';

// ... 签名生成逻辑保持不变 ...

$ch = @curl_init();
@curl_setopt($ch, CURLOPT_HEADER, false);
@curl_setopt($ch, CURLOPT_URL, $url);
@curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
@curl_setopt($ch, CURLOPT_HTTPHEADER, $content_type);
@curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
@curl_setopt($ch, CURLOPT_TIMEOUT, 10);
@curl_setopt($ch, CURLOPT_POST, true); // 显式指定POST请求
@curl_setopt($ch, CURLOPT_POSTFIELDS, $query_str);

$response = @curl_exec($ch);
// ... 后续处理逻辑不变 ...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:01:16