我正在尝试连接到Poloniex交易API,该文件在此处记录:https://poloniex.com/support/api/。
基本上,这描述了一个人需要知道的一切:
所有对交易API的调用都通过HTTP POST发送到https://poloniex.com/tradingApi,并且必须包含以下标头:
密钥-您的API密钥。
签名-根据HMAC-SHA512方法,由您的键的“秘密”对查询的POST数据进行签名。
此外,所有查询都必须包含“ nonce” POST参数。随机数参数是一个整数,必须始终大于先前使用的随机数。
但是由于某种原因,我得到了错误:无效的命令。我尝试了各种命令,但没有一个起作用。
public static String POLONIEX_SECRET_KEY = "my secret"; //KEY
public static String POLONIEX_API_KEY = "my key"; // TODO API KEY
public static void main(String[] args) {
try {
accessPoloniex();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static final long generateNonce(){
Date d = new Date();
return d.getTime();
}
public static final void accessPoloniex() throws IOException{
String nonce = new BigDecimal(Polo2.generateNonce()).toString();
String connectionString = "https://poloniex.com/tradingApi";
String queryArgs = "command=returnBalances";
String hmac512 = hmac512Digest(queryArgs, POLONIEX_SECRET_KEY);
// Produce the output
ByteArrayOutputStream out = new ByteArrayOutputStream();
Writer writer = new OutputStreamWriter(out, "UTF-8");
writer.append(queryArgs);
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost post = new HttpPost(connectionString);
post.setHeader("Key", POLONIEX_API_KEY);
post.setHeader("Sign", hmac512);
post.setEntity(new ByteArrayEntity(out.toByteArray()));
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("nonce", nonce));
CloseableHttpResponse response = null;
Scanner in = null;
try
{
post.setEntity(new UrlEncodedFormEntity(params));
response = httpClient.execute(post);
// System.out.println(response.getStatusLine());
HttpEntity entity = response.getEntity();
in = new Scanner(entity.getContent());
while (in.hasNext())
{
System.out.println(in.next());
}
EntityUtils.consume(entity);
} finally
{
in.close();
response.close();
}
}
public static String hmac512Digest(String msg, String keyString) {
Mac shaMac;
try {
shaMac = Mac.getInstance("HmacSHA512");
SecretKeySpec keySpec = new SecretKeySpec(keyString.getBytes(), "HmacSHA512");
shaMac.init(keySpec);
final byte[] macData = shaMac.doFinal(msg.getBytes());
return Hex.encodeHexString(macData); //again with try/catch for InvalidKeyException
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return null;
}
有人在该代码中看到任何问题吗?
最佳答案
我想到了:
我需要将“ queryArgs”设置为“ NameValuePair”,然后才能工作:
params.add(new BasicNameValuePair("command", "returnBalances"));