从Google表格连接到Bitfinex API

时间:2017-09-24 06:29:37

标签: javascript rest api

我正在尝试通过API的“已验证”部分将我的Google表格连接到Bitfinex,以便我可以访问我的帐户信息。这是API link

我无法让'request'或'crypto'库工作,所以我一直在尝试使用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”:“无效的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}}

我被困住了,不知道还有什么可以尝试的?

有人能发现我做错了吗?

3 个答案:

答案 0 :(得分:0)

我不确定我是否理解您的代码,但如果我这样做,乍一看至少有一个奇怪的地方:

computeHmacSignature(...)中,您使用的是尚未初始化甚至在任何地方声明的变量secret

答案 1 :(得分:0)

这次修改怎么样?由于我没有secret,我无法调试此示例。所以我不知道这个修改后的样本是否有效。对不起。

修改要点:

  1. secret未定义。
  2. 使用POST方法时,需要将method: "post"包含到UrlFetchApp.fetch()
  3. 当它读取the document的Javascript样本时,必须修改signature
  4. 当它读取the document的Javascript示例时,body: JSON.stringify(body)包含在请求参数中。
  5. {"message":"Invalid json."}
  6. 的错误消息

    以上修改反映的脚本如下。

    修改后的脚本:

    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());
    

    如果这对你没用,我很抱歉。

答案 2 :(得分:0)

这就是它的工作原理

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