Bittrex API加密货币交易者:php到Java转换


Bittrex API Cryptocurrency trader: php to Java conversion

我一直在做一个货币交易程序。这个程序是基于Bittrex API。但是,我在翻译php代码时遇到了一个问题:

$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。所以我知道我把发送给服务器的数据弄乱了。我认为问题在于代码的最后一段,因为我试图从这个问题来解释代码。同样,第二段代码背后的推理也诞生于此。然后我打算阅读下面解释的回复。

在写入http header之前,需要对您的符号进行十六进制。

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