From 34a5c00c80235213fca81689636c79fbad47a5fe Mon Sep 17 00:00:00 2001
From: gongzuming <gongzuming>
Date: 星期五, 11 十月 2024 09:24:26 +0800
Subject: [PATCH] 支付优化
---
src/main/java/com/mzl/flower/service/payment/UserPaymentSybService.java | 106 +++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 79 insertions(+), 27 deletions(-)
diff --git a/src/main/java/com/mzl/flower/service/payment/UserPaymentSybService.java b/src/main/java/com/mzl/flower/service/payment/UserPaymentSybService.java
index b53e9c1..39da81a 100644
--- a/src/main/java/com/mzl/flower/service/payment/UserPaymentSybService.java
+++ b/src/main/java/com/mzl/flower/service/payment/UserPaymentSybService.java
@@ -276,27 +276,31 @@
VSP503:微信支付退款
*/
String trxstatus = params.get("trxstatus");//支付状态
- if("VSP501".equals(trxcode) && "0000".equals(trxstatus)){
- String status = Constants.PAYMENT_STATUS.SUCCESS.name();
- UserPaymentDTO dto = new UserPaymentDTO();
- dto.setOrderId(orderId);
- dto.setTransactionId(transactionId);
- dto.setOutTradeNo(outTradeNo);
- dto.setOriginalXml(originalXml);
- String trxamtStr = params.get("trxamt");//交易金额 单位:分
- log.info("======trxamt: " + trxamtStr);
- dto.setPaymentAmountCallback(trxamtStr);
+ if("VSP501".equals(trxcode)){
+ if("0000".equals(trxstatus)) {
+ String status = Constants.PAYMENT_STATUS.SUCCESS.name();
+ UserPaymentDTO dto = new UserPaymentDTO();
+ dto.setOrderId(orderId);
+ dto.setTransactionId(transactionId);
+ dto.setOutTradeNo(outTradeNo);
+ dto.setOriginalXml(originalXml);
+ String trxamtStr = params.get("trxamt");//交易金额 单位:分
+ log.info("======trxamt: " + trxamtStr);
+ dto.setPaymentAmountCallback(trxamtStr);
- dto.setStatus(status);
+ dto.setStatus(status);
- String orderStatus = Constants.ORDER_STATUS_BACKEND.PAYMENT.name();
+ String orderStatus = Constants.ORDER_STATUS_BACKEND.PAYMENT.name();
- saveCallbackInfo(dto, orderStatus);
+ saveCallbackInfo(dto, orderStatus);
- return true;
+ return true;
+ }
}
- return !("2008".equals(trxstatus) || "2000".equals(trxstatus));
+ return !("1001".equals(trxstatus) || StringUtils.isEmpty(trxstatus)
+ || "2008".equals(trxstatus)
+ || "2000".equals(trxstatus));
}
public boolean checkOrderStatusRefund(String outTradeNo) throws Exception {
@@ -319,7 +323,7 @@
VSP502:微信支付撤销
VSP503:微信支付退款
*/
- if ("VSP502".equals(trxcode)|| "VSP503".equals(trxcode)){
+ if ("VSP502".equals(trxcode) || "VSP503".equals(trxcode)){
String trxid = params.get("trxid");
updateOrderRefund(outTradeNo, trxid);
@@ -337,12 +341,37 @@
}
SybPayService service = new SybPayService();
- Map<String,String> map = service.close(null, orderId);
- log.info("======关闭订单结果" + toJSONString(map));
- String retcode = map.get("retcode");
+ Map<String,String> params = service.query(orderId, up.getTransactionId());
+ String retcode = params.get("retcode");
if(!"SUCCESS".equals(retcode)){
- throw new ValidationException("取消订单失败: " + map.get("retmsg"));
+ throw new ValidationException("查询订单交易状态失败: " + params.get("retmsg"));
+ }
+ String trxstatus = params.get("trxstatus");//支付状态
+
+ if("1001".equals(trxstatus) || "3088".equals(trxstatus)){
+ //3088-交易未支付(在查询时间区间内未成功支付,如已影响资金24小时内会做差错退款处理)
+ //1001:交易不存在
+ //直接取消
+ } else if (StringUtils.isEmpty(trxstatus)
+ || "2008".equals(trxstatus)
+ || "2000".equals(trxstatus)) {
+ String trxid = params.get("trxid");
+ //2008或者2000 : 交易处理中,请查询交易,如果是实时交易(例如刷卡支付,交易撤销,退货),建议每隔一段时间(10秒)查询交易
+ Map<String,String> map = service.close(trxid, orderId);
+ log.info("======关闭订单结果" + toJSONString(map));
+
+ retcode = map.get("retcode");
+ if(!"SUCCESS".equals(retcode)){
+ throw new ValidationException("调用通联关闭订单失败: " + map.get("retmsg"));
+ }
+ trxstatus = map.get("trxstatus");
+ if(!"0000".equals(trxstatus)){
+ throw new ValidationException("取消订单失败: " + map.get("errmsg"));
+ }
+
+ } else {
+ throw new ValidationException("订单不可取消");
}
Order order = orderMapper.selectById(orderId);
@@ -422,16 +451,23 @@
throw new ValidationException("订单不可退款");
}
- long trxamt = up.getPaymentAmount().longValue();
+ long trxamt = prepareAmount(up.getPaymentAmount());
String reqsn = orderId;
String oldtrxid = up.getTransactionId();
- String oldreqsn = null;
+ String oldreqsn = orderId;
SybPayService service = new SybPayService();
Map<String,String> map = service.cancel(trxamt, reqsn, oldtrxid, oldreqsn);
String retcode = map.get("retcode");
if(!"SUCCESS".equals(retcode)){
- throw new ValidationException("订单退款失败: " + map.get("retmsg"));
+ throw new ValidationException("调用通联撤销接口失败: " + map.get("retmsg"));
+ }
+
+ //这个不是订单状态,是通用的,如果是支付查询,代表就是订单状态,如果是退款代表的是退款状态
+ String trxstatus = map.get("trxstatus");
+ if(!"0000".equals(trxstatus)){
+ log.error("通联撤销交易失败:" + map.get("errmsg"));
+ throw new ValidationException("订单退款交易失败:" + map.get("errmsg"));
}
updateOrderRefund(orderId, oldtrxid);
@@ -449,16 +485,22 @@
throw new ValidationException("订单不可退款");
}
- long trxamt = up.getPaymentAmount().longValue();
+ long trxamt = prepareAmount(up.getPaymentAmount());
String reqsn = orderId;
String oldtrxid = up.getTransactionId();
- String oldreqsn = null;
+ String oldreqsn = orderId;
SybPayService service = new SybPayService();
Map<String,String> map = service.refund(trxamt, reqsn, oldtrxid, oldreqsn);
String retcode = map.get("retcode");
if(!"SUCCESS".equals(retcode)){
- throw new ValidationException("订单退款失败: " + map.get("retmsg"));
+ throw new ValidationException("调用通联退款失败: " + map.get("retmsg"));
+ }
+
+ //这个不是订单状态,是通用的,如果是支付查询,代表就是订单状态,如果是退款代表的是退款状态
+ String trxstatus = map.get("trxstatus");
+ if(!"0000".equals(trxstatus)){
+ throw new ValidationException("订单退款交易失败:" + map.get("errmsg"));
}
updateOrderRefund(orderId, oldtrxid);
@@ -534,12 +576,22 @@
Map<String,String> map = service.refund(trxamt, reqsn, oldtrxid, oldreqsn);
String retcode = map.get("retcode");
if(!"SUCCESS".equals(retcode)){
- throw new ValidationException("订单退款失败: " + map.get("retmsg"));
+ throw new ValidationException("调用通联退款失败: " + map.get("retmsg"));
+ }
+
+ //这个不是订单状态,是通用的,如果是支付查询,代表就是订单状态,如果是退款代表的是退款状态
+ String trxstatus = map.get("trxstatus");
+ if(!"0000".equals(trxstatus)){
+ throw new ValidationException("订单退款交易失败:" + map.get("errmsg"));
}
re.setRequest(toJSONString(map));
re.create(SecurityUtils.getUserId());
+ re.setStatus(retcode);
+ re.setNotification(retcode);
+ re.setNotifyTime(LocalDateTime.now());
+
orderRefundMapper.insert(re);
return re.getId();
--
Gitblit v1.9.3