2017-07-21 23 views
5

देता है मैं जीडीएक्स पर एक पोस्ट अनुरोध करने की कोशिश कर रहा हूं। लेकिन मुझे हमेशा "अमान्य हस्ताक्षर" संदेश प्राप्त होता है। अनुरोध + पर हस्ताक्षर बनाने के लिए GDAX एपीआई डॉक्स: https://docs.gdax.com/#creating-a-requestजीडीएक्सएक्स पोस्ट कॉल अमान्य हस्ताक्षर

Preshash स्ट्रिंग रिटर्न निम्नलिखित:

1500627733POST/आदेश { "कीमत": "1000.0", "आकार": "0.02", "type" : "सीमा", "पक्ष": "बेच", "product_id": "बीटीसी-यूरो"}

मेरे हस्ताक्षर विधि:

public String generateSignature(String requestPath, String method, String body, String timestamp) { 
     try { 
      String prehash = timestamp + method.toUpperCase() + requestPath + body; 
      byte[] secretDecoded = Base64.getDecoder().decode(secretKey); 
      SecretKeySpec keyspec = new SecretKeySpec(secretDecoded, "HmacSHA256"); 
      Mac sha256 = (Mac) Mac.getInstance("HmacSHA256").clone(); 
      sha256.init(keyspec); 
      return Base64.getEncoder().encodeToString(sha256.doFinal(prehash.getBytes())); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

मेरा अनुरोध विधि:

private boolean placeLimitOrder(String currencyPair, String side, String price, String size) 
      throws UnirestException { 

     String timestamp = Instant.now().getEpochSecond() + ""; 
     String api_method = "/orders"; 
     String path = base_url + api_method; //base_url = https://api.gdax.com 
     String method = "POST"; 
     String b = "{\"price\":\"1000.0\",\"size\":\"0.02\",\"type\":\"limit\",\"side\":\"sell\",\"product_id\":\"BTC-EUR\"}"; 
     JsonNode n = new JsonNode(b); 
     String sig = generateSignature(api_method, method,b, timestamp); 

     HttpResponse<JsonNode> rep = Unirest.post(path).header("accept", "application/json") 
       .header("content-type", "application/json") 
       .header("CB-ACCESS-KEY", publicKey) 
       .header("CB-ACCESS-PASSPHRASE", passphrase) 
       .header("CB-ACCESS-SIGN", sig) 
       .header("CB-ACCESS-TIMESTAMP", timestamp) 
       .body(n) 
       .asJson(); 

     System.out.println(rep.getStatusText()); //Bad Request 

     System.out.println(rep.getBody().toString()); //invalid signature 

     System.out.println(sig); //returns something 


     return false; 
    } 

मैं भी अनिद्रा के साथ एक एपीआई अनुरोध कॉल करने की कोशिश की, लेकिन यह एक ही संदेश ("अमान्य हस्ताक्षर") देता है।

कोई सुराग?

अग्रिम में बहुत बहुत धन्यवाद!

+2

वही समस्या जिसका सामना कर रहा हूं। क्या आपके पास इस पर कोई संकल्प है? – a4arpan

+0

इस मुद्दे पर भी चल रहा है, क्या आपने कभी यह पता लगाया कि इसका निवारण कैसे करें? – thomallen

उत्तर

-1

मुझे एक ही समस्या थी।

लेकिन सही एक https::

समस्या हल

मैं http इस्तेमाल किया।

1

ऐसा लगता है कि आप एक स्ट्रिंग है जो मूल्य आदेश डेटा पर हस्ताक्षर कर रहे हैं, लेकिन पोस्ट में शरीर के लिए आप इसे एक जेसन नोड में बदल रहे हैं। जो gdax हस्ताक्षर को डीकोड करता है और पेलोड डेटा को डिक्रिप्ट (हस्ताक्षरित निकाय) से प्राप्त करते समय तुलना नहीं करता है, जब यह प्राप्त नहीं हो सकता है।

क्यों न केवल स्ट्रिंग को शरीर के रूप में भेजें और ".asJson" को हटा दें?

.body(b) 

मैं एक समान मुद्दे पर फंस गया था जब मैं सी # में एपीआई का परीक्षण कर रहा था। कोशिश करने के 3 दोपहर के बाद। मैंने डेटा को स्ट्रिंग के रूप में भेजने का परीक्षण किया और मैं अमान्य हस्ताक्षर त्रुटि पास करने में सक्षम था।

संबंधित मुद्दे