在 POST 参数中使用数组时 SHA1 签名无效
SHA1 signature invalid when using an array in POST parameters
我正在使用交换 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 维基:
https://github.com/BCEX-TECHNOLOGY-LIMITED/API_Docs/wiki/Interface
签名说明
https://github.com/BCEX-TECHNOLOGY-LIMITED/API_Docs/wiki/Sign
端点getBalance需要token为数组
原来是querystring库的问题,我改成了qs,现在可以了
我正在使用交换 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 维基: https://github.com/BCEX-TECHNOLOGY-LIMITED/API_Docs/wiki/Interface
签名说明 https://github.com/BCEX-TECHNOLOGY-LIMITED/API_Docs/wiki/Sign
端点getBalance需要token为数组
原来是querystring库的问题,我改成了qs,现在可以了