private static byte[] getProductSigningKey(String secret, String date, String region, String productCode, String signMethod) {
        byte[] regionSignkey = getRegionSigningKey(secret, date, region, signMethod);
        try {
            Mac mac = Mac.getInstance(signMethod);
            mac.init(new SecretKeySpec(regionSignkey, signMethod));
            byte[] thirdSigningKey = mac.doFinal(productCode.getBytes(StandardCharsets.UTF_8));
            mac = Mac.getInstance(signMethod);
            mac.init(new SecretKeySpec(thirdSigningKey, signMethod));
            return mac.doFinal(CONSTANT.getBytes(StandardCharsets.UTF_8));
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("unsupport Algorithm:" + signMethod);
        } catch (InvalidKeyException e) {
            throw new RuntimeException("InvalidKey");
        }
    }
@Test
    public void testGetProductSigningKey() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        String secret = "mySecret";
        String date = "20220101";
        String region = "cn-beijing";
        String productCode = "seata";
        String signMethod = "HmacSHA256";
        byte[] expectArray = new byte[]{62, 98, -65, 30, -8, -3, 66, -111, 0, 123, 126, 78, -30, -74, 55, -79, 101, -18, -97, -5, 78, -19, -17, 0, 88, 30, -92, 108, 103, 87, 49, -22};

        RamSignAdapter adapter = new RamSignAdapter();
        Method getProductSigningKeyMethod = RamSignAdapter.class.getDeclaredMethod("getProductSigningKey", String.class, String.class, String.class, String.class, String.class);
        getProductSigningKeyMethod.setAccessible(true);
        byte[] signingKey = (byte[]) getProductSigningKeyMethod.invoke(adapter, secret, date, region, productCode, signMethod);
        Assertions.assertEquals(32, signingKey.length);
        Assertions.assertArrayEquals(expectArray, signingKey);
    }