【发布时间】:2019-10-23 18:54:05
【问题描述】:
我正在尝试将来自我的 BitStamp 帐户的不同信息显示到 Google 电子表格上。 为此,我们使用了 Google Apps Script (GAS),当然还有 Javascript。
我得到的错误是 API0005,as you can see from BitStamp API reference page,代表 invalid signature:
API0005 无效签名 发布的签名与我们的不匹配
现在,我一直在从多个来源收集信息,尤其是在 Stack 上,但无法确定问题出在哪里。
我注意到了一些事情,我想强调一下,因为我猜这个问题可能与此有关:
为了便于构建,我将签名合成过程的主要步骤附加到电子表格本身,以便更好地了解其开发。
你会注意到 nonce 输出的微小变化,即使在一行代码和下一行代码之间,每次调用或调用函数时;这并不让我感到惊讶,因为我猜每次调用 nonce 都经过了几毫秒,并且输出 必须 不同(毕竟我猜它是专门为此设计的)。
但我的第一个问题是:即使调用toUpperCase() 转换,它也可以改变吗?
(顺便说一句,我猜这不应该是问题的原因)
var nonce = new (function() {
this.generate = function() {
var now = Date.now();
this.counter = (now === this.last? this.counter + 1 : 0);
this.last = now;
// add padding to nonce
var padding =
this.counter < 10 ? '000' :
this.counter < 100 ? '00' :
this.counter < 1000 ? '0' : '';
return now+padding+this.counter;
};
})();
//funzione write
function write() {
var cred = {
id:'digit2118',
key:'2RhZfUKIYJbT8CBYk6T27uRSF8Gufre',
secret:'T8CBYk6T274yyR8Z2RhZfUxbRbmZZHJ'
};
//adding some cells output to monitor each step of the "conversion"
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var cell = sheet.getRange("B14");
cell.setValue(cred.id);
// .. and so on, see screen cap..
var message = nonce.generate() + cred.id + cred.key;
var res = Utilities.computeHmacSha256Signature(cred.secret, message).map(function(e) {return ("0" + (e < 0 ? e + 256 : e).toString(16)).slice(-2)}).join("");
var signature = res.toUpperCase();
// qui mettiamo i dati per fare la comunicazione vera e propria
var data = {
key: cred.key,
signature: res,
nonce: nonce.generate()
};
var options = {
'method' : 'post',
//'contentType': 'application/json',
// Convert the JavaScript object to a JSON string.
//'payload' : JSON.stringify(data)
'muteHttpExceptions' : true,
'payload' : data
};
var risposta = UrlFetchApp.fetch('https://www.bitstamp.net/api/v2/balance/', options);
var risposta2 = JSON.parse(risposta.getContentText());
Logger.log(risposta2);
//Logger.log(risposta.getContentText());
return signature;
}//end of write();
Logger.log(write());
所以最后我看不到在哪里,但这一定是我缺少的东西。
(ps:这是我从中获得 Nonce 代码的地方:Generate Nonce,)
编辑:问题已解决。
更新了以下问题和解决方案的代码。
感谢@Tanaike
【问题讨论】:
标签: javascript api google-apps-script google-sheets nonce