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");