【问题标题】:FTX API in Google SheetsGoogle 表格中的 FTX API
【发布时间】:2021-10-27 08:30:58
【问题描述】:

我不断收到此错误“异常:https://ftx.com 的请求失败,返回代码 401。截断的服务器响应:{“成功”:假,“错误”:“未登录”} (使用 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());

【问题讨论】:

  • 我从来不知道你要使用的 API。这是因为我的技术不好。我对此深表歉意。那么,为了正确理解您当前的问题,能否提供您要使用的API的官方文档?
  • 这里是官方APIdocs.ftx.com/#overview
  • 感谢您的回复。从您的回复中,我提出了一个答案。你能确认一下吗?在我的测试中,我确认官方文档的python脚本的请求和转换后的Google Apps Script是一样的。因此,如果发生错误,请再次检查您的api_keysecret

标签: javascript google-apps-script


【解决方案1】:

我相信你的目标如下。

  • 您想使用 Google Apps 脚本请求 FTX API 的 Get balances of all accounts

  • 获取请求头的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 Script 中,有 Class 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 & 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())
}

参考资料:

【讨论】:

  • 您的代码运行良好。非常感谢。
  • @Die Moba 感谢您的回复。我很高兴你的问题得到了解决。通过您提供的官方文件,我可以理解您的问题。也谢谢你。
猜你喜欢
  • 2021-08-12
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多