Подключение к API Bitfinex из Google Sheets

1

Я пытаюсь подключить свой листок 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}}

Я застрял и не уверен, что еще попробовать?

Может ли кто-нибудь определить, что я делаю неправильно?

  • 0
    Вы должны принять один из ответов ниже, если он помог вам ...
Теги:
rest

3 ответа

0

Как это работает

  var body = {
    'request' : "/v1/balances",
    'nonce' : nonce,
    'options':{}
  };
0

Как насчет этой модификации? Поскольку у меня нет secret, я не смог отладить этот образец. Поэтому я не знаю, работает ли этот модифицированный образец. Мне жаль.

Модификации:

  1. secret не определен.
  2. Когда используется метод POST, для этого требуется включить method: "post" в UrlFetchApp.fetch().
  3. Когда он читает образец Javascript документа, signature должна быть изменена.
  4. Когда он читает образец Javascript документа, body: JSON.stringify(body) включено в параметры запроса.
  5. Появляется сообщение об ошибке {"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());

Извините, если это вам не пригодилось.

0

Я не уверен, понимаю ли я ваш код, но если я это сделаю, на первый взгляд есть хотя бы одна странность:

В computeHmacSignature(...) вы используете secret переменной, который не был инициализирован или даже не объявлен нигде.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню