В документации API используется Hex.encodeHexString (), но в этом коде я использую DatatypeConverter.printHexBinary (), поскольку у меня нет Apache.
String strForSign = "/v1/account/balance" + "/" + nonce + "/";
String signatureStr = Base64.getEncoder().encodeToString(strForSign.getBytes("UTF-8"));
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes("UTF-8"), "HmacSHA256");
sha256_HMAC.init(secretKeySpec);
String signatureResult = DatatypeConverter.printHexBinary(sha256_HMAC.doFinal(signatureStr.getBytes("UTF-8")));
Команда curl, которая использует эту подпись:
String command = "curl -H \"KC-API-KEY: " + apiKey + "\" -H \"KC-API-NONCE: " + nonce + "\" -H \"KC-API-SIGNATURE: " + signature +
"\" -X GET \"https://api.kucoin.com/v1/account/balance/\"";
Я должен получить баланс, но я продолжаю получать
{"code":"UNAUTH","msg":"Signature verification failed","success":false,"timestamp":1547545347146}
Это связано с тем, что Hex.encodeHexString () и DatatypeConverter.printHexBinary () выдают здесь разные выходные данные или по какой-то другой причине?