google-apps-script - 带有 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/请求路径。
解决方案
使用 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 提供 - 无需解码。
推荐阅读
- postgresql - Apache Airflow - 在 AWS MWAA 上解析 SQL 查询很慢
- php - 将值从 php 传递到另一个 php 文件
- angular - 无法窥探 getNotification() 属性,因为它不是函数;给定的未定义
- react-native - 尝试在 High Sierra 10.13.6 上运行 react-native cli
- asp.net - 使用 android 模拟器时流意外结束
- javascript - 调用新的运算符是单独调用而不分配给 JavaScript 中的变量吗?
- javascript - 如何在 Expo 中取消下载?
- flutter - 如何将图标更改为颤动中按下的新图标?
- python - 如何按时区获取时间,这会在 OpenWatherMap API 响应中给出。Python
- python - 如何从列表中显式选择元素