# callback - java

```java
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
import java.nio.charset.StandardCharsets;
import org.json.JSONObject;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

public class Main {
    public static void main(String[] args) {
        callback();
    }


    public static void callback() {
        try {
            String merchantId = "a56e0-0a10c-73015-9f330";
            String key = "<Your Secret Key>"; // Your Secret Key

            // Sample JSON callback data
            String jsoncfn = "{\"statusCode\":200,\"merchant_id\":\"a56e0-0a10c-73015-9f330\",\"hash\":\"EyBdBWHMSXtaecqzdouSWm9E+HqmUDlfuvhWwuWG9j6Y/4N9yynQnjHtnc8EpoF0+xXRlzbIk2f5Ix8RVjSu7Q==\",\"data\":{\"symbol\":\"USDT\",\"address\":\"0xCF68707fAbAbcaE21D9Cf3a1BD8BF4b2123d669E\",\"block\":10436505,\"txid\":\"0xb17db1aae600f24c2a4d6cc48cc70ec31c1e53f7fdec2ae82b80edbfa2d28b0c\",\"confirmation\":16,\"balance\":1,\"usd_balance\":1,\"timestamp\":1594448100}}";
            

            Gson gson = new Gson();
            JsonObject response = gson.fromJson(jsoncfn, JsonObject.class);
            String dataJson = gson.toJson(response.getAsJsonObject("data"));
            Mac sha512Hmac = Mac.getInstance("HmacSHA512");
            SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA512");
            sha512Hmac.init(secretKey);
            byte[] hmacBytes = sha512Hmac.doFinal(dataJson.getBytes(StandardCharsets.UTF_8));
            String dataHash = Base64.getEncoder().encodeToString(hmacBytes);


            if (response.get("statusCode").getAsInt() == 200 || response.get("statusCode").getAsInt() == 1001) {
                System.out.println("merchant id equal ? " + response.get("merchant_id").getAsString().equals(merchantId));

                System.out.println("dataHash => " + dataHash + " hash => " + response.get("hash").getAsString());
                if (response.get("merchant_id").getAsString().equals(merchantId) && dataHash.equals(response.get("hash").getAsString())) {
                    System.out.println("success");
                    // Do something
                    // return {code:0} // return success
                } else {
                    System.out.println("error1");
                    // Do something
                }
            } else {
                System.out.println("error2");
                // Do something
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    private static String hashHmac(String data, String key) throws Exception {
        Mac sha512Hmac = Mac.getInstance("HmacSHA512");
        SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA512");
        sha512Hmac.init(secretKey);
        byte[] hash = sha512Hmac.doFinal(data.getBytes(StandardCharsets.UTF_8));
        return Base64.getEncoder().encodeToString(hash);
    }





```
