Binance API Hmac签名

时间:2018-05-12 08:46:10

标签: javascript node.js api

请帮助我不知道我的代码有什么问题。 不需要签名的端点工作正常,所以我猜我是如何获得签名的问题。我收到了这个错误:

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 个答案:

答案 0 :(得分:2)

尝试将headers对象设置为直接使用X-MBX-APIKEY密钥:

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