【问题标题】:Binance cryptoexchange API "/account" 401 responseBinance cryptoexchange API "/account" 401 响应
【发布时间】:2018-01-08 21:25:27
【问题描述】:

我在使用 Google Sheet 中的脚本调用 Binance cryptoexchange API 时遇到问题。

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

我已通过另一个中心 (coinigy.com) 检查了我的 API 密钥和秘密,密钥工作正常。

但我自己执行脚本时仍然出现 401 错误...

币安支持没有回答。

有人可以帮忙吗?

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
}

【问题讨论】:

  • 你能给我们介绍一下fetchJSON()吗?
  • 感谢您的回复,sn-p是加了那个功能的
  • 感谢您的回复。我发布了我的答案。请确认。

标签: api google-apps-script binance


【解决方案1】:

我认为您的脚本几乎是正确的。但是错误的原因是fetchJSON()。 fetchJSON() 仅接收 url。但是var response = fetchJSON(completeURL,params); 发送completeURL 和params。这样,fetchJSON() 不会收到params 并且会发生错误。那么这个修改怎么样呢?

发件人:

var response = fetchJSON(completeURL,params);

收件人:

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

注意:

  • 如果此修改不起作用,请从params 中删除'contentType': 'application/x-www-form-urlencoded',,然后重试。

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

编辑:

请尝试以下示例脚本,并告诉我响应。如果返回的是“当前账户信息”,则说明脚本有效。

  1. 将以下脚本复制并粘贴到您的脚本编辑器中。
  2. 请在示例脚本中输入您的密钥和密码。
  3. 在脚本编辑器上,运行 -> 运行函数 -> 示例
  4. 脚本完成后,通过 View -> Logs 检索响应

示例:

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

【讨论】:

  • 我的编辑收到了“401”回复,我收到一条错误消息,在您的两句话之后我得到了一个空回复。
  • @Egorische 对于给您带来的不便,我深表歉意。我更新了我的答案。请确认并告诉我结果。
  • @Egorische 欢迎您。也谢谢你。如果您的问题已解决,请按接受按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。如果找不到按钮,请随时告诉我。 stackoverflow.com/help/accepted-answer
  • 我找不到那个按钮,抱歉
  • @Egorische 对于给您带来的不便,我深表歉意。您可以在https://meta.stackexchange.com/a/65088 了解如何接受您的回答。
猜你喜欢
  • 2020-02-06
  • 2021-10-27
  • 2019-06-15
  • 1970-01-01
  • 2019-01-11
  • 2020-12-03
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
相关资源
最近更新 更多