adyen HPP集成

时间:2017-10-19 09:33:01

标签: java hmac adyen

我正在尝试整合adyen hpp页面。我基本上在github:https://github.com/Adyen/adyen-java-sample-code/blob/master/src/com/adyen/examples/hpp/CreatePaymentOnHpp_SHA_256.java

中使用相同的代码

在该示例中,我只是将merchantAccount,skinCode和hmac密码设置为我的数据。

此外,我添加了一些代码来为hmac计算创建测试网址:

        String queryString = params.keySet().stream()
            .map(key -> {
                try {
                    return key + "=" +  URLEncoder.encode(params.get(key), "UTF-8");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                return "Error: could not URL-encode value";
            }).collect(Collectors.joining("&"));

        String testUrl = "https://ca-test.adyen.com/ca/ca/skin/checkhmac.shtml" + "?" + queryString;

        System.out.println(testUrl);

我还创建了一些代码来为hpp创建一个url。它看起来像这样:

        URIBuilder b = new URIBuilder(hppUrl);
        for (Map.Entry<String, String> entry : params.entrySet()) {
            b.addParameter(entry.getKey(), URLEncoder.encode(entry.getValue(), "UTF-8"));
        }

        return b.build().toString();

因此HMAC的计算似乎是正确的,因为testUrl总是正确的。 但是,如果我点击生成的hpp链接,那么我总是会收到一个错误,我应该检查HMAC计算。

我希望有人可以给我一个如何解决它的提示

1 个答案:

答案 0 :(得分:2)

默认情况下,URIBuilder已对您的参数进行URL编码。您发布的实施对您的参数进行了两次编码,导致您的merchantReference等参数与用于计算商家签名的签名字符串不同。

以下代码可以解决问题并创建有效的HPP链接:

URIBuilder b = new URIBuilder(hppUrl);
params.entrySet().forEach(e-> b.addParameter(e.getKey(),e.getValue()));
System.out.println(b.build().toString());