diff --git a/pay-java-union/README.md b/pay-java-union/README.md index 31b5894..779c9b9 100644 --- a/pay-java-union/README.md +++ b/pay-java-union/README.md @@ -10,10 +10,20 @@ unionPayConfigStorage.setMerId("700000000000001"); //设置CertSign必须在设置证书前 unionPayConfigStorage.setCertSign(true); - //公钥,验签证书链格式: 中级证书路径;根证书路径 - unionPayConfigStorage.setKeyPublic("D:/certs/acp_test_middle.cer;D:/certs/acp_test_root.cer"); - //私钥, 私钥证书格式: 私钥证书路径;私钥证书对应的密码 - unionPayConfigStorage.setKeyPrivate("D:/certs/acp_test_sign.pfx;000000"); + //公钥,验签证书链格式: 中级证书路径;根证书路径 +// unionPayConfigStorage.setKeyPublic("D:/certs/acp_test_middle.cer;D:/certs/acp_test_root.cer"); + //中级证书路径 + unionPayConfigStorage.setAcpMiddleCert("D:/certs/acp_test_middle.cer"); + //根证书路径 + unionPayConfigStorage.setAcpRootCert("D:/certs/acp_test_root.cer"); + + //私钥, 私钥证书格式: 私钥证书路径;私钥证书对应的密码 +// unionPayConfigStorage.setKeyPrivate("D:/certs/acp_test_sign.pfx;000000"); + // 私钥证书路径 + unionPayConfigStorage.setKeyPrivateCert("D:/certs/acp_test_sign.pfx"); + //私钥证书对应的密码 + unionPayConfigStorage.setKeyPrivateCertPwd("000000"); + unionPayConfigStorage.setNotifyUrl("http://www.pay.egzosn.com/payBack.json"); // 无需同步回调可不填 app填这个就可以 unionPayConfigStorage.setReturnUrl("http://www.pay.egzosn.com/payBack.json"); diff --git a/pay-java-union/pom.xml b/pay-java-union/pom.xml index 858fa52..72aa4a9 100644 --- a/pay-java-union/pom.xml +++ b/pay-java-union/pom.xml @@ -5,7 +5,7 @@ pay-java-parent com.egzosn - 2.10.3-SNAPSHOT + 2.11.1-SNAPSHOT 4.0.0 diff --git a/pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayConfigStorage.java b/pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayConfigStorage.java index 4235a26..56ce420 100644 --- a/pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayConfigStorage.java +++ b/pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayConfigStorage.java @@ -19,8 +19,6 @@ public class UnionPayConfigStorage extends BasePayConfigStorage { */ private volatile String merId; - - /** * 商户收款账号 */ @@ -34,19 +32,89 @@ public class UnionPayConfigStorage extends BasePayConfigStorage { */ private volatile String accessType = "0"; + /** + * 中级证书路径 + */ + private String acpMiddleCert; + /** + * 根证书路径 + */ + private String acpRootCert; + /** + * 私钥证书是否已经初始化 + * 默认没有 + */ + private boolean keyPrivateInit = false; + + /** + * 公钥证书是否已经初始化 + * 默认没有 + */ + private boolean keyPublicInit = false; + + + /** + * 设置私钥证书 + * @param certificatePath 私钥证书地址 + * 私钥证书密码 {@link #setKeyPrivateCertPwd(String)} + */ + public void setKeyPrivateCert(String certificatePath){ + super.setKeyPrivate(certificatePath); + } + + /** + * 设置中级证书 + * @param certificatePath 证书地址 + */ + public void setAcpMiddleCert(String certificatePath){ + this.acpMiddleCert = certificatePath; + } + /** + * 设置根证书路径 + * @param certificatePath 证书路径 + */ + public void setAcpRootCert(String certificatePath){ + this.acpRootCert = certificatePath; + } + + public String getAcpMiddleCert() { + return acpMiddleCert; + } + + public String getAcpRootCert() { + return acpRootCert; + } + + /** + * + * 设置私钥证书与证书密码 + * @param keyPrivate 私钥证书与证书对应的密码 格式: D:/certs/acp_test_sign.pfx;000000 + * 替代方法 + * {@link #setKeyPrivateCert(String)} + * {@link #setKeyPrivateCertPwd(String)} + */ + @Deprecated @Override public void setKeyPrivate(String keyPrivate) { super.setKeyPrivate(keyPrivate); if (isCertSign() && keyPrivate.length() < 1024 && keyPrivate.contains(";")){ String[] split = keyPrivate.split(";"); - setKeyPrivateCertPwd( split[1]); + super.setKeyPrivateCertPwd( split[1]); super.setKeyPrivate(split[0]); getCertDescriptor().initPrivateSignCert(getKeyPrivate(), getKeyPrivateCertPwd(), "PKCS12"); + keyPrivateInit = true; } } - + /** + * 设置中级证书与根证书 格式:D:/certs/acp_test_middle.cer;D:/certs/acp_test_root.cer + * @param keyPublic 中级证书与根证书 + * 替代方法 + * {@link #setAcpRootCert(String)} + * {@link #setAcpMiddleCert(String)} + */ + @Deprecated @Override public void setKeyPublic(String keyPublic) { super.setKeyPublic(keyPublic); @@ -54,11 +122,12 @@ public class UnionPayConfigStorage extends BasePayConfigStorage { String[] split = keyPublic.split(";"); getCertDescriptor().initPublicCert(split[0]); getCertDescriptor().initRootCert(split[1]); + keyPublicInit = true; } } @Override - public String getAppid () { + public String getAppid() { return null; } @@ -67,7 +136,7 @@ public class UnionPayConfigStorage extends BasePayConfigStorage { * @see #getPid() */ @Deprecated - public String getPartner () { + public String getPartner() { return merId; } @@ -79,12 +148,12 @@ public class UnionPayConfigStorage extends BasePayConfigStorage { * @see #setPid(String) */ @Deprecated - public void setPartner (String partner) { + public void setPartner(String partner) { this.merId = partner; } @Override - public String getPid () { + public String getPid() { return merId; } @@ -92,7 +161,7 @@ public class UnionPayConfigStorage extends BasePayConfigStorage { this.merId = pid; } @Override - public String getSeller () { + public String getSeller() { return seller; } @@ -100,7 +169,7 @@ public class UnionPayConfigStorage extends BasePayConfigStorage { this.seller = seller; } - public String getMerId () { + public String getMerId() { return merId; } @@ -123,4 +192,12 @@ public class UnionPayConfigStorage extends BasePayConfigStorage { public void setAccessType(String accessType) { this.accessType = accessType; } + + public boolean isKeyPrivateInit() { + return keyPrivateInit; + } + + public boolean isKeyPublicInit() { + return keyPublicInit; + } } diff --git a/pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayService.java b/pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayService.java index 8ac3504..599caff 100644 --- a/pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayService.java +++ b/pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayService.java @@ -2,8 +2,6 @@ package com.egzosn.pay.union.api; import com.alibaba.fastjson.JSONObject; import com.egzosn.pay.common.api.BasePayService; -import com.egzosn.pay.common.api.Callback; -import com.egzosn.pay.common.api.PayConfigStorage; import com.egzosn.pay.common.bean.*; import com.egzosn.pay.common.bean.outbuilder.PayTextOutMessage; import com.egzosn.pay.common.bean.result.PayException; @@ -11,6 +9,7 @@ import com.egzosn.pay.common.exception.PayErrorException; import com.egzosn.pay.common.http.HttpConfigStorage; import com.egzosn.pay.common.http.UriVariables; import com.egzosn.pay.common.util.MatrixToImageWriter; +import com.egzosn.pay.common.util.sign.CertDescriptor; import com.egzosn.pay.common.util.sign.SignUtils; import com.egzosn.pay.common.util.sign.encrypt.RSA; import com.egzosn.pay.common.util.sign.encrypt.RSA2; @@ -35,7 +34,7 @@ import java.util.*; * create 2017 2017/11/5 * */ -public class UnionPayService extends BasePayService { +public class UnionPayService extends BasePayService { private static final Log log = LogFactory.getLog(UnionPayService.class); /** * 测试域名 @@ -64,15 +63,35 @@ public class UnionPayService extends BasePayService { * 构造函数 * @param payConfigStorage 支付配置 */ - public UnionPayService (PayConfigStorage payConfigStorage) { + public UnionPayService (UnionPayConfigStorage payConfigStorage) { super(payConfigStorage); } - public UnionPayService (PayConfigStorage payConfigStorage, HttpConfigStorage configStorage) { + public UnionPayService (UnionPayConfigStorage payConfigStorage, HttpConfigStorage configStorage) { super(payConfigStorage, configStorage); } + /** + * 设置支付配置 + * @param payConfigStorage 支付配置 + */ + @Override + public UnionPayService setPayConfigStorage(UnionPayConfigStorage payConfigStorage) { + super.setPayConfigStorage(payConfigStorage); + if (!payConfigStorage.isCertSign()){ + return this; + } + CertDescriptor certDescriptor = payConfigStorage.getCertDescriptor(); + if (!payConfigStorage.isKeyPrivateInit()){ + certDescriptor.initPrivateSignCert(payConfigStorage.getKeyPrivate(), payConfigStorage.getKeyPrivateCertPwd(), "PKCS12"); + } + if (!payConfigStorage.isKeyPublicInit()){ + certDescriptor.initPublicCert(payConfigStorage.getAcpMiddleCert()); + certDescriptor.initRootCert(payConfigStorage.getAcpRootCert()); + } + return this; + } /** * 根据是否为沙箱环境进行获取请求地址 * @@ -182,7 +201,7 @@ public class UnionPayService extends BasePayService { * @return true通过 */ @Override - public boolean verifySource (String id) { + public boolean verifySource(String id) { return false; } @@ -194,7 +213,7 @@ public class UnionPayService extends BasePayService { * @see PayOrder 支付订单信息 */ @Override - public Map orderInfo (PayOrder order) { + public Map orderInfo(PayOrder order) { Map params = this.getCommonParam(); UnionTransactionType type = (UnionTransactionType)order.getTransactionType(); diff --git a/pay-java-union/src/test/java/PayTest.java b/pay-java-union/src/test/java/PayTest.java index 8c98c1b..76b5446 100644 --- a/pay-java-union/src/test/java/PayTest.java +++ b/pay-java-union/src/test/java/PayTest.java @@ -27,9 +27,19 @@ public class PayTest { //商户id unionPayConfigStorage.setMerId("商户id"); //公钥,验签证书链格式: 中级证书路径;根证书路径 - unionPayConfigStorage.setKeyPublic("D:/certs/acp_test_middle.cer;D:/certs/acp_test_root.cer"); +// unionPayConfigStorage.setKeyPublic("D:/certs/acp_test_middle.cer;D:/certs/acp_test_root.cer"); + //中级证书路径 + unionPayConfigStorage.setAcpMiddleCert("D:/certs/acp_test_middle.cer"); + //根证书路径 + unionPayConfigStorage.setAcpRootCert("D:/certs/acp_test_root.cer"); + //私钥, 私钥证书格式: 私钥证书路径;私钥证书对应的密码 - unionPayConfigStorage.setKeyPrivate("D:/certs/acp_test_sign.pfx;000000"); +// unionPayConfigStorage.setKeyPrivate("D:/certs/acp_test_sign.pfx;000000"); + // 私钥证书路径 + unionPayConfigStorage.setKeyPrivateCert("D:/certs/acp_test_sign.pfx"); + //私钥证书对应的密码 + unionPayConfigStorage.setKeyPrivateCertPwd("000000"); + unionPayConfigStorage.setNotifyUrl("异步回调地址"); unionPayConfigStorage.setReturnUrl("同步回调地址"); unionPayConfigStorage.setSignType("RSA2");