Skip to content

Commit ab32127

Browse files
committed
增加注释
1 parent e6aa309 commit ab32127

6 files changed

Lines changed: 106 additions & 44 deletions

File tree

pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/UnionPayController.java

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33

44

55
import com.egzosn.pay.common.api.PayService;
6-
import com.egzosn.pay.common.bean.*;
6+
import com.egzosn.pay.common.bean.MethodType;
7+
import com.egzosn.pay.common.bean.PayOrder;
8+
import com.egzosn.pay.common.bean.RefundOrder;
79
import com.egzosn.pay.common.http.HttpConfigStorage;
810
import com.egzosn.pay.common.util.sign.SignUtils;
911
import com.egzosn.pay.demo.request.QueryOrder;
@@ -36,7 +38,7 @@
3638
@RequestMapping("union")
3739
public class UnionPayController {
3840

39-
private PayService service = null;
41+
private UnionPayService service = null;
4042

4143
@PostConstruct
4244
public void init() {
@@ -50,17 +52,17 @@ public void init() {
5052
unionPayConfigStorage.setAcpMiddleCert("D:/certs/acp_test_middle.cer");
5153
//根证书路径
5254
unionPayConfigStorage.setAcpRootCert("D:/certs/acp_test_root.cer");
53-
5455
//私钥, 私钥证书格式: 私钥证书路径;私钥证书对应的密码
5556
// unionPayConfigStorage.setKeyPrivate("D:/certs/acp_test_sign.pfx;000000");
5657
// 私钥证书路径
5758
unionPayConfigStorage.setKeyPrivateCert("D:/certs/acp_test_sign.pfx");
5859
//私钥证书对应的密码
5960
unionPayConfigStorage.setKeyPrivateCertPwd("000000");
60-
61-
unionPayConfigStorage.setNotifyUrl("http://www.pay.egzosn.com/payBack.json");
62-
// 无需同步回调可不填 app填这个就可以
61+
//前台通知网址 即SDKConstants.param_frontUrl
6362
unionPayConfigStorage.setReturnUrl("http://www.pay.egzosn.com/payBack.json");
63+
//后台通知地址 即SDKConstants.param_backUrl
64+
unionPayConfigStorage.setNotifyUrl("http://www.pay.egzosn.com/payBack.json");
65+
//加密方式
6466
unionPayConfigStorage.setSignType(SignUtils.RSA2.name());
6567
//单一支付可不填
6668
unionPayConfigStorage.setPayType("unionPay");
@@ -82,25 +84,38 @@ public void init() {
8284

8385

8486
/**
85-
* 跳到支付页面
86-
* 针对实时支付,即时付款
87-
*
87+
* ---业务实现例子1---
88+
* 功能:生成自动跳转的Html表单
89+
* 业务类型(关键字):网关支付(WEB)/手机网页支付,企业网银支付(B2B),
8890
* @param price 金额
89-
* @return 跳到支付页面
91+
* @return 生成自动跳转的Html表单
9092
*/
9193
@RequestMapping(value = "toPay.html", produces = "text/html;charset=UTF-8")
9294
public String toPay( BigDecimal price) {
93-
//及时收款
94-
PayOrder order = new PayOrder("订单title", "摘要", null == price ? new BigDecimal(0.01) : price, UUID.randomUUID().toString().replace("-", ""), WEB);
95-
//WAP
96-
// PayOrder order = new PayOrder("订单title", "摘要", null == price ? new BigDecimal(0.01) : price, UUID.randomUUID().toString().replace("-", ""), UnionTransactionType.WAP);
95+
//网关支付(WEB)/手机网页支付
96+
PayOrder order = new PayOrder("订单title", "摘要", null == price ? new BigDecimal(0.01) : price, UUID.randomUUID().toString().replace("-", ""),
97+
WEB);
9798
//企业网银支付(B2B支付)
9899
// PayOrder order = new PayOrder("订单title", "摘要", null == price ? new BigDecimal(0.01) : price, UUID.randomUUID().toString().replace("-", ""), UnionTransactionType.B2B);
99100

100101
Map orderInfo = service.orderInfo(order);
101102
return service.buildRequest(orderInfo, MethodType.POST);
102103
}
103104

105+
/**
106+
* ---业务实现例子2---
107+
* 功能:获取调起控件的tn号,支付结果等
108+
* 业务类型:手机控件支付产品(WAP),
109+
* @param price 金额
110+
* @return 支付结果
111+
*/
112+
@RequestMapping(value = "toPay.json")
113+
public Map<String, Object> sendHttpRequest( BigDecimal price) {
114+
//手机控件支付产品
115+
PayOrder order = new PayOrder("订单title", "摘要", null == price ? new BigDecimal(0.01) : price, UUID.randomUUID().toString().replace("-", "")
116+
,UnionTransactionType.WAP);
117+
return service.sendHttpRequest(order);
118+
}
104119

105120

106121

@@ -202,7 +217,7 @@ public String payBackBefore(HttpServletRequest request) throws IOException {
202217
*
203218
* @return
204219
*
205-
* 业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看{@link com.egzosn.pay.common.api.PayService#setPayMessageHandler(com.egzosn.pay.common.api.PayMessageHandler)}
220+
* 业务处理在对应的PayMessageHandler里面处理,在哪里设置PayMessageHandler,详情查看{@link PayService#setPayMessageHandler(com.egzosn.pay.common.api.PayMessageHandler)}
206221
*
207222
* 如果未设置 {@link com.egzosn.pay.common.api.PayMessageHandler} 那么会使用默认的 {@link com.egzosn.pay.common.api.DefaultPayMessageHandler}
208223
*

pay-java-payoneer/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>pay-java-parent</artifactId>
77
<groupId>com.egzosn</groupId>
8-
<version>2.12.6-SNAPSHOT</version>
8+
<version>2.12.6</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111
<artifactId>pay-java-payoneer</artifactId>

pay-java-paypal/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>pay-java-parent</artifactId>
77
<groupId>com.egzosn</groupId>
8-
<version>2.12.6-SNAPSHOT</version>
8+
<version>2.12.6</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayService.java

Lines changed: 54 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,21 @@ public boolean verifySource(String id) {
205205
return false;
206206
}
207207

208+
/**
209+
* 订单超时时间。
210+
* 超过此时间后,除网银交易外,其他交易银联系统会拒绝受理,提示超时。 跳转银行网银交易如果超时后交易成功,会自动退款,大约5个工作日金额返还到持卡人账户。
211+
* 此时间建议取支付时的北京时间加15分钟。
212+
* 超过超时时间调查询接口应答origRespCode不是A6或者00的就可以判断为失败。
213+
* @param expirationTime 超时时间
214+
* @return 具体的时间字符串
215+
*/
216+
private String getPayTimeout(Date expirationTime) {
217+
//
218+
if (null != expirationTime) {
219+
return DateUtils.formatDate(expirationTime, DateUtils.YYYYMMDDHHMMSS);
220+
}
221+
return DateUtils.formatDate(new Timestamp(System.currentTimeMillis() + 30 * 60 * 1000), DateUtils.YYYYMMDDHHMMSS);
222+
}
208223
/**
209224
* 返回创建的订单信息
210225
*
@@ -215,7 +230,11 @@ public boolean verifySource(String id) {
215230
@Override
216231
public Map<String, Object> orderInfo(PayOrder order) {
217232
Map<String, Object> params = this.getCommonParam();
218-
233+
// if(order instanceof UnionPayOrder){
234+
// UnionPayOrder unionPayOrder = (UnionPayOrder)order;
235+
// //todo 其他参数
236+
//// params.put();
237+
// }
219238
UnionTransactionType type = (UnionTransactionType) order.getTransactionType();
220239

221240

@@ -230,18 +249,11 @@ public Map<String, Object> orderInfo(PayOrder order) {
230249
switch (type) {
231250
case WAP:
232251
case WEB:
252+
//todo PCwap网关跳转支付特殊用法.txt
233253
case B2B:
234254
params.put(SDKConstants.param_txnAmt, Util.conversionCentAmount(order.getPrice()));
235255
params.put("orderDesc", order.getSubject());
236-
// 订单超时时间。
237-
// 超过此时间后,除网银交易外,其他交易银联系统会拒绝受理,提示超时。 跳转银行网银交易如果超时后交易成功,会自动退款,大约5个工作日金额返还到持卡人账户。
238-
// 此时间建议取支付时的北京时间加15分钟。
239-
// 超过超时时间调查询接口应答origRespCode不是A6或者00的就可以判断为失败。
240-
if (null != order.getExpirationTime()) {
241-
params.put(SDKConstants.param_payTimeout, DateUtils.formatDate(order.getExpirationTime(), DateUtils.YYYYMMDDHHMMSS));
242-
} else {
243-
params.put(SDKConstants.param_payTimeout, DateUtils.formatDate(new Timestamp(System.currentTimeMillis() + 30 * 60 * 1000), DateUtils.YYYYMMDDHHMMSS));
244-
}
256+
params.put(SDKConstants.param_payTimeout, getPayTimeout(order.getExpirationTime()));
245257

246258
params.put(SDKConstants.param_frontUrl, payConfigStorage.getReturnUrl());
247259
break;
@@ -250,18 +262,15 @@ public Map<String, Object> orderInfo(PayOrder order) {
250262
params.put(SDKConstants.param_qrNo, order.getAuthCode());
251263
break;
252264
case APPLY_QR_CODE:
253-
if (null != order.getPrice()){
265+
if (null != order.getPrice()) {
254266
params.put(SDKConstants.param_txnAmt, Util.conversionCentAmount(order.getPrice()));
255267
}
256-
257-
if (null != order.getExpirationTime()) {
258-
params.put(SDKConstants.param_payTimeout, DateUtils.formatDate(order.getExpirationTime(), DateUtils.YYYYMMDDHHMMSS));
259-
} else {
260-
params.put(SDKConstants.param_payTimeout, DateUtils.formatDate(new Timestamp(System.currentTimeMillis() + 30 * 60 * 1000), DateUtils.YYYYMMDDHHMMSS));
261-
}
262-
268+
params.put(SDKConstants.param_payTimeout, getPayTimeout(order.getExpirationTime()));
263269
break;
264270
default:
271+
params.put(SDKConstants.param_txnAmt, Util.conversionCentAmount(order.getPrice()));
272+
params.put(SDKConstants.param_payTimeout, getPayTimeout(order.getExpirationTime()));
273+
params.put("orderDesc", order.getSubject());
265274
}
266275

267276
return setSign(params);
@@ -370,7 +379,7 @@ public BufferedImage genQrPay(PayOrder order) {
370379
}
371380
if (this.verify(response)) {
372381
if (SDKConstants.OK_RESP_CODE.equals(response.get(SDKConstants.param_respCode))) {
373-
//成功,获取tn号
382+
//成功
374383
return MatrixToImageWriter.writeInfoToJpgBuff((String) response.get(SDKConstants.param_qrCode));
375384
}
376385
throw new PayErrorException(new PayException((String) response.get(SDKConstants.param_respCode), (String) response.get(SDKConstants.param_respMsg), responseStr));
@@ -435,11 +444,11 @@ public PayOutMessage successPayOutMessage(PayMessage payMessage) {
435444
}
436445

437446
/**
438-
* 获取输出消息,用户返回给支付端, 针对于web端
447+
* 功能:生成自动跳转的Html表单
439448
*
440449
* @param orderInfo 发起支付的订单信息
441450
* @param method 请求方式 "post" "get",
442-
* @return 获取输出消息,用户返回给支付端, 针对于web端
451+
* @return 生成自动跳转的Html表单返回给支付端, 针对于PC端
443452
* @see MethodType 请求类型
444453
*/
445454
@Override
@@ -463,6 +472,30 @@ public String buildRequest(Map<String, Object> orderInfo, MethodType method) {
463472
return sf.toString();
464473
}
465474

475+
/**
476+
* 功能:将订单信息进行签名并提交请求
477+
* 业务范围:手机控件支付产品(WAP),
478+
* @param order 订单信息
479+
* @return 成功:返回支付结果 失败:返回
480+
*/
481+
public Map<String ,Object> sendHttpRequest(PayOrder order){
482+
Map<String, Object> params = orderInfo(order);
483+
String responseStr = getHttpRequestTemplate().postForObject(this.getBackTransUrl(), params, String.class);
484+
Map<String, Object> response = UriVariables.getParametersToMap(responseStr);
485+
if (response.isEmpty()) {
486+
throw new PayErrorException(new PayException("failure", "响应内容有误!", responseStr));
487+
}
488+
if (this.verify(response)) {
489+
if (SDKConstants.OK_RESP_CODE.equals(response.get(SDKConstants.param_respCode))) {
490+
// //成功,获取tn号
491+
// String tn = (String)response.get(SDKConstants.param_tn);
492+
// //TODO
493+
return response;
494+
}
495+
throw new PayErrorException(new PayException((String) response.get(SDKConstants.param_respCode), (String) response.get(SDKConstants.param_respMsg), responseStr));
496+
}
497+
throw new PayErrorException(new PayException("failure", "验证签名失败", responseStr));
498+
}
466499

467500
/**
468501
* 交易查询接口

pay-java-union/src/main/java/com/egzosn/pay/union/bean/UnionTransactionType.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,35 +15,46 @@
1515
public enum UnionTransactionType implements TransactionType{
1616

1717
/**
18+
* ---尚未接入---
1819
* 苹果支付
20+
* 官方文档:https://open.unionpay.com/tjweb/acproduct/list?apiservId=460
1921
*/
20-
APPLE("01","01","000802","08"),
22+
APPLE_PAY("01","01","000802","08"),
2123
/**
2224
* 手机控件
2325
*/
2426
APP("01","01","000000","08"),
2527
/**
26-
* 手机网页支付(WAP支付)
28+
* 手机控件支付产品(安卓/IOS/ApplePay 对应后台)
29+
* 官方文档:https://open.unionpay.com/tjweb/acproduct/list?apiservId=450
2730
*/
2831
WAP("01","01","000201","08"),
2932
/**
30-
* 网关支付
33+
* 网关支付(B2C)
34+
* 官方文档:https://open.unionpay.com/tjweb/acproduct/list?apiservId=448
35+
* 手机网页支付(WAP支付),
36+
* 官方文档:https://open.unionpay.com/tjweb/acproduct/list?apiservId=453
3137
*/
3238
WEB("01","01","000201","07"),
3339
/**
34-
* 无跳转支付
40+
* ---尚未接入---
41+
* 无跳转支付()
42+
* 官方文档:https://open.unionpay.com/tjweb/acproduct/list?apiservId=449
3543
*/
3644
NO_JUMP("01","01","000301","07"),
3745
/**
3846
* 企业网银支付(B2B支付)
47+
* 官方文档:https://open.unionpay.com/tjweb/acproduct/list?apiservId=452
3948
*/
4049
B2B("01","01","000202","07"),
4150
/**
4251
* 申码(主扫场景)
52+
* 官方文档:https://open.unionpay.com/tjweb/acproduct/list?apiservId=468
4353
*/
4454
APPLY_QR_CODE("01","07","000000","08"),
4555
/**
4656
* 消费(被扫场景)
57+
* 官方文档:同申码(主扫场景)
4758
*/
4859
CONSUME("01","06","000000","08"),
4960
//消费撤销
@@ -61,7 +72,7 @@ public enum UnionTransactionType implements TransactionType{
6172
*/
6273
private String txnType;
6374
/**
64-
* 交易子类
75+
* 交易子类型
6576
*/
6677
private String txnSubType;
6778

@@ -71,7 +82,7 @@ public enum UnionTransactionType implements TransactionType{
7182
private String bizType;
7283

7384
/**
74-
* 渠道类型 05:语音07:互联网08:移动 16:数字机顶盒
85+
* 渠道类型 05:语音 07:PC,平板 08:手机 16:数字机顶盒
7586
*/
7687
private String channelType;
7788

pay-java-union/src/test/java/PayTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,13 @@
1212
import java.util.Map;
1313

1414
/**
15+
*
1516
* Descrption:银联支付测试
1617
* Author:Actinia
1718
* Date:2017/12/19 21:12
19+
* 移步@see com.egzosn.pay.demo.controller.UnionPayController
1820
*/
21+
@Deprecated
1922
public class PayTest {
2023

2124
public static void main(String[] args) {

0 commit comments

Comments
 (0)