我使用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;
答案 0 :(得分:1)
我认为你的脚本几乎是正确的。但错误的原因是fetchJSON()
。 fetchJSON()
仅收到url
。但var response = fetchJSON(completeURL,params);
发送completeURL
和params
。这样,fetchJSON()
没有收到params
,就会发生错误。那么这个修改怎么样?
var response = fetchJSON(completeURL,params);
var response = UrlFetchApp.fetch(completeURL, params);
'contentType': 'application/x-www-form-urlencoded',
删除params
,然后重试。我无法确认这些修改是否有效。所以,如果这不起作用,你能告诉我错误信息吗?我想修改。
请尝试以下示例脚本,并告诉我回复。如果响应是&#34;当前帐户信息&#34;返回,表示脚本有效。
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())
}