![](/img/trans.png)
[英]Binance signature error : “code”:-1022,“msg”:“Signature for this request is not valid.”
[英]{error={name=HTTPError, message=Signature not valid.}} Bitmex Api connection error
我一直在盡我所能解釋bitmex 的 api 連接指示,但這就是我得到的:
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 - 用戶錢包
函數Utilities.computeHmacSha256Signature(String, String)
采用兩個參數,順序如下:
在您的情況下,您實際上是使用concat
作為密鑰來加密apiSecret
。 然而,它應該是相反的—— apiSecret
應該是用於加密concat
的密鑰。 您只需更改:
var apiSignature = Utilities.computeHmacSha256Signature(apiSecret, concat);
對於以下內容:
var apiSignature = Utilities.computeHmacSha256Signature(concat, apiSecret);
此外,您可以使用以下代碼計算BitMex 文檔中提供的示例並驗證其是否正常工作。
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
的情況下),但在您的代碼中它不是(注意行var path = '/api/v1/user/wallet';
)在修復上述所有錯誤並清除一些未使用的變量后,您的最終代碼可能如下所示:
function balanceBitmex() {
var apiKey = '***'
var apiSecret = '***';
var verb = 'GET';
var path = '/api/v1/user/wallet?currency=XBt';
var expires = Math.floor((Date.now() / 1000) + 600).toFixed(0);
var concat = verb + path + expires;
var apiSignature = Utilities.computeHmacSha256Signature(concat, apiSecret);
apiSignature = apiSignature.map(function(e) {
var v = (e < 0 ? e + 256 : e).toString(16);
return v.length == 1 ? "0" + v : v;
}).join("");
var params = {
'headers': {
'api-expires': expires,
'api-key': apiKey,
'api-signature': apiSignature
},
'muteHttpExceptions': true
};
var url = "https://www.bitmex.com/api/v1/user/wallet?currency=XBt";
var response = UrlFetchApp.fetch(url, params);
var data = JSON.parse(response.getContentText());
Logger.log(data);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.