NodeJS调用Bybit现货下单API提示缺少symbol参数如何解决?
问题原因
Bybit 现货V1下单接口要求POST请求的参数格式为application/x-www-form-urlencoded,你当前使用axios默认的application/json格式传参,服务端无法正确解析请求体,所以会返回缺少symbol参数的报错。
修复步骤
- 第一步:安装
qs库用于序列化请求参数,也可以直接使用原生URLSearchParams实现 - 第二步:修改axios请求配置,指定请求头
Content-Type为application/x-www-form-urlencoded,同时将参数序列化后再传入 - 第三步:确认签名生成逻辑符合平台规则:所有请求参数需要按照key的ASCII码升序排序后再拼接生成签名,签名计算完成后再添加到参数列表中
修改后的示例代码
const qs = require('qs'); // 原有参数定义保持不变 var params = { api_key: api['key'], qty: 30, symbol: "EOSUSDT", timeInForce: this.bybit_enums["spot"]["time_in_force"]["GTC"], timestamp: expires, orderType: this.bybit_enums["spot"]["order_type"]["MARKET"], }; // 签名逻辑保持不变,注意签名前需确保参数已经按字典序排序 var sign = getSignature(params, api['secret']); params['sign'] = sign; // 调整axios请求配置 const result = await axios({ method: "post", url: "https://api-testnet.bybit.com/spot/v1/order", data: qs.stringify(params), // 序列化参数为form格式 headers: { 'Content-Type': 'application/x-www-form-urlencoded' } });
额外注意事项
如果你的订单是市价买单,想要按USDT的数量下单,需要把qty参数替换为quoteQty。qty仅用来指定基础币(本次请求对应为EOS)的数量,市价卖单可以继续使用qty参数。
内容的提问来源于stack exchange,提问作者user15450241
相关产品推荐
相关产品推荐

