2015-08-08 31 views
2

我一直在做貨幣交易程序。該計劃基於Bittrex API。但是,我遇到了翻譯php代碼的問題:Bittrex API Cryptocurrency trader:從PHP到Java的轉換

$apikey='xxx'; 
$apisecret='xxx'; 
$nonce=time(); 
$uri='https://bittrex.com/api/v1.1/market/getopenorders?apikey='.$apikey.'&nonce='.$nonce; 
$sign=hash_hmac('sha512',$uri,$apisecret); 
$ch = curl_init($uri); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:'.$sign)); 
$execResult = curl_exec($ch); 
$obj = json_decode($execResult); 

到Java代碼中。這是我到目前爲止有:

String apikey = "xxx"; 
String apisecret = "xxx"; 
String nonce = String.valueOf(System.currentTimeMillis()); 
String uri = "https://bittrex.com/api/v1.1/market/getopenorders?apikey=" + apikey + "&nonce=" + nonce; 

Mac mac = Mac.getInstance("HmacSHA512"); 
SecretKeySpec secret = new SecretKeySpec(apisecret.getBytes(),"HmacSHA512"); 
mac.init(secret); 
byte[] digest = mac.doFinal(uri.getBytes()); 
String sign = new String(digest); 

HttpURLConnection con = (HttpURLConnection) new URL(uri).openConnection(); 
con.setRequestProperty("apisign", sign); // << very confused 
con.setRequestMethod("GET"); 
con.connect(); 

con.getInputStream(); // << Exception is thrown 

,我發現了錯誤:服務器返回的HTTP響應代碼:400。所以我知道我搞亂了,我向服務器發送數據。我認爲問題出在代碼的最後一段,因爲我試圖解釋來自this question的代碼。此外,第二個「段落」代碼背後的原因誕生於here。然後,我正在計劃閱讀here解釋的回覆。

回答

0

在放入http頭之前,您需要對您的標誌進行十六進制編碼。

String sign = org.apache.commons.codec.binary.Hex.encodeHexString(digest); 
+0

Android studio給出錯誤嘗試使用這個 – wilkas

+0

您能否提供更多信息? – sendon1982

+0

嗯,我試圖把這條線和Android Studio標記爲紅色。它也不允許導入org.apache.commons.codec.binary.Hex。 – wilkas