更新支付状态、退款状态的控制逻辑,独立的商户支付订单号、商户退款单号

This commit is contained in:
jkcdev 2025-05-22 17:38:18 +08:00
parent 7753b79063
commit 443eae1e8a
4 changed files with 69 additions and 27 deletions

View File

@ -104,6 +104,20 @@ public class EbikeWxPaymentController {
return r.isSuccess() ? JsonResult.success(true) : JsonResult.failed(r.getMessage());
}
/**
* 通过退款记录主键id查询退款信息
*
* @param refundId 退款主键id
* @return 退款状态信息
*/
@GetMapping("/queryRefundStatus/{refundId}")
public JsonResult<?> queryRefundStatus(@PathVariable(name = "refundId") String refundId) {
HandleNotifyResult r = wxPayService.queryRefundStatusById(refundId);
return JsonResult.success(r);
}
/**
* 审核退款申请
*
@ -127,12 +141,12 @@ public class EbikeWxPaymentController {
/**
* 通过退款单号查询退款信息
*
* @param refundId 商户(骑行)退款单号
* @param refundId 商户(骑行)退款id
* @return 退款信息
*/
@GetMapping("/queryRefund/{refundId}")
public JsonResult<?> refundQuery(@PathVariable(name = "refundId") String refundId) {
Refund r = wxPayService.queryRefundByOutNo(refundId);
Refund r = wxPayService.queryRefundById(refundId);
return r == null ? JsonResult.failed(String.format("退款单号{%s}查询退款失败", refundId)) : JsonResult.success(r);
}

View File

@ -8,7 +8,6 @@ import com.wechat.pay.java.service.payments.model.Transaction;
import com.wechat.pay.java.service.refund.model.Refund;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* 微信支付服务类JSAPI支付小程序
@ -97,20 +96,28 @@ public interface WxPayService {
/**
* 通过商户退款单号查询退款信息
* 通过商户退款id查询退款信息
*
* @param outRefundNo 商户退款订单号
* @param refundId 商户退款订主键
* @return 退款信息
*/
Refund queryRefundByOutNo(String outRefundNo);
Refund queryRefundById(String refundId);
/**
* 通过商户退款单号查询退款信息状态
* 通过商户退款单号查询退款信息
*
* @param outRefundNo 商户退款订单号
* @param outTradeNo 商户退款订单号
* @return 退款信息
*/
HandleNotifyResult queryRefundStatusByOutNo(String outRefundNo);
Refund queryRefundByOutTradeNo(String outTradeNo);
/**
* 通过退款记录主键id查询退款信息状态
*
* @param refundId 退款记录主键id
* @return 退款状态信息
*/
HandleNotifyResult queryRefundStatusById(String refundId);
/**
* 处理支退款回调

View File

@ -264,10 +264,15 @@ public class WxPayServiceImpl implements WxPayService {
@Override
public Transaction queryOrderByOutTradeNo(String outTradeNo) {
QueryOrderByOutTradeNoRequest request = new QueryOrderByOutTradeNoRequest();
request.setOutTradeNo(outTradeNo);
request.setMchid(wxPayConfig.getMerchantId());
return wxJsapiService.queryOrderByOutTradeNo(request);
try {
QueryOrderByOutTradeNoRequest request = new QueryOrderByOutTradeNoRequest();
request.setOutTradeNo(outTradeNo);
request.setMchid(wxPayConfig.getMerchantId());
return wxJsapiService.queryOrderByOutTradeNo(request);
}catch (Exception e) {
logError("查询支付订单queryOrderByOutTradeNo", e);
return null;
}
}
@Override
@ -498,20 +503,35 @@ public class WxPayServiceImpl implements WxPayService {
}
@Override
public Refund queryRefundByOutNo(String outRefundNo) {
QueryByOutRefundNoRequest request = new QueryByOutRefundNoRequest();
request.setOutRefundNo(outRefundNo);
return wxRefundService.queryByOutRefundNo(request);
public Refund queryRefundById(String refundId) {
EbikeRefund ebikeRefund = ebikeRefundService.getById(refundId);
if (ebikeRefund == null) {
log.error("{}退款订单不存在", refundId);
return null;
}
return queryRefundByOutTradeNo(ebikeRefund.getOrderId());
}
@Override
public HandleNotifyResult queryRefundStatusByOutNo(String outRefundNo) {
public Refund queryRefundByOutTradeNo(String outTradeNo) {
try {
QueryByOutRefundNoRequest request = new QueryByOutRefundNoRequest();
request.setOutRefundNo(outTradeNo);
return wxRefundService.queryByOutRefundNo(request);
}catch (Exception e) {
logError("查询退款订单queryRefundByOutTradeNo", e);
return null;
}
}
@Override
public HandleNotifyResult queryRefundStatusById(String refundId) {
HandleNotifyResult result = new HandleNotifyResult();
// 先查本地数据库如果退款状态不为SUCCESS需要查询微信支付
EbikeRefund ebikeRefund = ebikeRefundService.getById(outRefundNo);
EbikeRefund ebikeRefund = ebikeRefundService.getById(refundId);
if (ebikeRefund == null) {
log.error("{}退款订单不存在", outRefundNo);
result.setMessage(String.format("{%s}退款订单不存在", outRefundNo));
log.error("{}退款订单不存在", refundId);
result.setMessage(String.format("{%s}退款订单不存在", refundId));
return result;
}
result.setSuccess(String.valueOf(Status.SUCCESS.ordinal()).equals(ebikeRefund.getStatus()));
@ -519,16 +539,17 @@ public class WxPayServiceImpl implements WxPayService {
result.setMessage(String.format("退款%s成功", ebikeRefund.getRefundId()));
return result;
}
QueryByOutRefundNoRequest request = new QueryByOutRefundNoRequest();
request.setOutRefundNo(outRefundNo);
Refund r = wxRefundService.queryByOutRefundNo(request);
if (r != null && r.getStatus().equals(Status.SUCCESS)) {
Refund refund = queryRefundByOutTradeNo(ebikeRefund.getOrderId());
if (refund != null && refund.getStatus().equals(Status.SUCCESS)) {
result.setMessage(String.format("退款%s成功", ebikeRefund.getRefundId()));
result.setSuccess(true);
// 更新退款状态
ebikeRefundService.updateRefundStatus(r);
ebikeRefundService.updateRefundStatus(refund);
return result;
}else{
result.setMessage(String.format("退款%s失败", ebikeRefund.getRefundId()));
}
return result;
}

View File

@ -87,7 +87,7 @@ public class WsPayTask {
for (EbikeRefund ebikeRefund : ebikeRefundList) {
log.warn("超时未退款的退款单号 ===> {}", ebikeRefund.getRefundId());
// 调用微信退款查询接口查询退款状态
Refund refund = wxPayService.queryRefundByOutNo(ebikeRefund.getRefundId());
Refund refund = wxPayService.queryRefundByOutTradeNo(ebikeRefund.getRefundOrder());
if (refund!= null){
// 3. 更新退款单状态
ebikeRefundService.updateRefundStatus(refund);