java - Binance Api 签名端点上的 Http Response 400

标签 java rest api endpoint

我正在尝试向 Binance 上的用户帐户端点发送 GET 请求。 虽然我仍然收到 Http Response 400 我究竟做错了什么 ? 这是我的代码

public JSONObject getUserAccountData(String timeStamp ) {

    JSONObject json = null;
    try {
        String secret = apikey.get("secret");
        // https:///api.binance.com/api/v3/account
        String uri = ACCOUNT_URL_V3;
        String params = "recvWindow=" + DEFAULT_RECWINDOW + "&timestamp=" + timeStamp ;
        String fullUri = uri + "?" + params;
        map.put("signature", Encryptor.getHmacSha256(secret,params ));
        fullUri =fullUri+ "&signature="+ map.get("signature");

         String result = HTTPUtil.requestGet(fullUri , "application/json", map.get("X-MBX-APIKEY"));

        return json.getJSONObject("result");
    } catch (Exception ex) {
        logger.error("Failed getting user account data " + ex.getMessage());
    } finally {
        return json;
    }
}

我用 SHA256 签署我的 key

public static String getHmacSha256(String key, String data) {
    Mac sha256;
    String result = null;

    try {
        byte[] byteKey = key.getBytes("UTF-8");
        sha256 = Mac.getInstance(HMAC_SHA256);
        SecretKeySpec keySpec = new SecretKeySpec(byteKey, HMAC_SHA256);
        sha256.init(keySpec);
        byte[] macData = sha256.doFinal(data.getBytes("UTF-8"));
        result = bytesToHex(macData);
    }
    catch(Exception e) {
        e.printStackTrace();
    }
    return result;
}

这是 GET 实现(适用于 Bitterex API 调用)

public static String requestGet(String strUrl, String accept,String apiKeyForGet) throws Exception {
    URL url = new URL(strUrl);
    HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();

    conn.setDoOutput(true);
    conn.setRequestMethod("GET");
    conn.setRequestProperty("Accept", accept);
     conn.setRequestProperty("X-MBX-APIKEY", apiKeyForGet);
    conn.setConnectTimeout(5000);
    conn.connect();

    if(conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
         throw new Exception();
    }

    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }
    in.close();

    return response.toString();
}

我得到的最终 URI 是:
https://api.binance.com/api/v3/account?recvWindow=5000&timestamp=1523987972841&signature=3125BEE36896E464122A1CA73EB6FFA18881CB33FDE6927CC3676C8F969EC2A0

最佳答案

将您的时间戳与以下币安时间戳同步:

对我来说是 GMT + 2,所以我创建了我的时间戳 - (3600 * 2)

关于java - Binance Api 签名端点上的 Http Response 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49884658/

相关文章:

java - 如何使用多线程将List中的数据插入到DB表中以提高性能?

java - Mongodb Java驱动程序将无法通过TLS连接

java - 错误: Illegal modifier for parameter

java - 如何从弹性负载均衡器中分离实例?

php - 使用 RESTful 服务保护来自跨域的 API 调用

java - 获取 json 文件中的条目数

java - 泽西接收文件列表

c# - 如何在每分钟循环一次Powershell直到条件成立?

api - 如何使用 Twitter API(2022 年)获取 Twitter 关注者数量?

json - golang GET请求运行时json类型错误