Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Kraken.com API:在Google应用程序脚本中生成消息签名_Javascript_Api_Encoding_Google Apps Script_Cryptography - Fatal编程技术网

Javascript Kraken.com API:在Google应用程序脚本中生成消息签名

Javascript Kraken.com API:在Google应用程序脚本中生成消息签名,javascript,api,encoding,google-apps-script,cryptography,Javascript,Api,Encoding,Google Apps Script,Cryptography,我想从Kraken.com API检索数据。我试图调用“私有”方法。(那些需要认证) 正如这里所说: 预期签名为: API Sign=使用HMAC-SHA512 of(URI路径+SHA256(nonce+POST数据))和base64解码的秘密API密钥的消息签名 我在这里找到了node.js库中的一个函数,应该可以完成这项工作,但我似乎无法得到它 /** * This method returns a signature for a request as a Base64-encoded s

我想从Kraken.com API检索数据。我试图调用“私有”方法。(那些需要认证)

正如这里所说:

预期签名为:

API Sign=使用HMAC-SHA512 of(URI路径+SHA256(nonce+POST数据))和base64解码的秘密API密钥的消息签名

我在这里找到了node.js库中的一个函数,应该可以完成这项工作,但我似乎无法得到它

/**
* This method returns a signature for a request as a Base64-encoded string
* @param  {String}  path    The relative URL path for the request
* @param  {Object}  request The POST body
* @param  {Integer} nonce   A unique, incrementing integer
* @return {String}          The request signature
*/
function getMessageSignature(path, request, nonce) {
    var message = querystring.stringify(request);
    var secret = new Buffer(config.secret, 'base64');
    var hash = new crypto.createHash('sha256');
    var hmac = new crypto.createHmac('sha512', secret);

    var hash_digest = hash.update(nonce + message).digest('binary');
    var hmac_digest = hmac.update(path + hash_digest, 'binary').digest('base64');

    return hmac_digest;
}
这是我的全部代码

function main() {
  var apiKey = "API-KEY";
  var apiSecret = "API-SECRET";

  var url = "https://api.kraken.com/0/private/Balance";
  var path = "/0/private/Balance";

  const nonce = new Date() * 1000;

  const payload = {
    'nonce': nonce
  };
  const postData = 'nonce=' + nonce;

  const signature = getMessageSignature(path, apiSecret, postData, nonce);

  var httpOptions = {
   'method': 'post',
    'headers': {
      "API-Key": apiKey,
      "API-Sign": signature
    },
   'payload': postData
 };

 var response = UrlFetchApp.fetch(url, httpOptions);
 Logger.log(response.getContentText());
}


function getMessageSignature(url, secret, data, nonce) {
  const hash = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, nonce + data);
  const hmac_digest = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512, url + hash, Utilities.base64Decode(secret));
  return Utilities.base64Encode(hmac_digest);
}
但我最终还是出错了

{“错误”:[“EAPI:无效密钥”]}


非常感谢您的期待。

我终于得到了可以使用的代码

函数getKrakenSignature(路径、postdata、nonce){
var sha256obj=新jsSHA(“SHA-256”,“字节”);
sha256obj.update(nonce+postdata);
var hash_digest=sha256obj.getHash(“字节”);
var sha512obj=新jsSHA(“SHA-512”,“字节”);
sha512obj.setHMACKey(“HMACKEY”、“B64”);
sha512obj.update(路径);
sha512obj.update(hash_摘要);
返回sha512obj.getHMAC(“B64”);
}
函数getKrakenBalance(){
var path=“/0/private/Balance”;
var nonce=新日期()*1000;
var postdata=“nonce=”+nonce;
var signature=getKrakenSignature(路径、postdata、nonce);
变量url=”https://api.kraken.com“+路径;
变量选项={
方法:“post”,
标题:{
“API密钥”:“,
“API符号”:签名
},
有效载荷:postdata
};
var response=UrlFetchApp.fetch(url,选项);
return response.getContentText();
}
函数main(){
Logger.log(getKrakenBalance());
}

由于脚本返回“ReferenceError:jsSHA未定义”,您将脚本添加到何处?嗯,我想不起来了,但我想我只创建了一个文件jsSHA.gs并将jsSHA的内容粘贴到其中。无论如何,它都不起作用:现在的问题是TypeError:无法读取未定义(anonima)@(anonima)的属性“length”@n.update@n.update@getKrakenSignature@
function getKrakenSignature (path, postdata, nonce) {
    var sha256obj = new jsSHA ("SHA-256", "BYTES");
    sha256obj.update (nonce + postdata);
    var hash_digest = sha256obj.getHash ("BYTES");

    var sha512obj = new jsSHA ("SHA-512", "BYTES");
    sha512obj.setHMACKey ("HMACKEY", "B64");
    sha512obj.update (path);
    sha512obj.update (hash_digest);
    return sha512obj.getHMAC ("B64");
}

function getKrakenBalance () {
    var path = "/0/private/Balance";
    var nonce = new Date () * 1000;
    var postdata = "nonce=" + nonce;

    var signature = getKrakenSignature (path, postdata, nonce);

    var url = "https://api.kraken.com" + path;
    var options = {
    method: 'post',
    headers: {
        'API-Key': "<API-KEY>",
        'API-Sign': signature
    },
    payload: postdata
    };

    var response = UrlFetchApp.fetch (url, options);


    return response.getContentText ();
}

function main() {
    Logger.log(getKrakenBalance());
}