Мне действительно трудно понять поведение js.
var rp = require('request-promise');
var crypto = require('crypto');
var options = {
method : 'GET',
uri : "https://api.binance.com/api/v1/order",
qs: {
signature : hash,
timestamp : Date.now(),
symbol : 'LTCBTC'
},
headers: {
'X-MBX-APIKEY' : 'PUBLICKEY'
},
json : true
};
var hash= crypto.createHmac('sha256', options.toString())
.update('SECRETKEY')
.digest('hex');
//console.log(hash);
rp(options)
.then(function (Bbody) {
console.log(Bbody);
})
.catch(function (err) {
console.log(err);
});
если я возьму функцию hash
и поставлю ее перед options
one
, то там будет (очевидно)
TypeError: Не удается прочитатьсвойство 'toString' не определено
, но если я поставлю его, как в коде, которым я поделился, я получу эту ошибку:
StatusCodeError: 400 - {"code":-1102, "msg": "Обязательный параметр 'signature' не был отправлен, был пустым / пустым или имеет неправильный формат."}
, и это результат запроса:
options:
{ method: 'GET',
uri: 'https://api.binance.com/api/v1/order',
qs:
{ signature: undefined,
timestamp: 1540392736646,
symbol: 'LTCBTC' },
headers:
{ 'X-MBX-APIKEY':
'PUBLICKEY' },
json: true,
callback: [Function: RP$callback],
transform: undefined,
simple: true,
resolveWithFullResponse: false,
transform2xxOnly: false },
Если я раскомментирую console.log()
, я получу правильный хеш, напечатанный на видео в качестве первого вывода, до отклонения запроса.Тем не менее звонок не может поймать его.
Я использовал в качестве документов:
документация API binance
документация этого узла для библиотеки шифрования
и этот документ npm для обещания вызовов API
PS: PUBLICKEY
и SECRETKEY
являются заполнителями, но в своих тестах я использовал правильные строки.