javascript 谷歌工作表中的FTX API

14ifxucb  于 2023-01-19  发布在  Java
关注(0)|答案(1)|浏览(113)

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

wlsrxk511#

我相信你的目标如下。

  • 您希望使用Google Apps脚本请求获取FTX API所有帐户的余额。
  • 用于检索请求头的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中有类实用程序,可以使用该类的方法"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())
}

参考文献:

  • computeHmacSha256签名(值、密钥)
  • 获取所有帐户的余额
  • 获取(url,参数)

相关问题