1
我試圖對Kraken私有端點進行一些認證調用,但沒有成功。我仍然收到錯誤EAPI:簽名無效。 有人知道有什麼問題嗎?Kraken API MATLAB客戶端無效簽名錯誤
下面的代碼:
function [response,status]=kraken_authenticated(uri,postdata)
% test uri='0/private/AddOrder'
% test postdata='&pair=XBTEUR&type=buy&ordertype=limit&price=345.214&volume=0.65412&leverage=1.5&oflags=post'
url=['https://api.kraken.com/',uri];
% nonce
nonce = num2str(floor((now-datenum('1970', 'yyyy'))*8640000000));
[key,secret]=key_secret('kraken');
% 1st hash
Opt.Method = 'SHA-256';
Opt.Input = 'ascii';
sha256string = DataHash(['nonce=',nonce,postdata],Opt);
% 2nd hash
sign = crypto([uri,sha256string], secret, 'HmacSHA512');
header_1=http_createHeader('API-Key',key);
header_2=http_createHeader('API-Sign',char(sign));
header=[header_1 header_2];
[response,status] = urlread2(url,'POST',['nonce=',nonce,postdata],header);
end
加密功能是在另一個文件:
function signStr = crypto(str, key, algorithm)
import java.net.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import org.apache.commons.codec.binary.*
keyStr = java.lang.String(key);
key = SecretKeySpec(keyStr.getBytes('UTF-8'), algorithm);
mac = Mac.getInstance(algorithm);
mac.init(key);
toSignStr = java.lang.String(str);
signStr = java.lang.String(Hex.encodeHex(mac.doFinal(toSignStr.getBytes('UTF-8'))));
end
我也試過
sign = crypto([uri,sha256string], base64decode(secret), 'HmacSHA512');
但沒有成功。
這是指南驗證呼叫HTTPS標題:
API-Key = API key
API-Sign = Message signature using HMAC-SHA512 of (URI path + SHA256(nonce + POST data)) and base64 decoded secret API key
這是指南驗證呼叫POST數據:
nonce = always increasing unsigned 64 bit integer
otp = two-factor password (if two-factor enabled, otherwise not required)
我試圖通過「隨機數」參數或所有參數「postdata」POST數據但沒有成功。
感謝您的幫助。
感謝。是的,這是問題所在。我對Java加密方法不太熟悉,所以我忽略了它。 無論如何,如果有人要通過Matlab使用Kraken API,另一個解決方案就是使用現成的Python API客戶端即。 https://github.com/veox/python2-krakenex。 –
嗨 - 您是如何將python解決方案與matlab連接起來的(具體如何與它進行交互?)關於如何解決matlab中的字節數組問題以獲得上述建議的工作方式,可能有其他想法嗎?謝謝! – Benvaulter
你應該看看matlab和python是如何集成的:https://stackoverflow.com/questions/39896899/calling-python-from-matlab – f334e31bd0