Dru*_*gle 1 google-apps-script
我正在尝试从 Google Apps Script 中名为 3Commas 的服务中检索交易。我以前使用过公共端点,但这是我第一次尝试使用签名端点。我目前收到一个错误,指出:
[19-01-09 16:46:24:592 EST] {"error":"signature_invalid","error_description":"提供的签名无效"}
我猜这是我的格式问题。我正在使用jsSHA来构建 HMAC 部分。我试过按照文档中的示例进行操作。但我还没有完全明白。关于它可能是什么的任何建议?
3Commas 文档:https : //github.com/3commas-io/3commas-official-api-docs#signed--endpoint-security
function main() {
var key = 'apikey';
var secret = 'apisecret';
var baseUrl = "https://3commas.io/public/api";
var endPoint = "/ver1/smart_trades";
var pointParams = "?limit=10&offset=&account_id=&scope=&type="
//base url + end point + params
var queryString = baseUrl+endPoint+pointParams;
var message = queryString;
var secret = secret;
var shaObj = new jsSHA("SHA-256", "TEXT");
shaObj.setHMACKey(secret, "B64");
shaObj.update(message);
var signature = shaObj.getHMAC("B64");
//headers
var hparams = {
'method': 'get',
'headers': {'APIKEY': key,
'Signature': signature},
'muteHttpExceptions': true
};
//call
var data = UrlFetchApp.fetch(queryString , hparams).getContentText();
Logger.log(data)
Run Code Online (Sandbox Code Playgroud)
}
这个改装怎么样?从你的问题中的3Commas Docs,我提出如下修改点。
https://3commas.io.computeHmacSha256Signature()GAS 类实用程序中的方法加密这些值。在这种情况下,不需要使用 jsSHA。
computeHmacSha256Signature()被使用时,该值变成了有符号十六进制的字节数组。因此需要将其转换为无符号的十六进制。function main() {
var key = 'apikey';
var secret = 'apisecret';
var baseUrl = "https://3commas.io"; // Modified
var endPoint = "/public/api/ver1/smart_trades"; // Modified
var pointParams = "?limit=10&offset=&account_id=&scope=&type="; // or "?limit=10"
var queryString = endPoint + pointParams; // Modified
var signature = Utilities.computeHmacSha256Signature(queryString, secret); // Added
signature = signature.map(function(e) {return ("0" + (e < 0 ? e + 256 : e).toString(16)).slice(-2)}).join(""); // Added
//headers
var hparams = {
'method': 'get',
'headers': {'APIKEY': key,
'Signature': signature},
'muteHttpExceptions': true
};
//call
var data = UrlFetchApp.fetch(baseUrl + queryString , hparams).getContentText(); // Modified
Logger.log(data)
}
Run Code Online (Sandbox Code Playgroud)
var pointParams = "?limit=10&offset=&account_id=&scope=&type=",对于您使用的端点,limit、offset、account_id、scope 和 type 不是强制性的。所以它可能是var pointParams = "?limit=10"。如果出现错误,请尝试。我无法确认这个修改后的脚本是否有效。对于这种情况,我很抱歉。因此,如果它不起作用,我深表歉意。那个时候能不能提供一下情况的详细信息?
| 归档时间: |
|
| 查看次数: |
303 次 |
| 最近记录: |