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

Binance API错误码-1102:已传timestamp仍报错求助

Binance期货API报错-1102:已传timestamp仍提示未发送的解决方法

问题场景

调用Binance期货API下单时,明明传入了timestamp参数,却收到错误码-1102,提示:

"Mandatory parameter 'timestamp' was not sent, was empty/null, or malformed."

报错原因

  1. 请求格式不兼容:Binance的签名验证类API(如期货下单接口)要求参数以form-urlencoded格式或URL查询字符串传递,不支持JSON格式请求体。你的代码中axios默认以JSON发送请求,Binance服务器无法解析JSON里的参数,因此判定timestamp未传入。
  2. 签名参数格式错误:生成签名的params字符串中使用了HTML实体&作为分隔符,而非普通的&,这会导致签名计算错误,同时服务器无法正确解析参数。

修复方案

步骤1:修改参数分隔符

将生成签名的params字符串中的&替换为&,确保参数格式正确。

步骤2:改用form-urlencoded格式发送请求

引入qs模块(需通过npm install qs安装),将请求参数序列化为form-urlencoded格式,并设置正确的请求头。

修改后的完整代码

// settings
const setting = require('./json/binance.json');
// packages
const axios = require('axios');
const crypto = require('crypto');
const qs = require('qs'); // 用于序列化form数据

const apiKey = setting.apiKey;
const apiSecret = setting.secret;

// Headers:指定内容类型为form-urlencoded
const headers = {
    'X-MBX-APIKEY': apiKey,
    'Content-Type': 'application/x-www-form-urlencoded'
};

// Signature
function generateSignature(params) {
    return crypto.createHmac('sha256', apiSecret).update(params).digest('hex');
}

function placeFuturesOrder(req) {
    const symbol = req.body.symbol;
    const side = req.body.side;
    const type = 'MARKET';
    const quantity = req.body.amount;

    const baseUrl = 'https://fapi.binance.com';
    const endpoint = '/fapi/v1/order';
    const timestamp = Date.now();
    // 用普通&分隔参数,修正HTML实体问题
    const params = `symbol=${symbol}&side=${side}&type=${type}&quantity=${quantity}&timestamp=${timestamp}`;
    const signature = generateSignature(params);

    // 序列化为form-urlencoded格式
    const postData = qs.stringify({
        symbol,
        side,
        type,
        quantity,
        timestamp,
        signature,
    });

    return axios.post(baseUrl + endpoint, postData, { headers });
}

额外注意事项

  • 确保timestamp是毫秒级时间戳,且与Binance服务器时间差不超过5000ms,可调用/fapi/v1/time接口同步时间。
  • 若参数值包含特殊字符(如小数、特殊符号),需用encodeURIComponent()处理,例如:symbol=${encodeURIComponent(symbol)}。
  • 生成签名的参数必须与实际发送的参数完全一致,避免遗漏或多余参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:07:57