2017-05-30 9 views
0

MATLABでBitcoin Exchange KrakenのAPIを実装しようとしています。残念ながら、プライベートユーザデータを取得するために認証を実行しようとしていました。クラウドAPI Matlabを使用した「無効なシグネチャ」エラー

特に、私は次の実装で遊んでいました:Kraken API MATLAB client invalid signature errorhttps://www.kraken.com/help/api

プライベートユーザデータを使用して接続しているときに、次のエラーが発生することがあります:{"error":["EAPI:Invalid signature"]}。誰かが以下の実装をすばやく見て、コードの欠陥を探すことができますか?または、誰かがMatlab用クラウケンAPIを正常に実装していますか?

多くの感謝!

% Private 
uri = '0/private/Balance'; 
postdata=''; 
[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' 

function [response,status]=kraken_authenticated(uri,postdata) 

% Generate URL 
url=['https://api.kraken.com/',uri]; 

% nonce 
nonce = num2str(floor((now-datenum('1970', 'yyyy'))*8640000000)); 
key = ' ' 
secret = ' ' 

% 1st hash 
Opt.Method = 'SHA-256'; 
Opt.Input = 'ascii'; 
sha256string = DataHash(['nonce=',nonce,postdata],Opt); 

% 2nd hash 
%sign = crypto([uri,sha256string], secret, 'HmacSHA512'); 
sign = crypto([uri,sha256string], base64decode(secret), 'HmacSHA512') 
%sign = HMAC([uri,sha256string], base64decode(secret), 'SHA-512'); 

%header_0=http_createHeader('Content-Type','application/x-www-form-urlencoded'); 
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); 
%key = SecretKeySpec(keyStr.getBytes(), 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')))) 
%signStr = java.lang.String(Hex.encodeHex(mac.doFinal(toSignStr.getBytes()))) 
end 

function header = http_createHeader(name,value) 
header = struct('name',name,'value',value); 
end 

答えて

1

私はあなたのコードに気づいた原因として、私は実際にC++での私OWM実装をやろうとしている、と私は私が得る別のエラーのためにここにいたが、ここにある:

最初のSHA256ハッシュをnonceとpostdataの連結である必要があります。 POSTDATAとしても、nonceを含むされたナンス値が123456789である場合、あなたは(擬似コード)を実行する必要があります。

sha256("123456789nonce=123456789") 

またはMATLABで:

sha256string = DataHash([nonce,'nonce=',nonce],Opt); 

私はそれが役に立てば幸い。

関連する問題