处理退款回调

This commit is contained in:
2025-08-25 01:25:18 +08:00
parent 10dd78bbf6
commit af51ba522e
6 changed files with 201 additions and 67 deletions

View File

@ -3,6 +3,7 @@ package com.sczx.pay.controller;
import com.sczx.pay.dto.PaymentRequest;
import com.sczx.pay.dto.PaymentResponse;
import com.sczx.pay.dto.RefundRequest;
import com.sczx.pay.entity.CompanyWechatConfig;
import com.sczx.pay.mapper.CompanyWechatConfigMapper;
import com.sczx.pay.service.WechatPayService;
import com.sczx.pay.utils.WXPayUtil;
@ -186,18 +187,27 @@ public class PaymentController {
// 解析XML数据
Map<String, String> notifyMap = WXPayUtil.xmlToMap(xmlData);
//WechatRefundNotify notify = WXPayUtil.xmlToEntity(xmlData, WechatRefundNotify.class);
Long companyId = companyWechatConfigMapper.getCompanyIdByMchId(notifyMap.get("mch_id"));
CompanyWechatConfig wechatConfig = companyWechatConfigMapper.getCompanyIdByMchId(notifyMap.get("mch_id"));
//CompanyWechatConfig wechatConfig = companyWechatConfigMapper.getWechatConfigByCompanyId(companyId);
//Long companyId = companyWechatConfigMapper.getCompanyIdByMchId(notifyMap.getMchid());
Boolean isRefundSuccess;
// 验证签名
if (!wechatPayService.verifyNotifySign(companyId, notifyMap)) {
logger.warn("微信退款通知签名验证失败公司ID: {}", companyId);
return buildResponse("FAIL", "签名失败");
try {
Map<String, String> decryptMap = wechatPayService.decryptRefundNotify(xmlData, wechatConfig.getApikey());
isRefundSuccess = wechatPayService.processRefundNotify(decryptMap);
} catch (Exception e){
logger.warn("微信退款通知签名验证失败公司ID: {}", wechatConfig.getId());
return buildResponse("FAIL", "解密失败");
}
String returnCode = notifyMap.get("return_code");
if (!"SUCCESS".equals(returnCode)) {
logger.warn("微信退款通知返回失败公司ID: {}: {}", companyId, notifyMap.get("return_msg"));
logger.warn("微信退款通知返回失败公司ID: {}: {}", wechatConfig.getId(), notifyMap.get("return_msg"));
return buildResponse("FAIL", "返回失败");
}
@ -207,13 +217,12 @@ public class PaymentController {
String refundStatus = notifyMap.get("refund_status");
// 更新数据库中的退款状态
boolean success = wechatPayService.processRefundNotify(companyId, notifyMap);
if (success) {
if (isRefundSuccess) {
logger.info("退款处理完成公司ID: {}, 退款单号: {}, 微信退款单号: {}, 状态: {}",
companyId, outRefundNo, refundId, refundStatus);
wechatConfig.getId(), outRefundNo, refundId, refundStatus);
return buildResponse("SUCCESS", "OK");
} else {
logger.error("更新退款状态失败公司ID: {}, 退款单号: {}", companyId, outRefundNo);
logger.error("更新退款状态失败公司ID: {}, 退款单号: {}", wechatConfig.getId(), outRefundNo);
return buildResponse("FAIL", "更新退款状态失败");
}