Next.js SSR中用Fetch调用Binance下单接口遇-1022签名无效错误求助
解决Binance下单接口-1022签名无效错误
Binance的签名验证要求所有请求参数(除了signature)都要参与签名生成,你的代码里只对recvWindow和timestamp做了签名,漏掉了symbol、side、type、quantity这些交易参数,这就是签名无效的核心原因。
修复步骤:
- 把交易参数和timestamp、recvWindow合并成同一个字符串,用来生成签名
- 确保签名生成用的字符串和请求URL里的参数(除signature外)完全一致
修正后的代码:
var keysBuy = { "APIkey": 'my api key', "SECRETkey": 'my secret key' } var myHeaders = new Headers(); myHeaders.append("X-MBX-APIKEY", keysBuy['APIkey']); // 合并所有需要签名的参数 var allParams = `symbol=FIROUSDT&side=BUY&type=MARKET&quantity=5&recvWindow=20000×tamp=${Date.now()}`; // 用完整的参数字符串生成签名 var signature = crypto.createHmac('sha256', keysBuy['SECRETkey']).update(allParams).digest('hex') var requestOptions = { method: 'POST', headers: myHeaders, redirect: 'follow', }; const orderBuy = await fetch(`https://api.binance.com/api/v3/order?${allParams}&signature=${signature}`, requestOptions) const orderData = await orderBuy.json()
额外注意:
- 确认SECRETkey没有写错,不要包含多余空格或特殊字符
- 确保timestamp是毫秒级当前时间戳,和Binance服务器时间差不能超过设置的recvWindow值(这里是20000ms)
- 如果POST参数改用请求体传递,同样要把请求体的完整字符串用来签名,保持签名逻辑和参数传递方式一致
内容的提问来源于stack exchange,提问作者LD LDA
相关产品推荐
相关产品推荐

