我一直在尽我最大的能力来解释bitmex's indications for api connection,但这就是我所得到的:
function balanceBitmex() {
var apiKey = '***';
var apiSecret = '***';
var verb = 'get';
var path = '/api/v1/user/wallet';
var expires = Number(new Date().getTime() +5).toFixed(0);
var expires = expires.toString();
var data = '';
var data = JSON.stringify(data);
var currency = '';
var count= '';
var concat = verb+path+expires+data;
var apiSignature = Utilities.computeHmacSha256Signature(apiSecret, concat);
apiSignature = apiSignature.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': {'contentType': 'application/json',
'api-expires': expires,
'api-key': apiKey,
'api-signature': apiSignature},
'muteHttpExceptions': true
};
//var params = params + data;
var url = "https://www.bitmex.com/api/v1/user/wallet?currency=XBt";
var data = UrlFetchApp.fetch(url, params);
var data = JSON.parse(data.getContentText());
我的脚本出了什么问题? bitmex api explorer - user wallet
答案 0 :(得分:1)
函数Utilities.computeHmacSha256Signature(String, String)
接受两个参数,顺序如下:
在您的情况下,您实际上是在使用apiSecret
作为密钥来加密concat
。但是,情况恰恰相反-apiSecret
应该是用于加密concat
的密钥。您只需更改:
var apiSignature = Utilities.computeHmacSha256Signature(apiSecret, concat);
针对以下内容:
var apiSignature = Utilities.computeHmacSha256Signature(concat, apiSecret);
此外,您可以使用以下代码计算BitMex documentation中提供的示例,并验证其是否正常工作。
function testEncryption() {
var apiSecret = 'chNOOS4KvNXR_Xq4k4c9qsfoKWvnDecLATCRlcBwyKDYnWgO';
var verb = 'GET';
var path = '/api/v1/instrument';
var expires = 1518064236;
var data = '';
var apiSignature = Utilities.computeHmacSha256Signature(verb + path + expires + data, apiSecret);
apiSignature = apiSignature.map(function(e) {
var v = (e < 0 ? e + 256 : e).toString(16);
return v.length == 1 ? "0" + v : v;
}).join("");
Logger.log(apiSignature);
}
运行以上代码的结果是c7682d435d0cfe87c16098df34ef2eb5a549d4c5a3c2b1f0f77b8af73423bf00
,与BitMex文档中显示的结果相同。
关于您提供的代码,为了使API正常工作,还必须解决一些错误:
get
,但API仅接受此参数为大写(GET
)。使用前者,签名将有所不同,从而使请求失败。currency=XBt
),但在您的代码中则不存在(请注意行{{ 1}})在修正了上面所有的错误并清理了一些未使用的变量之后,您的最终代码可能如下所示:
var path = '/api/v1/user/wallet';