Binance cryptoexchange API" / account" 401响应

时间:2018-01-08 21:25:28

标签: api

我使用Google Sheet中的脚本调用Binance cryptoexchange API时遇到了麻烦。

我已使用示例中的数据检查了我的签名处理 https://www.binance.com/restapipub.html#user-content-signed-endpoint-security 而且我也有同样的签名。

我已经通过另一个集线器(coinigy.com)检查了我的API密钥和密码,密钥正常工作。

但我自己仍然在执行脚本时遇到401错误...

Binance支持不回答。

有人可以帮忙吗?



function BinanceTest(key,secret) {
/*var randnumber=Math.random()*500;
Utilities.sleep(randnumber);*/
var baseURL = "https://api.binance.com";
var completeURL = baseURL + "/api/v3/account";
var timestamp=new Date().getTime();
var payload = "timestamp="+timestamp;
var signature = Utilities.computeHmacSha256Signature(payload, secret);
signature = signature.map(function(byte) {
  return ('0' + (byte & 0xFF).toString(16)).slice(-2);
}).join('');
completeURL=completeURL+"?"+payload+"&signature="+signature;
var params = {
  'method': 'get',
  'headers': {'X-MBX-APIKEY': key},
  'contentType': 'application/x-www-form-urlencoded',
  'muteHttpExceptions': true
};  
var response = fetchJSON(completeURL,params);
var servertime=fetchJSON("https://api.binance.com/api/v1/time").serverTime;
return [servertime,timestamp,payload,signature,JSON.stringify(params),completeURL,response];

};


function fetchJSON (url) {
  var randnumber=Math.random()*3000;
  Utilities.sleep(randnumber);
  try {
    var json = UrlFetchApp.fetch(url,{muteHttpExceptions: true })
    } catch (exception) {
      Logger.log(url+": "+exception)
      return 'exception'
    } 
  if ('undefined' == typeof(json))
    return 'Error retrieving JSON data'
  
  if (json.getResponseCode() != 200)
    return json.getResponseCode()
    
  json = json.getContentText()
  if (json.length<=0)
    return 'JSON data was invalid'

  try {
    json = JSON.parse(json)
  } catch (exception) {
    Logger.log(url+" "+exception)
    return "err2"
  }
  if ('undefined' == typeof(json) || json == null)
    // return 'err'
  return 'Quote data was malformed JSON data'

  return json
}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

我认为你的脚本几乎是正确的。但错误的原因是fetchJSON()fetchJSON()仅收到url。但var response = fetchJSON(completeURL,params);发送completeURLparams。这样,fetchJSON()没有收到params,就会发生错误。那么这个修改怎么样?

来自:

var response = fetchJSON(completeURL,params);

致:

var response = UrlFetchApp.fetch(completeURL, params);

注意:

  • 如果此修改无效,请从'contentType': 'application/x-www-form-urlencoded',删除params,然后重试。

我无法确认这些修改是否有效。所以,如果这不起作用,你能告诉我错误信息吗?我想修改。

编辑:

请尝试以下示例脚本,并告诉我回复。如果响应是&#34;当前帐户信息&#34;返回,表示脚本有效。

  1. 将以下脚本复制并粘贴到脚本编辑器中。
  2. 请在示例脚本中输入密钥和密码。
  3. 在脚本编辑器上,运行 - &gt;运行功能 - &gt;样品
  4. 脚本完成后,按View - &gt;检索响应日志
  5. 样本:

    function sample() {
      var key = "### your key ###";
      var secret = "### your secret ###";
    
      var baseURL = "https://api.binance.com";
      var completeURL = baseURL + "/api/v3/account";
      var timestamp=new Date().getTime();
      var payload = "timestamp="+timestamp;
      var signature = Utilities.computeHmacSha256Signature(payload, secret);
      signature = signature.map(function(byte) {
        return ('0' + (byte & 0xFF).toString(16)).slice(-2);
      }).join('');
      completeURL=completeURL+"?"+payload+"&signature="+signature;
      var params = {
        'method': 'get',
        'headers': {'X-MBX-APIKEY': key},
        'muteHttpExceptions': true
      };  
      var response = UrlFetchApp.fetch(completeURL, params);
      Logger.log(response.getContentText())
    }