首页 > 解决方案 > 带有 Google 表格的 Coinbase v2

问题描述

我正在尝试使用 Coinbase API v2(非专业版)将我的钱包内容简单地拉入我的电子表格。我有以下内容:

    var url = 'https://api.coinbase.com/v2';
    var requestPath = '/accounts';
    var api_key = '********';
    var secret_key = '********';
    // var timestamp = new Date().getTime().toString().slice(0, -3);
    var timestamp = Math.floor(Date.now() / 1000).toString();
    var method = 'GET';

    var message = Utilities.base64Decode(Utilities.base64Encode(timestamp + method + requestPath));
    var decoded_secret = Utilities.base64Decode(secret_key);
    var signature = Utilities.base64Encode(Utilities.computeHmacSha256Signature(message, decoded_secret));
    
    //previous attempt
    /* var signature = Utilities.computeHmacSha256Signature(message, decoded_secret);
    signature = signature.map(function(e) {
      var v = (e < 0 ? e + 256 : e).toString(16);
      return v.length == 1 ? "0" + v : v;
    }).join("");*/

    var params = {
      'method': method,
      'headers': {
        'Content-Type':        'application/json',
        'CB-ACCESS-SIGN':      signature,
        'CB-ACCESS-TIMESTAMP': timestamp,
        'CB-ACCESS-KEY':       api_key,
        'CB-VERSION':          '2021-02-03'
      }
    };
    Logger.log(params);
    var res = await UrlFetchApp.fetch(url + requestPath, params);

不幸的是,我收到了无效签名错误。我觉得我很接近了。可能是我没有正确进入签名的 url/请求路径。

标签: google-apps-scriptgoogle-sheetscoinbase-api

解决方案


使用 Apps 脚本创建 Coinbase 签名有点棘手

正如您从Coinbase API 的文档中看到的那样,在 Python 中,签名是用 signature = hmac.new(self.secret_key, message, hashlib.sha256).hexdigest().

换句话说,签名需要进行十六进制编码。

Apps 脚本中没有 1:1 等价物hexdigest(),但您可以手动构建它。

这对我有用:

  var message = (timestamp + method +  requestPath + body);  
  var byteSignature = Utilities.computeHmacSha256Signature(message, secret);
  var signature = byteSignature.reduce(function(str,chr){
    chr = (chr < 0 ? chr + 256 : chr).toString(16);
    return str + (chr.length==1?'0':'') + chr;
  },'');  

因此secret,您的凭证由 Coinbase 提供 - 无需解码。


推荐阅读