工行支付对接验签demo java

1. 简介

随着移动支付的普及,越来越多的商户开始对接银行支付系统。在对接过程中,支付验签是非常重要的一步,用于确保支付数据的完整性和安全性。本文将介绍工商银行支付对接验签的基本原理,并提供一个Java示例代码。

2. 支付验签原理

支付验签是通过对支付结果数据进行签名的方式来验证数据的完整性和真实性。工行支付系统使用的是RSA算法进行签名。在验签过程中,商户需要验证支付结果数据的签名是否有效,以确保数据的完整性。

3. Java示例代码

下面是一个使用Java语言编写的工行支付对接验签的示例代码:

import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.Signature;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;

public class ICBCPaymentVerifier {
    private static final String PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtyXNzXmI8UEH2qf1c4lP\n" +
            "r2wzjAZ7k4JlR8d1I4T8NRE79jRQVaj6sXX2JYK7GKejPTfI5WUZk1tst1EzvJ9t\n" +
            "xiO7eqy3vC/7KXcQomFDskpOu7P5yEfLIj+MvO6jSjgrHg1k1VUuU6p6puR8Ez2S\n" +
            "CEzR2JDZgBPl8nW1dDfiSg3HFMdXTi9MC+R9K7kO3hPzJ2kzGf7n6PTNznn1EJzq\n" +
            "R1vMqK9hH7i0n8W8t4eG4q+nIpYbT6F92tIDoCfBvQ0O+X3y52/Pa+2unscmBu+k\n" +
            "03VEwYVEp3/Z9AL0x4Vk8DxIj4UgPprSb7Gz2HhYcIzgXmB7WZS8eHoePoDnW7hN\n" +
            "jwIDAQAB";

    public static boolean verify(String data, String signature) {
        try {
            byte[] signatureBytes = Base64.getDecoder().decode(signature);
            byte[] dataBytes = data.getBytes();
            byte[] publicKeyBytes = Base64.getDecoder().decode(PUBLIC_KEY);

            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            PublicKey publicKey = keyFactory.generatePublic(new X509EncodedKeySpec(publicKeyBytes));

            Signature rsa = Signature.getInstance("SHA256withRSA");
            rsa.initVerify(publicKey);
            rsa.update(dataBytes);

            return rsa.verify(signatureBytes);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    public static void main(String[] args) {
        String data = "paymentData";
        String signature = "signature";

        boolean isValid = verify(data, signature);
        System.out.println("Payment data is valid: " + isValid);
    }
}

该代码示例中,通过提供的公钥和支付结果数据,使用RSA算法进行验签。如果验签成功,则返回true,否则返回false。

4. 甘特图

下面是一个使用mermaid语法绘制的甘特图,展示了整个工行支付对接验签的流程:

gantt
    title 工行支付对接验签流程

    section 商户端
    创建订单: 2022-01-01, 5d
    发送支付请求: 2022-01-02, 2d
    接收支付结果: 2022-01-03, 1d
    验签: 2022-01-04, 1d

    section 工行支付系统
    处理支付请求: 2022-01-02, 1d
    生成支付结果: 2022-01-03, 1d
    签名: 2022-01-03, 1d

    section 商户系统
    处理支付结果: 2022-01-04, 1d

该甘特图展示