diff --git a/README.md b/README.md
index b030965..af47b49 100644
--- a/README.md
+++ b/README.md
@@ -33,7 +33,7 @@
com.egzosn
pay-java-common
- 2.0.9-RELEASE
+ 2.10.1-RELEASE
```
@@ -45,7 +45,7 @@
com.egzosn
{module-name}
- 2.0.9-RELEASE
+ 2.10.1-RELEASE
```
diff --git a/pay-java-ali/pom.xml b/pay-java-ali/pom.xml
index 842a3a1..fd78ef1 100644
--- a/pay-java-ali/pom.xml
+++ b/pay-java-ali/pom.xml
@@ -5,7 +5,7 @@
pay-java-parent
com.egzosn
- 2.0.9-RELEASE
+ 2.10.1-SNAPSHOT
4.0.0
pay-java-ali
diff --git a/pay-java-common/pom.xml b/pay-java-common/pom.xml
index e6ad9c3..ef8383a 100644
--- a/pay-java-common/pom.xml
+++ b/pay-java-common/pom.xml
@@ -5,13 +5,13 @@
pay-java-parent
com.egzosn
- 2.0.9-RELEASE
+ 2.10.1-SNAPSHOT
4.0.0
jar
com.egzosn
pay-java-common
- 2.0.9-RELEASE
+ 2.10.1-SNAPSHOT
diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/util/XML.java b/pay-java-common/src/main/java/com/egzosn/pay/common/util/XML.java
index c4e118d..6b29f92 100644
--- a/pay-java-common/src/main/java/com/egzosn/pay/common/util/XML.java
+++ b/pay-java-common/src/main/java/com/egzosn/pay/common/util/XML.java
@@ -193,7 +193,7 @@ public class XML {
m = new JSONObject();
}
try {
- DocumentBuilder documentBuilder = newDocumentBuilder();;
+ DocumentBuilder documentBuilder = newDocumentBuilder();
org.w3c.dom.Document doc = documentBuilder.parse(in);
doc.getDocumentElement().normalize();
NodeList children = doc.getDocumentElement().getChildNodes();
diff --git a/pay-java-demo/pom.xml b/pay-java-demo/pom.xml
index a9997c5..0c936b3 100644
--- a/pay-java-demo/pom.xml
+++ b/pay-java-demo/pom.xml
@@ -5,7 +5,7 @@
pay-java-parent
com.egzosn
- 2.0.9-RELEASE
+ 2.10.1-SNAPSHOT
4.0.0
war
diff --git a/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/UnionPayController.java b/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/UnionPayController.java
new file mode 100644
index 0000000..2f9a93a
--- /dev/null
+++ b/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/UnionPayController.java
@@ -0,0 +1,225 @@
+
+package com.egzosn.pay.demo.controller;
+
+
+import com.egzosn.pay.common.api.PayService;
+import com.egzosn.pay.common.bean.*;
+import com.egzosn.pay.common.util.sign.SignUtils;
+import com.egzosn.pay.demo.request.QueryOrder;
+import com.egzosn.pay.union.api.UnionPayConfigStorage;
+import com.egzosn.pay.union.api.UnionPayService;
+import com.egzosn.pay.union.bean.UnionTransactionType;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.PostConstruct;
+import javax.imageio.ImageIO;
+import javax.servlet.http.HttpServletRequest;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import static com.egzosn.pay.union.bean.UnionTransactionType.WEB;
+
+/**
+ * 银联相关
+ *
+ * @author: egan
+ * @email egzosn@gmail.com
+ * @date 2016/11/18 0:25
+ */
+@RestController
+@RequestMapping("union")
+public class UnionPayController {
+
+ private PayService service = null;
+
+ @PostConstruct
+ public void init() {
+ UnionPayConfigStorage unionPayConfigStorage = new UnionPayConfigStorage();
+ 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.setNotifyUrl("http://www.pay.egzosn.com/payBack.json");
+ // 无需同步回调可不填 app填这个就可以
+ unionPayConfigStorage.setReturnUrl("http://www.pay.egzosn.com/payBack.json");
+ unionPayConfigStorage.setSignType(SignUtils.RSA2.name());
+ //单一支付可不填
+ unionPayConfigStorage.setPayType("unionPay");
+ unionPayConfigStorage.setInputCharset("UTF-8");
+ //是否为测试账号,沙箱环境
+ unionPayConfigStorage.setTest(true);
+ service = new UnionPayService(unionPayConfigStorage);
+
+
+ }
+
+
+
+ /**
+ * 跳到支付页面
+ * 针对实时支付,即时付款
+ *
+ * @param price 金额
+ * @return 跳到支付页面
+ */
+ @RequestMapping(value = "toPay.html", produces = "text/html;charset=UTF-8")
+ public String toPay( BigDecimal price) {
+ //及时收款
+ PayOrder order = new PayOrder("订单title", "摘要", null == price ? new BigDecimal(0.01) : price, UUID.randomUUID().toString().replace("-", ""), WEB);
+ //WAP
+// PayOrder order = new PayOrder("订单title", "摘要", null == price ? new BigDecimal(0.01) : price, UUID.randomUUID().toString().replace("-", ""), UnionTransactionType.WAP);
+ //企业网银支付(B2B支付)
+// PayOrder order = new PayOrder("订单title", "摘要", null == price ? new BigDecimal(0.01) : price, UUID.randomUUID().toString().replace("-", ""), UnionTransactionType.B2B);
+
+ Map orderInfo = service.orderInfo(order);
+ return service.buildRequest(orderInfo, MethodType.POST);
+ }
+
+
+
+
+ /**
+ * APP 获取支付预订单信息
+ *
+ * @return 支付预订单信息
+ */
+ @RequestMapping("app")
+ public Map app() {
+ Map data = new HashMap<>();
+ data.put("code", 0);
+ PayOrder order = new PayOrder("订单title", "摘要", new BigDecimal(0.01), SignUtils.randomStr());
+ //App支付
+ order.setTransactionType(UnionTransactionType.APP);
+
+ //APPLE支付 苹果付
+// order.setTransactionType(UnionTransactionType.APPLE);
+
+ data.put("orderInfo", service.orderInfo(order));
+ return data;
+ }
+
+ /**
+ * 获取二维码图像 APPLY_QR_CODE
+ * 二维码支付
+ * @param price 金额
+ * @return 二维码图像
+ */
+ @RequestMapping(value = "toQrPay.jpg", produces = "image/jpeg;charset=UTF-8")
+ public byte[] toWxQrPay( BigDecimal price) throws IOException {
+ //获取对应的支付账户操作工具(可根据账户id)
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ImageIO.write(service.genQrPay( new PayOrder("订单title", "摘要", null == price ? new BigDecimal(0.01) : price, System.currentTimeMillis()+"", UnionTransactionType.APPLY_QR_CODE)), "JPEG", baos);
+ return baos.toByteArray();
+ }
+
+
+ /**
+ * 刷卡付,pos主动扫码付款(条码付) CONSUME
+ * @param authCode 授权码,条码等
+ * @param price 金额
+ * @return 支付结果
+ */
+ @RequestMapping(value = "microPay")
+ public Map microPay(BigDecimal price, String authCode) throws IOException {
+ //获取对应的支付账户操作工具(可根据账户id)
+ //条码付
+ PayOrder order = new PayOrder("huodull order", "huodull order", null == price ? new BigDecimal(0.01) : price, SignUtils.randomStr(), UnionTransactionType.CONSUME);
+ //设置授权码,条码等
+ order.setAuthCode(authCode);
+ //支付结果
+ Map params = service.microPay(order);
+ //校验
+ if (service.verify(params)) {
+
+ //支付校验通过后的处理
+ //......业务逻辑处理块........
+
+
+ }
+ //这里开发者自行处理
+ return params;
+ }
+
+ /**
+ * 支付回调地址
+ *
+ * @param request
+ *
+ * @return
+ */
+ @RequestMapping(value = "payBack.json")
+ public String payBack(HttpServletRequest request) throws IOException {
+
+ //获取支付方返回的对应参数
+ Map params = service.getParameter2Map(request.getParameterMap(), request.getInputStream());
+ if (null == params) {
+ return service.getPayOutMessage("fail", "失败").toMessage();
+ }
+
+ //校验
+ if (service.verify(params)) {
+ //这里处理业务逻辑
+ //......业务逻辑处理块........
+ return service.getPayOutMessage("success", "成功").toMessage();
+ }
+
+ return service.getPayOutMessage("fail", "失败").toMessage();
+ }
+
+
+ /**
+ * 查询
+ *
+ * @param order 订单的请求体
+ * @return 返回查询回来的结果集,支付方原值返回
+ */
+ @RequestMapping("query")
+ public Map query(QueryOrder order) {
+ return service.query(order.getTradeNo(), order.getOutTradeNo());
+ }
+
+
+ /**
+ * 申请退款接口
+ *
+ * @param order 订单的请求体
+ * @return 返回支付方申请退款后的结果
+ */
+ @RequestMapping("refund")
+ public Map refund(RefundOrder order) {
+ return service.refund(order);
+ }
+
+ /**
+ * 查询退款
+ *
+ * @param order 订单的请求体
+ * @return 返回支付方查询退款后的结果
+ */
+ @RequestMapping("refundquery")
+ public Map refundquery(QueryOrder order) {
+ return service.refundquery(order.getTradeNo(), order.getOutTradeNo());
+ }
+
+ /**
+ * 下载对账单
+ *
+ * @param order 订单的请求体
+ * @return 返回支付方下载对账单的结果
+ */
+ @RequestMapping("downloadbill")
+ public Object downloadbill(QueryOrder order) {
+ return service.downloadbill(order.getBillDate(), order.getBillType());
+ }
+
+
+
+}
diff --git a/pay-java-fuiou/pom.xml b/pay-java-fuiou/pom.xml
index a5d9c0e..6548f3f 100644
--- a/pay-java-fuiou/pom.xml
+++ b/pay-java-fuiou/pom.xml
@@ -5,7 +5,7 @@
pay-java-parent
com.egzosn
- 2.0.9-RELEASE
+ 2.10.1-SNAPSHOT
4.0.0
pay-java-fuiou
diff --git a/pay-java-payoneer/pom.xml b/pay-java-payoneer/pom.xml
index a903773..6bd7bc8 100644
--- a/pay-java-payoneer/pom.xml
+++ b/pay-java-payoneer/pom.xml
@@ -5,7 +5,7 @@
pay-java-parent
com.egzosn
- 2.0.9-RELEASE
+ 2.10.1-SNAPSHOT
4.0.0
pay-java-payoneer
diff --git a/pay-java-paypal/pom.xml b/pay-java-paypal/pom.xml
index e133da2..f3f8320 100644
--- a/pay-java-paypal/pom.xml
+++ b/pay-java-paypal/pom.xml
@@ -5,7 +5,7 @@
pay-java-parent
com.egzosn
- 2.0.9-RELEASE
+ 2.10.1-SNAPSHOT
4.0.0
diff --git a/pay-java-union/README.md b/pay-java-union/README.md
index 0e29f92..bbfb124 100644
--- a/pay-java-union/README.md
+++ b/pay-java-union/README.md
@@ -1,9 +1,159 @@
-## Payoneer简单例子
+## 银联简单例子
#### 支付配置
+```java
+
+ UnionPayConfigStorage unionPayConfigStorage = new UnionPayConfigStorage();
+ 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.setNotifyUrl("http://www.pay.egzosn.com/payBack.json");
+ // 无需同步回调可不填 app填这个就可以
+ unionPayConfigStorage.setReturnUrl("http://www.pay.egzosn.com/payBack.json");
+ unionPayConfigStorage.setSignType(SignUtils.RSA2.name());
+ //单一支付可不填
+ unionPayConfigStorage.setPayType("unionPay");
+ unionPayConfigStorage.setInputCharset("UTF-8");
+ //是否为测试账号,沙箱环境
+ unionPayConfigStorage.setTest(true);
+
+```
-
\ No newline at end of file
+#### 创建支付服务
+
+
+```java
+ //支付服务
+ PayService service = new UnionPayService(unionPayConfigStorage);
+
+ //设置网络请求配置根据需求进行设置
+ //service.setRequestTemplateConfigStorage(httpConfigStorage)
+
+```
+
+
+#### 创建支付订单信息
+
+```java
+
+ //支付订单基础信息
+ PayOrder payOrder = new PayOrder("订单title", "摘要", new BigDecimal(0.01) , UUID.randomUUID().toString().replace("-", ""));
+
+```
+
+
+#### 扫码付
+
+```java
+
+
+ /*-----------扫码付-------------------*/
+ payOrder.setTransactionType(UnionTransactionType.APPLY_QR_CODE);
+ //获取扫码付的二维码
+ BufferedImage image = service.genQrPay(payOrder);
+ /*-----------/扫码付-------------------*/
+
+```
+
+
+#### APP支付, 苹果付
+
+```java
+
+ /*-----------APP-------------------*/
+ //App支付
+ order.setTransactionType(UnionTransactionType.APP);
+
+ //APPLE支付 苹果付
+// order.setTransactionType(UnionTransactionType.APPLE);
+
+ //获取APP支付所需的信息组,直接给app端就可使用
+ Map appOrderInfo = service.orderInfo(payOrder);
+ /*-----------/APP-------------------*/
+
+```
+
+
+
+#### 即时到帐 WAP 网页支付 企业网银支付(B2B支付)
+
+```java
+
+ /*-----------即时到帐 WAP 网页支付-------------------*/
+// payOrder.setTransactionType(UnionTransactionType.WAP); //WAP支付
+
+// payOrder.setTransactionType(UnionTransactionType.B2B); //企业网银支付(B2B支付)
+
+ payOrder.setTransactionType(UnionTransactionType.WEB); // PC网页支付
+ //获取支付所需的信息
+ Map directOrderInfo = service.orderInfo(payOrder);
+
+ //获取表单提交对应的字符串,将其序列化到页面即可,
+ String directHtml = service.buildRequest(directOrderInfo, MethodType.POST);
+ /*-----------/即时到帐 WAP 网页支付-------------------*/
+
+```
+
+
+#### 条码付 声波付
+
+```java
+
+ /*-----------条码付 -------------------*/
+
+ payOrder.setTransactionType(UnionTransactionType.CONSUME);//条码付
+
+ payOrder.setAuthCode("条码信息或者声波信息");
+ // 支付结果
+ Map params = service.microPay(payOrder);
+ /*-----------/条码付 声波付-------------------*/
+
+```
+
+
+
+#### 回调处理
+
+```java
+
+ /*-----------回调处理-------------------*/
+ //HttpServletRequest request;
+ Map params = service.getParameter2Map(request.getParameterMap(), request.getInputStream());
+ if (service.verify(params)){
+ System.out.println("支付成功");
+ return;
+ }
+ System.out.println("支付失败");
+
+
+ /*-----------回调处理-------------------*/
+
+```
+
+
+
+#### 支付订单查询
+
+```java
+
+ Map result = service..query(null, "我方系统单号");
+
+```
+
+
+#### 申请退款接口
+ ```java
+
+ RefundOrder order = new RefundOrder(null, "原交易查询流水号", "退款金额", "订单总金额");
+ order.setRefundNo("退款单号")
+ Map result = service.refund(order);
+
+```
diff --git a/pay-java-union/pom.xml b/pay-java-union/pom.xml
index 6b44d64..5877c9f 100644
--- a/pay-java-union/pom.xml
+++ b/pay-java-union/pom.xml
@@ -5,7 +5,7 @@
pay-java-parent
com.egzosn
- 2.0.9-RELEASE
+ 2.10.1-SNAPSHOT
4.0.0
diff --git a/pay-java-wx-youdian/pom.xml b/pay-java-wx-youdian/pom.xml
index f94fa8d..ceafe4e 100644
--- a/pay-java-wx-youdian/pom.xml
+++ b/pay-java-wx-youdian/pom.xml
@@ -5,7 +5,7 @@
pay-java-parent
com.egzosn
- 2.0.9-RELEASE
+ 2.10.1-SNAPSHOT
4.0.0
pay-java-wx-youdian
diff --git a/pay-java-wx/pom.xml b/pay-java-wx/pom.xml
index 7cc6cde..6dbe136 100644
--- a/pay-java-wx/pom.xml
+++ b/pay-java-wx/pom.xml
@@ -5,7 +5,7 @@
pay-java-parent
com.egzosn
- 2.0.9-RELEASE
+ 2.10.1-SNAPSHOT
4.0.0
pay-java-wx
diff --git a/pom.xml b/pom.xml
index 6e87beb..1c0b6b0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
com.egzosn
pay-java-parent
pom
- 2.0.9-RELEASE
+ 2.10.1-SNAPSHOT
Pay Java - Parent
Pay Java Parent
@@ -51,7 +51,7 @@
- 2.0.9-RELEASE
+ 2.10.1-SNAPSHOT
4.5.4
1.2.17
1.2.41