币安API Hmac签名

11

请帮忙,我不知道我的代码哪里出了问题。那些不需要签名的端点都正常工作,所以我猜是我获取签名的方式有问题。我得到了这个错误:

data: { code: -2014, msg: 'API-key format invalid.' } } }

API文档:https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md

SIGNED端点需要一个额外的参数,签名,在查询字符串或请求体中发送。端点使用HMAC SHA256签名。 HMAC SHA256签名是一个有密钥的HMAC SHA256操作。 使用您的secretKey作为密钥,totalParams作为HMAC操作的值。 签名不区分大小写。 totalParams定义为连接查询字符串和请求体。

我的代码:

const axios = require('axios');
const crypto = require('crypto');
const qs = require('qs');

const binanceConfig = {
  API_KEY: 'XXXXXXX',
  API_SECRET: 'XXXXXX',
  HOST_URL: 'https://api.binance.com',
};

const buildSign = (data, config) => {
  return crypto.createHmac('sha256', config.API_SECRET).update(data).digest('hex');
};

const privateRequest = async (data, endPoint, type) => {
  const dataQueryString = qs.stringify(data);
  const signature = buildSign(dataQueryString, binanceConfig);
  const requestConfig = {
    method: type,
    url: binanceConfig.HOST_URL + endPoint + '?' + dataQueryString + '&signature=' + signature,
    headers: {
      'Authorization': `X-MBX-APIKEY: ${binanceConfig.API_KEY}`,
    },
  };

  try {
    console.log('URL: ', requestConfig.url);
    const response = await axios(requestConfig);
    console.log(response);
    return response;
  }
  catch (err) {
    console.log(err);
    return err;
  }
};

const data = {
  symbol: 'ARKBTC',
  recvWindow: 20000,
  timestamp: Date.now(),
};

privateRequest(data, '/api/v3/openOrders', 'GET');
1个回答

12

尝试直接将headers对象设置为具有键X-MBX-APIKEY

headers: {
  'X-MBX-APIKEY': binanceConfig.API_KEY,
},

1
但是为什么呢?其他需要 API 密钥但不需要签名的端点使用“Authorization”可以正常工作。 - David Rivera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接