在 Verifone(2Checkout) webhook 响应中从 MD5 迁移到 SHA

问题描述 投票:0回答:1

Verifone 将于 2024 年 4 月 15 日在其平台上停止支持 MD5 算法,并强制用户使用 SHA。有必要使用他们的指南创建的一些哈希来响应 IPN 通知。

这是 Java 上的一段代码,通过 MD5 算法创建带有哈希值的响应正文:

import com.google.common.hash.HashFunction;
import com.google.common.hash.Hashing;

    String responseBody(IpnRequest request, VerifoneApiKey secret) {
        var ipnPidValues = request.id();
        var ipnNameValues = request.get(IPN_PNAME);
        var ipnDateValue = request.get(IPN_DATE);

        List<String> toEncrypt = ImmutableList.of(
            ipnPidValues, ipnNameValues, ipnDateValue, ipnDateValue
        );

        var hash = hmacMd5(toEncrypt, secret.getValue());
        var responseBody = format("<EPAYMENT>%s|%s</EPAYMENT>", ipnDateValue, hash);
        return responseBody;
    }

    String hmacMd5(Collection<String> values, String key) {
        checkCanEncrypt(values);
        checkNotEmptyOrBlank(key);
        var toEncrypt = compose(values);
        var md5HashFunction = Hashing.hmacMd5(key.getBytes(UTF_8));
        return encrypt(toEncrypt, md5HashFunction);
    }

    String compose(Collection<String> values) {
        return values.stream()
                .map(s -> byteLength(s) + s)
                .collect(Collectors.joining());
    }

    int byteLength(String str) {
        return str.getBytes(UTF_8).length;
    }

此部分有效,Verifone 将 IPN 标记为已成功发送,但当

Hashing.hmacMd5
更改为
Hashing.hmacSha256
Hashing.hmacSha512
时,Verifone 表示通知发送时出现错误并尝试重新发送。

migration webhooks md5 sha 2checkout
1个回答
0
投票

Verifone 已更新其 文档 和控制面板,因此现在可以在 IPN 设置中更改预期响应算法。

要迁移相关代码,需要更改响应字符串模式:

var responseBody = format("<EPAYMENT>%s|%s</EPAYMENT>", ipnDateValue, hash);

var responseBody = format("<sig algo=\"sha256\" date=\"%s\">%s</sig>", ipnDateValue, hash);

和哈希算法

Hashing.hmacMd5
Hashing.hmacSha256

© www.soinside.com 2019 - 2024. All rights reserved.