使用 Google Scripts 的 Binance API 签名

Kay*_*cer 3 javascript google-sheets urlfetch google-apps-script

我被困在如何根据Google Scripts中的Binance API正确地将签名包含到我的 get 命令中。它所说的是

SIGNED 端点需要在查询字符串或请求正文中发送附加参数签名。端点使用 HMAC SHA256 签名。HMAC SHA256 签名是加密的 HMAC SHA256 操作。使用您的 secretKey 作为密钥,使用 totalParams 作为 HMAC 操作的值。签名不区分大小写。totalParams 定义为与请求正文连接的查询字符串。

我所拥有的是:

function BinanceTrades() {
  var curTime = Number(new Date().getTime()).toFixed(0)
  var sKey = Utilities.computeHmacSha256Signature('symbol=LTCBTC&timestamp=' + curTime, '**mySeceretKey**');
  Logger.log(sKey)
  var headers = {'X-MBX-APIKEY': '**myKey**'}
  var data = UrlFetchApp.fetch("https://api.binance.com/api/v3/allOrders?signature=" + sKey + "&symbol=LTCBTC&timestamp=" + curTime, {'headers' : headers})
  Logger.log(data)
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

{"code":-1100,"msg":"在参数'signature'中发现非法字符;合法范围是'^[A-Fa-f0-9]{64}$'。"}

我不确定如何正确计算 HMAC SHA256 并合并 totalParams。

我以前的帖子是这样的。

Tan*_*ike 6

这些修改怎么样?

改装要点:

您提供的手册中

  • 在您的情况下,用于签名的字符串是"symbol=LTCBTC&timestamp=" + curTime.
  • 签名是未签名的十六进制字符串。
    • 但是在 Google Apps Script 中,加密的数据是Utilities.computeHmacSha256Signature()已签名的十六进制字节数组。

反映以上几点的修改后的脚本如下。

修改后的脚本:

function BinanceTrades() {
  var key = '**myKey**';
  var secret = '**mySeceretKey**';

  var curTime = Number(new Date().getTime()).toFixed(0);
  var string = "symbol=LTCBTC&timestamp=" + curTime;
  var sKey = Utilities.computeHmacSha256Signature(string, secret);
  sKey = sKey.map(function(e) {
      var v = (e < 0 ? e + 256 : e).toString(16);
      return v.length == 1 ? "0" + v : v;
  }).join("");
  var params = {
    'method': 'get',
    'headers': {'X-MBX-APIKEY': key},
    'muteHttpExceptions': true
  };
  var url = "https://api.binance.com/api/v3/allOrders?" + string + "&signature=" + sKey;
  var data = UrlFetchApp.fetch(url, params);
  Logger.log(data.getContentText())
}
Run Code Online (Sandbox Code Playgroud)

笔记 :

  • 关于签名的加密,已经从您提供的手册中确认该脚本可以正常工作。
  • 我没有 binance.com 的帐户。所以我无法运行这个脚本。抱歉。
    • 当你运行这个脚本时,如果出现错误,你能告诉我错误信息吗?