diff --git a/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayController.java b/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayController.java index 62975e3..b6f78f9 100644 --- a/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayController.java +++ b/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayController.java @@ -2,7 +2,6 @@ package com.egzosn.pay.demo.controller; -import com.alibaba.fastjson.JSONObject; import com.egzosn.pay.ali.bean.AliTransactionType; import com.egzosn.pay.common.api.Callback; import com.egzosn.pay.common.api.PayConfigStorage; @@ -310,8 +309,8 @@ public class PayController { PayResponse payResponse = service.getPayResponse(payId); PayConfigStorage storage = payResponse.getStorage(); //获取支付方返回的对应参数 -// Map params = payResponse.getService().getParameter2Map(request.getParameterMap(), request.getInputStream()); - Map params = JSONObject.parseObject("{\"bizType\":\"000201\",\"signPubKeyCert\":\"-----BEGIN CERTIFICATE-----\\r\\nMIIEQzCCAyugAwIBAgIFEBJJZVgwDQYJKoZIhvcNAQEFBQAwWDELMAkGA1UEBhMC\\r\\nQ04xMDAuBgNVBAoTJ0NoaW5hIEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhv\\r\\ncml0eTEXMBUGA1UEAxMOQ0ZDQSBURVNUIE9DQTEwHhcNMTcxMTAxMDcyNDA4WhcN\\r\\nMjAxMTAxMDcyNDA4WjB3MQswCQYDVQQGEwJjbjESMBAGA1UEChMJQ0ZDQSBPQ0Ex\\r\\nMQ4wDAYDVQQLEwVDVVBSQTEUMBIGA1UECxMLRW50ZXJwcmlzZXMxLjAsBgNVBAMU\\r\\nJTA0MUBaMjAxNy0xMS0xQDAwMDQwMDAwOlNJR05AMDAwMDAwMDEwggEiMA0GCSqG\\r\\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDIWO6AESrg+34HgbU9mSpgef0sl6avr1d\\r\\nbD/IjjZYM63SoQi3CZHZUyoyzBKodRzowJrwXmd+hCmdcIfavdvfwi6x+ptJNp9d\\r\\nEtpfEAnJk+4quriQFj1dNiv6uP8ARgn07UMhgdYB7D8aA1j77Yk1ROx7+LFeo7rZ\\r\\nDdde2U1opPxjIqOPqiPno78JMXpFn7LiGPXu75bwY2rYIGEEImnypgiYuW1vo9UO\\r\\nG47NMWTnsIdy68FquPSw5FKp5foL825GNX3oJSZui8d2UDkMLBasf06Jz0JKz5AV\\r\\nblaI+s24/iCfo8r+6WaCs8e6BDkaijJkR/bvRCQeQpbX3V8WoTLVAgMBAAGjgfQw\\r\\ngfEwHwYDVR0jBBgwFoAUz3CdYeudfC6498sCQPcJnf4zdIAwSAYDVR0gBEEwPzA9\\r\\nBghggRyG7yoBATAxMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2EuY29tLmNu\\r\\nL3VzL3VzLTE0Lmh0bTA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vdWNybC5jZmNh\\r\\nLmNvbS5jbi9SU0EvY3JsMjQ4NzIuY3JsMAsGA1UdDwQEAwID6DAdBgNVHQ4EFgQU\\r\\nmQQLyuqYjES7qKO+zOkzEbvdFwgwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF\\r\\nBwMEMA0GCSqGSIb3DQEBBQUAA4IBAQAujhBuOcuxA+VzoUH84uoFt5aaBM3vGlpW\\r\\nKVMz6BUsLbIpp1ho5h+LaMnxMs6jdXXDh/du8X5SKMaIddiLw7ujZy1LibKy2jYi\\r\\nYYfs3tbZ0ffCKQtv78vCgC+IxUUurALY4w58fRLLdu8u8p9jyRFHsQEwSq+W5+bP\\r\\nMTh2w7cDd9h+6KoCN6AMI1Ly7MxRIhCbNBL9bzaxF9B5GK86ARY7ixkuDCEl4XCF\\r\\nJGxeoye9R46NqZ6AA/k97mJun//gmUjStmb9PUXA59fR5suAB5o/5lBySZ8UXkrI\\r\\npp/iLT8vIl1hNgLh0Ghs7DBSx99I+S3VuUzjHNxL6fGRhlix7Rb8\\r\\n-----END CERTIFICATE-----\",\"orderId\":\"20171213224128\",\"signature\":\"l8xBYSoMNzt01DDa9/JYcrQKWxN5tasUgSxf6NNsQK5t+DqMr2G9qhHXnDg5bEzeRyTFP4bM3htX9RTRhXYDy7EEsL46ZD4ib5I6mp2wXx+26zscUcLdJUiddkY5eFvQK4tPC8blw7Y6p858yiVJpHgbOK3cONhS7vwPJtK2jMbkY+GATu3aZ4iygkQc75cG+EW8nJQVwLNh7q9A6A6II18EFxR7XubdlIHXv/InVaS6ux8Wh2nmQlhRRnLtHq1ri7v1QPlu2FzM+kaf7/fn61iGr8zEPj62NzWDXue62LUfb4kTRgdkcJnfJBJl8vjZ/w93UtsnK3zjzJC/Nu+wCw==\",\"txnSubType\":\"01\",\"traceNo\":\"492156\",\"accNo\":\"6221********0000\",\"settleAmt\":\"1000\",\"settleCurrencyCode\":\"156\",\"settleDate\":\"1213\",\"txnType\":\"01\",\"encoding\":\"UTF-8\",\"version\":\"5.1.0\",\"queryId\":\"511712132241284921568\",\"accessType\":\"0\",\"exchangeRate\":\"0\",\"respMsg\":\"success\",\"traceTime\":\"1213224128\",\"txnTime\":\"20171213224128\",\"merId\":\"777290058154626\",\"currencyCode\":\"156\",\"respCode\":\"00\",\"signMethod\":\"01\",\"txnAmt\":\"1000\"}"); + Map params = payResponse.getService().getParameter2Map(request.getParameterMap(), request.getInputStream()); +// Map params = JSONObject.parseObject("{\"bizType\":\"000201\",\"signPubKeyCert\":\"-----BEGIN CERTIFICATE-----\\r\\nMIIEQzCCAyugAwIBAgIFEBJJZVgwDQYJKoZIhvcNAQEFBQAwWDELMAkGA1UEBhMC\\r\\nQ04xMDAuBgNVBAoTJ0NoaW5hIEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhv\\r\\ncml0eTEXMBUGA1UEAxMOQ0ZDQSBURVNUIE9DQTEwHhcNMTcxMTAxMDcyNDA4WhcN\\r\\nMjAxMTAxMDcyNDA4WjB3MQswCQYDVQQGEwJjbjESMBAGA1UEChMJQ0ZDQSBPQ0Ex\\r\\nMQ4wDAYDVQQLEwVDVVBSQTEUMBIGA1UECxMLRW50ZXJwcmlzZXMxLjAsBgNVBAMU\\r\\nJTA0MUBaMjAxNy0xMS0xQDAwMDQwMDAwOlNJR05AMDAwMDAwMDEwggEiMA0GCSqG\\r\\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDIWO6AESrg+34HgbU9mSpgef0sl6avr1d\\r\\nbD/IjjZYM63SoQi3CZHZUyoyzBKodRzowJrwXmd+hCmdcIfavdvfwi6x+ptJNp9d\\r\\nEtpfEAnJk+4quriQFj1dNiv6uP8ARgn07UMhgdYB7D8aA1j77Yk1ROx7+LFeo7rZ\\r\\nDdde2U1opPxjIqOPqiPno78JMXpFn7LiGPXu75bwY2rYIGEEImnypgiYuW1vo9UO\\r\\nG47NMWTnsIdy68FquPSw5FKp5foL825GNX3oJSZui8d2UDkMLBasf06Jz0JKz5AV\\r\\nblaI+s24/iCfo8r+6WaCs8e6BDkaijJkR/bvRCQeQpbX3V8WoTLVAgMBAAGjgfQw\\r\\ngfEwHwYDVR0jBBgwFoAUz3CdYeudfC6498sCQPcJnf4zdIAwSAYDVR0gBEEwPzA9\\r\\nBghggRyG7yoBATAxMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2EuY29tLmNu\\r\\nL3VzL3VzLTE0Lmh0bTA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vdWNybC5jZmNh\\r\\nLmNvbS5jbi9SU0EvY3JsMjQ4NzIuY3JsMAsGA1UdDwQEAwID6DAdBgNVHQ4EFgQU\\r\\nmQQLyuqYjES7qKO+zOkzEbvdFwgwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF\\r\\nBwMEMA0GCSqGSIb3DQEBBQUAA4IBAQAujhBuOcuxA+VzoUH84uoFt5aaBM3vGlpW\\r\\nKVMz6BUsLbIpp1ho5h+LaMnxMs6jdXXDh/du8X5SKMaIddiLw7ujZy1LibKy2jYi\\r\\nYYfs3tbZ0ffCKQtv78vCgC+IxUUurALY4w58fRLLdu8u8p9jyRFHsQEwSq+W5+bP\\r\\nMTh2w7cDd9h+6KoCN6AMI1Ly7MxRIhCbNBL9bzaxF9B5GK86ARY7ixkuDCEl4XCF\\r\\nJGxeoye9R46NqZ6AA/k97mJun//gmUjStmb9PUXA59fR5suAB5o/5lBySZ8UXkrI\\r\\npp/iLT8vIl1hNgLh0Ghs7DBSx99I+S3VuUzjHNxL6fGRhlix7Rb8\\r\\n-----END CERTIFICATE-----\",\"orderId\":\"20171213224128\",\"signature\":\"l8xBYSoMNzt01DDa9/JYcrQKWxN5tasUgSxf6NNsQK5t+DqMr2G9qhHXnDg5bEzeRyTFP4bM3htX9RTRhXYDy7EEsL46ZD4ib5I6mp2wXx+26zscUcLdJUiddkY5eFvQK4tPC8blw7Y6p858yiVJpHgbOK3cONhS7vwPJtK2jMbkY+GATu3aZ4iygkQc75cG+EW8nJQVwLNh7q9A6A6II18EFxR7XubdlIHXv/InVaS6ux8Wh2nmQlhRRnLtHq1ri7v1QPlu2FzM+kaf7/fn61iGr8zEPj62NzWDXue62LUfb4kTRgdkcJnfJBJl8vjZ/w93UtsnK3zjzJC/Nu+wCw==\",\"txnSubType\":\"01\",\"traceNo\":\"492156\",\"accNo\":\"6221********0000\",\"settleAmt\":\"1000\",\"settleCurrencyCode\":\"156\",\"settleDate\":\"1213\",\"txnType\":\"01\",\"encoding\":\"UTF-8\",\"version\":\"5.1.0\",\"queryId\":\"511712132241284921568\",\"accessType\":\"0\",\"exchangeRate\":\"0\",\"respMsg\":\"success\",\"traceTime\":\"1213224128\",\"txnTime\":\"20171213224128\",\"merId\":\"777290058154626\",\"currencyCode\":\"156\",\"respCode\":\"00\",\"signMethod\":\"01\",\"txnAmt\":\"1000\"}"); if (null == params) { return payResponse.getService().getPayOutMessage("fail", "失败").toMessage(); diff --git a/pay-java-demo/src/main/java/com/egzosn/pay/demo/dao/ApyAccountRepository.java b/pay-java-demo/src/main/java/com/egzosn/pay/demo/dao/ApyAccountRepository.java index 2f47be5..fa71b33 100644 --- a/pay-java-demo/src/main/java/com/egzosn/pay/demo/dao/ApyAccountRepository.java +++ b/pay-java-demo/src/main/java/com/egzosn/pay/demo/dao/ApyAccountRepository.java @@ -88,9 +88,9 @@ public class ApyAccountRepository { apyAccount4.setPublicKey("D:/certs/acp_test_middle.cer;D:/certs/acp_test_root.cer"); //私钥, 私钥证书格式: 私钥证书路径;私钥证书对应的密码 apyAccount4.setPrivateKey("D:/certs/acp_test_sign.pfx;000000"); - apyAccount4.setNotifyUrl("http://b1234780541.eicp.net/payBack4.json"); + apyAccount4.setNotifyUrl("http://127.0.0.1/payBack4.json"); // 无需同步回调可不填 app填这个就可以 - apyAccount4.setReturnUrl("http://b1234780541.eicp.net/payBack4.json"); + apyAccount4.setReturnUrl("http://127.0.0.1/payBack4.json"); apyAccount4.setSeller(""); apyAccount4.setInputCharset("UTF-8"); apyAccount4.setSignType(SignUtils.RSA2.name()); diff --git a/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/PayResponse.java b/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/PayResponse.java index cbf6dc7..cd8b406 100644 --- a/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/PayResponse.java +++ b/pay-java-demo/src/main/java/com/egzosn/pay/demo/service/PayResponse.java @@ -111,7 +111,7 @@ public class PayResponse { .handler(autowire(new FuiouPayMessageHandler(payId))) .end() .rule() - .msgType(MsgType.text.name()) + .msgType(MsgType.json.name()) .payType(PayType.unionPay.name()) .handler(autowire(new UnionPayMessageHandler(payId))) .end() diff --git a/pay-java-union/README.md b/pay-java-union/README.md index 8f3cd8e..ce82aba 100644 --- a/pay-java-union/README.md +++ b/pay-java-union/README.md @@ -1,6 +1,6 @@ -## 微信支付简单例子 +## 银联支付简单例子 #### 支付配置 @@ -49,6 +49,8 @@ ```java UnionPayService service = new UnionPayService(unionPayConfigStorage); + + unionPayConfigStorage.setCertSign(true);//是否为证书签名 ``` @@ -57,6 +59,19 @@ ```java PayOrder payOrder = new PayOrder("订单title", "摘要", new BigDecimal(0.01) , new SimpleDateFormat("yyyyMMddHHmmss").format(System.currentTimeMillis())); ``` +#### 网页支付 +```java +// 手机网页支付(WAP支付) + payOrder.setTransactionType(UnionTransactionType.WAP); +// 网关支付 +// payOrder.setTransactionType(UnionTransactionType.WEB); +// 企业网银支付(B2B支付) +// payOrder.setTransactionType(UnionTransactionType.B2B); + //获取支付所需的信息 + Map directOrderInfo = service.orderInfo(payOrder); + //获取表单提交对应的字符串,将其序列化到页面即可, + String directHtml = service.buildRequest(directOrderInfo, MethodType.POST); +``` #### 主扫申请二维码交易 @@ -99,7 +114,7 @@ #### 文件传输类接口:后台获取对账文件交易,只有同步应答 ```java - String fileConten = service.downloadbill(new Date(),"格式为MMDD"); + String fileConten = service.downloadbill(null,"文件类型,一般商户填写00即可"); ``` \ No newline at end of file diff --git a/pay-java-union/src/main/java/com/egzosn/pay/union/bean/UnionTransactionType.java b/pay-java-union/src/main/java/com/egzosn/pay/union/bean/UnionTransactionType.java index ce3dcb4..ad4d5ec 100644 --- a/pay-java-union/src/main/java/com/egzosn/pay/union/bean/UnionTransactionType.java +++ b/pay-java-union/src/main/java/com/egzosn/pay/union/bean/UnionTransactionType.java @@ -1,6 +1,7 @@ package com.egzosn.pay.union.bean; import com.egzosn.pay.common.bean.TransactionType; +import com.egzosn.pay.common.util.str.StringUtils; import java.util.Map; @@ -90,7 +91,9 @@ public enum UnionTransactionType implements TransactionType{ //业务类型 contentData.put(SDKConstants.param_bizType,this.getBizType()); //渠道类型 - contentData.put(SDKConstants.param_channelType,this.getChannelType()); + if(StringUtils.isNotBlank(this.getChannelType())){ + contentData.put(SDKConstants.param_channelType,this.getChannelType()); + } } diff --git a/pay-java-union/src/test/java/PayTest.java b/pay-java-union/src/test/java/PayTest.java index 460b2f9..dbdeff0 100644 --- a/pay-java-union/src/test/java/PayTest.java +++ b/pay-java-union/src/test/java/PayTest.java @@ -7,7 +7,6 @@ import com.egzosn.pay.union.bean.UnionTransactionType; import java.awt.image.BufferedImage; import java.math.BigDecimal; import java.text.SimpleDateFormat; -import java.util.Date; import java.util.Map; /** @@ -21,9 +20,14 @@ public class PayTest { UnionPayConfigStorage unionPayConfigStorage = new UnionPayConfigStorage(); + //是否为证书签名 + unionPayConfigStorage.setCertSign(true); + //商户id unionPayConfigStorage.setMerId("商户id"); - unionPayConfigStorage.setKeyPublic("公钥,验签证书链格式: 中级证书路径;根证书路径"); - unionPayConfigStorage.setKeyPrivate("私钥, 私钥证书格式: 私钥证书路径;私钥证书对应的密码"); + //公钥,验签证书链格式: 中级证书路径;根证书路径 + 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("异步回调地址"); unionPayConfigStorage.setReturnUrl("同步回调地址"); unionPayConfigStorage.setSignType("RSA2"); @@ -36,8 +40,13 @@ public class PayTest { PayOrder payOrder = new PayOrder("订单title", "摘要", new BigDecimal(0.01) , new SimpleDateFormat("yyyyMMddHHmmss").format(System.currentTimeMillis())); - /*----------- 网关支付-------------------*/ + /*----------- 网页支付-------------------*/ +// 手机网页支付(WAP支付) +// payOrder.setTransactionType(UnionTransactionType.WAP); +// 网关支付 payOrder.setTransactionType(UnionTransactionType.WEB); +// 企业网银支付(B2B支付) +// payOrder.setTransactionType(UnionTransactionType.B2B); //获取支付所需的信息 Map directOrderInfo = service.orderInfo(payOrder); //获取表单提交对应的字符串,将其序列化到页面即可, @@ -74,8 +83,7 @@ public class PayTest { /*-----------文件传输类接口:后台获取对账文件交易,只有同步应答 ------------------------------*/ - String fileConten = service.downloadbill(new Date(),"格式为MMDD"); - /*-----------退货交易:后台资金类交易,有同步应答和后台通知应答------------------------------*/ + String fileConten = service.downloadbill(null,"文件类型,一般商户填写00即可"); /*-----------退货交易:后台资金类交易,有同步应答和后台通知应答------------------------------*/ /*-----------回调处理-------------------*/