我正在尝试整合adyen hpp页面。我基本上使用了与他们在github:256.java上的示例中相同的代码
在这个例子中,我只是将merchantAccount、skinCode和hmac秘密代码设置到我的数据中。
此外,我还添加了一些代码来为hmac计算创建一个测试url:
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计算。
我希望有人能给我一个如何修复它的提示。
发布于 2017-10-20 14:14:31
默认情况下,URIBuilder已经为您编码参数。您发布的实现对您的参数进行了两次编码,导致您的merchantReference等参数与用于计算您的商家签名的签名字符串不同。
以下代码将修复此问题并创建一个有效的HPP链接:
URIBuilder b = new URIBuilder(hppUrl);
params.entrySet().forEach(e-> b.addParameter(e.getKey(),e.getValue()));
System.out.println(b.build().toString());https://stackoverflow.com/questions/46826855
复制相似问题