mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-13 05:59:01 +08:00
feat(pay): 修改退款成功状态回调逻辑
- 更新 TradeStatusEnum.java: 修改第22行,新增 TRADE_CLOSED 状态,关联 REFUND_SUCCESS。 - 更新 AlipayPayNotifyCallbackHandler.java: 修改第123行,完善退款成功状态判断逻辑, 如果 trade_status=TRADE_CLOSED 则设置订单状态为 REFUND_SUCCESS, 否则设置为 TRADE_SUCCESS。 - 更新前端文件 src/views/biz/pay/order/index.vue: 在第256行新增退款成功状态(label: '退款成功', value: '5'), 以支持退款成功状态在前端的显示。
This commit is contained in:
1 parent
99bf24ff15
commit
7aba13c20a
2 files changed
+118
-109
No files matched your search
+86
-76
@@ -29,6 +29,7 @@ import com.pig4cloud.pigx.pay.handler.MessageDuplicateCheckerHandler;
|
|||||||
import com.pig4cloud.pigx.pay.service.PayGoodsOrderService;
|
import com.pig4cloud.pigx.pay.service.PayGoodsOrderService;
|
||||||
import com.pig4cloud.pigx.pay.service.PayNotifyRecordService;
|
import com.pig4cloud.pigx.pay.service.PayNotifyRecordService;
|
||||||
import com.pig4cloud.pigx.pay.service.PayTradeOrderService;
|
import com.pig4cloud.pigx.pay.service.PayTradeOrderService;
|
||||||
|
import com.pig4cloud.pigx.pay.utils.OrderStatusEnum;
|
||||||
import com.pig4cloud.pigx.pay.utils.PayConstants;
|
import com.pig4cloud.pigx.pay.utils.PayConstants;
|
||||||
import com.pig4cloud.pigx.pay.utils.TradeStatusEnum;
|
import com.pig4cloud.pigx.pay.utils.TradeStatusEnum;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
@@ -49,92 +50,101 @@ import java.util.Map;
|
|||||||
@Service("alipayCallback")
|
@Service("alipayCallback")
|
||||||
public class AlipayPayNotifyCallbackHandler extends AbstractPayNotifyCallbakHandler {
|
public class AlipayPayNotifyCallbackHandler extends AbstractPayNotifyCallbakHandler {
|
||||||
|
|
||||||
private final MessageDuplicateCheckerHandler duplicateCheckerHandler;
|
private final MessageDuplicateCheckerHandler duplicateCheckerHandler;
|
||||||
|
|
||||||
private final PayTradeOrderService tradeOrderService;
|
private final PayTradeOrderService tradeOrderService;
|
||||||
|
|
||||||
private final PayGoodsOrderService goodsOrderService;
|
private final PayGoodsOrderService goodsOrderService;
|
||||||
|
|
||||||
private final PayNotifyRecordService recordService;
|
private final PayNotifyRecordService recordService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 维护租户信息
|
* 维护租户信息
|
||||||
* @param params
|
*
|
||||||
*/
|
* @param params
|
||||||
@Override
|
*/
|
||||||
public void before(Map<String, String> params) {
|
@Override
|
||||||
Long tenant = MapUtil.getLong(params, "passback_params");
|
public void before(Map<String, String> params) {
|
||||||
TenantContextHolder.setTenantId(tenant);
|
Long tenant = MapUtil.getLong(params, "passback_params");
|
||||||
}
|
TenantContextHolder.setTenantId(tenant);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 去重处理
|
* 去重处理
|
||||||
* @param params 回调报文
|
*
|
||||||
* @return
|
* @param params 回调报文
|
||||||
*/
|
* @return
|
||||||
@Override
|
*/
|
||||||
public Boolean duplicateChecker(Map<String, String> params) {
|
@Override
|
||||||
// 判断是否是为支付中
|
public Boolean duplicateChecker(Map<String, String> params) {
|
||||||
if (StrUtil.equals(TradeStatusEnum.WAIT_BUYER_PAY.getDescription(), params.get(PayConstants.TRADE_STATUS))) {
|
// 判断是否是为支付中
|
||||||
log.info("支付宝订单待支付 {} 不做处理", params);
|
if (StrUtil.equals(TradeStatusEnum.WAIT_BUYER_PAY.getDescription(), params.get(PayConstants.TRADE_STATUS))) {
|
||||||
return true;
|
log.info("支付宝订单待支付 {} 不做处理", params);
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// 判断10秒内是否已经回调处理
|
// 判断10秒内是否已经回调处理
|
||||||
if (duplicateCheckerHandler.isDuplicate(params.get(PayConstants.OUT_TRADE_NO))) {
|
if (duplicateCheckerHandler.isDuplicate(params.get(PayConstants.OUT_TRADE_NO))) {
|
||||||
log.info("支付宝订单重复回调 {} 不做处理", params);
|
log.info("支付宝订单重复回调 {} 不做处理", params);
|
||||||
this.saveNotifyRecord(params, "重复回调");
|
this.saveNotifyRecord(params, "重复回调");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 验签逻辑
|
* 验签逻辑
|
||||||
* @param params 回调报文
|
*
|
||||||
* @return
|
* @param params 回调报文
|
||||||
*/
|
* @return
|
||||||
@Override
|
*/
|
||||||
public Boolean verifyNotify(Map<String, String> params) {
|
@Override
|
||||||
return true;
|
public Boolean verifyNotify(Map<String, String> params) {
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 解析报文
|
* 解析报文
|
||||||
* @param params 回调报文
|
*
|
||||||
* @return
|
* @param params 回调报文
|
||||||
*/
|
* @return
|
||||||
@Override
|
*/
|
||||||
public String parse(Map<String, String> params) {
|
@Override
|
||||||
String tradeStatus = EnumUtil.fromString(TradeStatusEnum.class, params.get(PayConstants.TRADE_STATUS))
|
public String parse(Map<String, String> params) {
|
||||||
.getStatus();
|
String tradeStatus = EnumUtil.fromString(TradeStatusEnum.class, params.get(PayConstants.TRADE_STATUS))
|
||||||
|
.getStatus();
|
||||||
|
|
||||||
String orderNo = params.get(PayConstants.OUT_TRADE_NO);
|
String orderNo = params.get(PayConstants.OUT_TRADE_NO);
|
||||||
PayGoodsOrder goodsOrder = goodsOrderService
|
PayGoodsOrder goodsOrder = goodsOrderService
|
||||||
.getOne(Wrappers.<PayGoodsOrder>lambdaQuery().eq(PayGoodsOrder::getPayOrderId, orderNo));
|
.getOne(Wrappers.<PayGoodsOrder>lambdaQuery().eq(PayGoodsOrder::getPayOrderId, orderNo));
|
||||||
goodsOrder.setStatus(tradeStatus);
|
goodsOrder.setStatus(tradeStatus);
|
||||||
goodsOrderService.updateById(goodsOrder);
|
goodsOrderService.updateById(goodsOrder);
|
||||||
|
|
||||||
PayTradeOrder tradeOrder = tradeOrderService
|
PayTradeOrder tradeOrder = tradeOrderService
|
||||||
.getOne(Wrappers.<PayTradeOrder>lambdaQuery().eq(PayTradeOrder::getOrderId, orderNo));
|
.getOne(Wrappers.<PayTradeOrder>lambdaQuery().eq(PayTradeOrder::getOrderId, orderNo));
|
||||||
tradeOrder.setPaySuccTime(LocalDateTime.now());
|
tradeOrder.setPaySuccTime(LocalDateTime.now());
|
||||||
tradeOrder.setChannelOrderNo(params.get("trade_no"));
|
tradeOrder.setChannelOrderNo(params.get("trade_no"));
|
||||||
tradeOrder.setStatus(TradeStatusEnum.TRADE_SUCCESS.getStatus());
|
tradeOrder.setStatus(TradeStatusEnum.TRADE_SUCCESS.getStatus());
|
||||||
tradeOrderService.updateById(tradeOrder);
|
// 退款也会回调,trade_status=TRADE_CLOSED ,具体看报文记录
|
||||||
|
if (OrderStatusEnum.REFUND_SUCCESS.getStatus().equals(tradeStatus)) {
|
||||||
|
tradeOrder.setStatus(OrderStatusEnum.REFUND_SUCCESS.getStatus());
|
||||||
|
} else {
|
||||||
|
tradeOrder.setStatus(TradeStatusEnum.TRADE_SUCCESS.getStatus());
|
||||||
|
}
|
||||||
|
return "success";
|
||||||
|
}
|
||||||
|
|
||||||
return "success";
|
/**
|
||||||
}
|
* 保存回调记录
|
||||||
|
*
|
||||||
/**
|
* @param result 处理结果
|
||||||
* 保存回调记录
|
* @param params 回调报文
|
||||||
* @param result 处理结果
|
*/
|
||||||
* @param params 回调报文
|
@Override
|
||||||
*/
|
public void saveNotifyRecord(Map<String, String> params, String result) {
|
||||||
@Override
|
PayNotifyRecord record = new PayNotifyRecord();
|
||||||
public void saveNotifyRecord(Map<String, String> params, String result) {
|
String notifyId = params.get("notify_id");
|
||||||
PayNotifyRecord record = new PayNotifyRecord();
|
saveRecord(params, result, record, notifyId, recordService);
|
||||||
String notifyId = params.get("notify_id");
|
}
|
||||||
saveRecord(params, result, record, notifyId, recordService);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
+32
-33
@@ -11,44 +11,43 @@ import lombok.Getter;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum TradeStatusEnum {
|
public enum TradeStatusEnum {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 交易完成
|
* 交易完成
|
||||||
*/
|
*/
|
||||||
WAIT_BUYER_PAY("WAIT_BUYER_PAY", OrderStatusEnum.INIT.getStatus()),
|
WAIT_BUYER_PAY("WAIT_BUYER_PAY", OrderStatusEnum.INIT.getStatus()),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TRADE_CLOSED
|
* TRADE_CLOSED
|
||||||
*/
|
*/
|
||||||
TRADE_CLOSED("TRADE_CLOSED", OrderStatusEnum.FAIL.getStatus()),
|
TRADE_CLOSED("TRADE_CLOSED", OrderStatusEnum.REFUND_SUCCESS.getStatus()),
|
||||||
|
/**
|
||||||
|
* TRADE_SUCCESS
|
||||||
|
*/
|
||||||
|
TRADE_SUCCESS("TRADE_SUCCESS", OrderStatusEnum.SUCCESS.getStatus()),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TRADE_SUCCESS
|
* 交易关闭
|
||||||
*/
|
*/
|
||||||
TRADE_SUCCESS("TRADE_SUCCESS", OrderStatusEnum.SUCCESS.getStatus()),
|
TRADE_FINISHED("TRADE_FINISHED", OrderStatusEnum.COMPLETE.getStatus()),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 交易关闭
|
* 微信支付成功
|
||||||
*/
|
*/
|
||||||
TRADE_FINISHED("TRADE_FINISHED", OrderStatusEnum.COMPLETE.getStatus()),
|
SUCCESS("SUCCESS", OrderStatusEnum.SUCCESS.getStatus()),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 微信支付成功
|
* 微信支付失败
|
||||||
*/
|
*/
|
||||||
SUCCESS("SUCCESS", OrderStatusEnum.SUCCESS.getStatus()),
|
FAIL("FAIL", OrderStatusEnum.FAIL.getStatus());
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 微信支付失败
|
* 描述
|
||||||
*/
|
*/
|
||||||
FAIL("FAIL", OrderStatusEnum.FAIL.getStatus());
|
private String description;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 描述
|
* 描述
|
||||||
*/
|
*/
|
||||||
private String description;
|
private String status;
|
||||||
|
|
||||||
/**
|
|
||||||
* 描述
|
|
||||||
*/
|
|
||||||
private String status;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user