gpt4 book ai didi

javascript - API0005 从 Google Apps 脚本到 BitStamp API 的无效签名连接错误

转载 作者:行者123 更新时间:2023-11-30 19:30:11 28 4
gpt4 key购买 nike

我正在尝试将我的 BitStamp 帐户中的不同信息显示到 Google 电子表格中。为此,我们使用了 Google Apps Script (GAS),当然还有 Javascript。

我得到的错误是 API0005,as you can see from BitStamp API reference page , 代表无效签名:

API0005    Invalid signature    Posted signature doesn't match with ours

现在,我一直在从多个来源收集信息,尤其是在 Stack 上,但无法完全弄清楚问题出在哪里。

虽然我注意到了一些事情,但我想强调一下,因为我猜这个问题可能与此有关:

为了便于构建,我将签名合成过程的主要步骤附加到电子表格本身,以便更好地了解其发展。

您会注意到 nonce 输出的微小变化,即使在一行代码和下一行代码之间,每次以某种方式调用或调用函数时;这并不让我感到惊讶,因为我猜每次 nonce 被调用时都已经过去了一些毫秒并且输出必须是不同的(毕竟我猜它是出于这个原因故意设计的) .

但我首先担心的是:即使在调用 toUpperCase() 转换时它也会改变吗?(顺便说一下,我猜这不应该是问题的原因)

Spreadsheet Cells Screenshot

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

最佳答案

这个修改怎么样?

修改点:

  • Utilities.computeHmacSha256Signature(value, key)的参数中,依次是valuekey
    • 请将Utilities.computeHmacSha256Signature(cred.secret, message)修改为Utilities.computeHmacSha256Signature(message, cred.secret)

修改后的脚本:

从:
var res = Utilities.computeHmacSha256Signature(cred.secret, message).map(function(e) {return ("0" + (e < 0 ? e + 256 : e).toString(16)).slice(-2)}).join("");
到:
var res = Utilities.computeHmacSha256Signature(message, cred.secret).map(function(e) {return ("0" + (e < 0 ? e + 256 : e).toString(16)).slice(-2)}).join("");

备注:

  • 如果修改后出现错误,请将nonce固定为请求中的常量值,然后重试。
    • 我认为 nonce 可能需要在请求中固定。关于这一点,请在您的环境中进行测试。
    • 因为当我看到a sample script for Node.js , nonce 在请求中固定为常量值。

引用:

我无法在我的环境中测试此修改。因此,如果这不是您问题的直接解决方案,我深表歉意。如果此修改更改了错误消息,也请提供。

关于javascript - API0005 从 Google Apps 脚本到 BitStamp API 的无效签名连接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56508321/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com