Я пытаюсь подключить свой листок Google к Bitfinex через "аутентифицированный" раздел API, чтобы получить доступ к моей учетной записи. Вот ссылка API.
Мне не удалось заставить библиотеки "запрос" или "крипто" работать, поэтому я пытаюсь использовать другие доступные функции в листах Google, но у меня проблемы.
Ниже приведен фрагмент кода, который я использую:
var completeURL = "https://api.bitfinex.com/v1/account_infos";
var nonce = Math.floor(new Date().getTime()/1000);
var body = {
'request' : completeURL,
'nonce' : nonce
};
var payload = JSON.stringify(body).toString('base64');
var signature = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_384,
payload,
secret);
signature = signature.map(function(byte) {
return ('0' + (byte & 0xFF).toString(16)).slice(-2);
}).join('');
var params = {
headers: {
'X-BFX-APIKEY': key,
'X-BFX-PAYLOAD': payload,
'X-BFX-SIGNATURE': signature
},
}
Logger.log(completeURL);
Logger.log(params);
var response = UrlFetchApp.fetch(completeURL, params);
var json = JSON.parse(response.getContentText());
Я получаю следующую ошибку от API:
Ошибка запроса для https://api.bitfinex.com/v1/account_infos возвращенного кода 400. Усеченный ответ сервера: {"message": "Invalid json."} (Используйте параметр muteHttpExceptions для проверки полного ответа). (строка 209, файл "Код")
И следующие значения из вызовов Logger.log:
[17-09-24 16:22:28:170 AEST] https://api.bitfinex.com/v1/account_infos
[17-09-24 16:22:28:171 AEST] {headers={X-BFX-PAYLOAD={"request":"https://api.bitfinex.com/v1/account_infos","nonce":1506234148}, X-BFX-SIGNATURE=06d88a85098aefbf2b56af53721506863978f9350b1b18386c23f446254789dbbfc1eeb520bdfc7761b30f98ea0c21a2, X-BFX-APIKEY=ak6UoPiwaLjwt2UqDzZzZGjpb9P2opvdPCAIqLy0eVq}}
Я застрял и не уверен, что еще попробовать?
Может ли кто-нибудь определить, что я делаю неправильно?
Как это работает
var body = {
'request' : "/v1/balances",
'nonce' : nonce,
'options':{}
};
Как насчет этой модификации? Поскольку у меня нет secret
, я не смог отладить этот образец. Поэтому я не знаю, работает ли этот модифицированный образец. Мне жаль.
secret
не определен.method: "post"
в UrlFetchApp.fetch()
.signature
должна быть изменена.body: JSON.stringify(body)
включено в параметры запроса.{"message":"Invalid json."}
.Скрипт, который был отражен выше изменений, выглядит следующим образом.
var secret = "#####"; // Please input this.
var completeURL = "https://api.bitfinex.com/v1/account_infos";
var nonce = Math.floor(new Date().getTime()/1000);
var body = {
'request' : completeURL, // I don't know whether this is the correct value.
'nonce' : nonce
};
var payload = Utilities.base64Encode(Utilities.newBlob(JSON.stringify(body)).getDataAsString());
var signature = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_384, payload, secret);
signature = signature.map(function(byte) {
return ('0' + (byte & 0xFF).toString(16)).slice(-2);
}).join('');
var params = {
method: "post",
headers: {
'X-BFX-APIKEY': key,
'X-BFX-PAYLOAD': payload,
'X-BFX-SIGNATURE': signature
},
payload: JSON.stringify(body),
contentType: "application/json",
muteHttpExceptions: true
}
var response = UrlFetchApp.fetch(completeURL, params);
var json = JSON.parse(response.getContentText());
Извините, если это вам не пригодилось.
Я не уверен, понимаю ли я ваш код, но если я это сделаю, на первый взгляд есть хотя бы одна странность:
В computeHmacSignature(...)
вы используете secret
переменной, который не был инициализирован или даже не объявлен нигде.