2016-08-19 2 views
2

여기에 설명되어있는 Poloniex 거래 API에 연결하려고합니다 : https://poloniex.com/support/api/.API 키와 비밀번호로 거래 API (Poloniex)에 연결

기본적으로이 사람이 알아야 할 모든 것을 설명

All calls to the trading API are sent via HTTP POST to https://poloniex.com/tradingApi and must contain the following headers:

Key - Your API key.

Sign - The query's POST data signed by your key's "secret" according to the HMAC-SHA512 method.

Additionally, all queries must include a "nonce" POST parameter. The nonce parameter is an integer which must always be greater than the previous nonce used.

을하지만 어떤 이유로 나는 오류 얻을 : 잘못된 명령을. 나는 다양한 명령을 시도했지만 아무도 작동하지 않았다.

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; 
} 

아무도 그 코드에서 문제가 보이지 않습니까?

답변

1

나는 그것을 알아 냈 :

내가 "의 NameValuePair"로 "queryArgs"를 설정해야합니다, 그것은 작동합니다

params.add(new BasicNameValuePair("command", "returnBalances"));