Я использую API обмена для создания бота.Обмен использует SHA1 и закрытый ключ для подписи HTTP-запросов.Все работает, за исключением случаев, когда один из моих параметров POST является массивом.
Я пытался использовать JSON.stringify и querystring.stringify вместо того, чтобы просто иметь массив как есть.Я даже пытался отправить параметры в виде строки, но ответ API говорит, что это должен быть массив.
let api_key = 'api_key';
let secret = fs.readFileSync('./key.pem').toString('ascii');
var params: any = {
amount: '1',
api_key,
begin_time: '',
end_time: '',
market: 'USDT',
market_type: '1',
page: '1',
price: '150',
size: '10',
token: 'LTC',
tokens: 'LTC', //this must be an array, but when I make it an array the signature becomes invalid
type: '2',
};
const hash = crypto.createSign('sha1');
hash.update(JSON.stringify(params));
const signature = encodeURIComponent(hash.sign(secret, 'base64'));
params = {
sign: signature,
...params,
};
console.log(params);
var api_endpoint = '/api_market/getBalance';
var url = 'https://api.bcex.vip' + api_endpoint;
var http_header = {
'Content-Type': 'application/x-www-form-urlencoded',
};
request.post(
url,
{
headers: http_header,
body: querystring.stringify(params),
},
function(error, response, body) {
if (error) {
// res.json(error);
console.error(error);
} else {
// res.json(body);
// console.log(response);
console.log(JSON.parse(body));
}
},
);
}
API Wiki: https://github.com/BCEX-TECHNOLOGY-LIMITED/API_Docs/wiki/Interface
Инструкции по подписи https://github.com/BCEX-TECHNOLOGY-LIMITED/API_Docs/wiki/Sign
Конечной точке getBalance нужны токены, чтобы быть массивом