FTX API в Google Таблицах

#javascript #google-apps-script

Вопрос:

я продолжаю получать эту ошибку «Исключение: запрос не выполнен для https://ftx.com возвращенный код 401. Усеченный ответ сервера: {«успех»: false, «ошибка»: «Не вошел в систему»} (используйте опцию muteHttpExceptions для проверки полного ответа) »

Что не так с моим кодом?

 var host = 'https://ftx.com';
var endpoint ='/api/wallet/all_balances';
var url = host   endpoint;

var timestamp = ''  new Date().getTime();
var payload = timestamp   'GET'   endpoint '';

var shaObj = new jsSHA("SHA-256", "BYTES");
shaObj.setHMACKey(api_secret, "BYTES");
shaObj.update(payload);
var signature = shaObj.getHMAC("HEX");

var options = {
 method: 'get',
 headers: {
  'FTX-KEY': api_key,
  'FTX-TS': timestamp,
  'FTX-SIGN': signature
  },
 muteHTTPExceptions: 'true'
}

var jsondata = UrlFetchApp.fetch(url, options);
var data   = JSON.parse(jsondata.getContentText());
 

Комментарии:

1. Я никогда не знал API, который вы хотите использовать. Это связано с моим плохим навыком. Я глубоко извиняюсь за это. Итак, чтобы правильно понять вашу текущую проблему, можете ли вы предоставить официальный документ API, который вы хотите использовать?

2. Вот официальный Api docs.ftx.com/#overview

3. Спасибо, что ответили. Из вашего ответа я предложил ответ. Не могли бы вы подтвердить это? В своем тесте я подтвердил, что запрос скрипта python официального документа совпадает с запросом преобразованного скрипта Google Apps. Итак, если возникает ошибка, пожалуйста, проверьте свой api_key и secret еще раз.

Ответ №1:

Я считаю, что ваша цель заключается в следующем.

  • Вы хотите запросить получение остатков на всех счетах FTX API с помощью Google Apps Script.
  • Пример скрипта python для извлечения заголовка запроса выглядит следующим образом.
       import time
      import hmac
      from requests import Request
    
      ts = int(time.time() * 1000)
      request = Request('GET', '<api_endpoint>')
      prepared = request.prepare()
      signature_payload = f'{ts}{prepared.method}{prepared.path_url}'.encode()
      signature = hmac.new('YOUR_API_SECRET'.encode(), signature_payload, 'sha256').hexdigest()
    
      request.headers['FTX-KEY'] = 'YOUR_API_KEY'
      request.headers['FTX-SIGN'] = signature
      request.headers['FTX-TS'] = str(ts)
     

В этом случае, когда ваш скрипт модифицируется, как насчет следующей модификации?

Модифицированный скрипт:

К сожалению, new jsSHA() не может использоваться напрямую. В скрипте Google Apps есть класс Utilities . Вы можете использовать метод «computeHmacSha256Signature» этого класса. И я думаю, что muteHTTPExceptions: 'true' это muteHttpExceptions: true так.

 function myFunction() {
  var api_key = "YOUR_API_KEY"; // Please set your API key.
  var secret = "YOUR_API_SECRET"; // Please set your secret value.

  var host = 'https://ftx.com';
  var endpoint = '/api/wallet/all_balances';
  var url = host   endpoint;
  var timestamp = ''   new Date().getTime();
  var payload = timestamp   'GET'   endpoint   '';
  var signature = Utilities.computeHmacSha256Signature(payload, secret).map(byte => ('0'   (byte amp; 0xFF).toString(16)).slice(-2)).join('');
  var options = {
    method: 'get',
    headers: {
      'FTX-KEY': api_key,
      'FTX-TS': timestamp,
      'FTX-SIGN': signature
    },
    muteHttpExceptions: true
  }
  var res = UrlFetchApp.fetch(url, options);
  console.log(res.getContentText())
}
 

Ссылки:

Комментарии:

1. Ваш код работает отлично. Большое спасибо.

2. @Die Moba Спасибо за ответ. Я рад, что ваша проблема была решена. Я мог бы понять ваш вопрос по предоставленному вами официальному документу. И вам спасибо.