增加了免押通知接口

This commit is contained in:
2025-09-27 15:03:32 +08:00
parent f97eb7e47a
commit 6b5de29c09
4 changed files with 89 additions and 3 deletions

View File

@ -138,6 +138,62 @@ public class AliPayNotifyController {
}
}
/**
* 支付宝退款结果通知
*/
@ApiOperation(value = "支付宝免押通知")
@PostMapping("/freeze/notify")
public String alipayFreezeNotify(HttpServletRequest request) {
try {
// 读取支付宝退款回调数据
Map<String, String> params = new HashMap<>();
Map<String, String[]> requestParams = request.getParameterMap();
for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = iter.next();
String[] values = requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
}
params.put(name, valueStr);
}
log.info("收到支付宝免押结果通知, 数据: {}", params);
// 验证签名
// 注意:支付宝退款通知的签名验证方式可能与支付通知不同
// 这里简化处理,实际应根据支付宝文档实现
String orderStatus = params.get("order_status");
if (!"AUTHORIZED".equals(orderStatus)) {
log.warn("支付宝免押通知状态失败: {}", orderStatus);
return buildResponse("success");
}
// 处理免押通知
String outOrderNo = params.get("out_order_no");
// String outRequestNo = params.get("out_request_no");
String authNo = params.get("auth_no");
// 更新数据库中的免押支付状态
boolean success = alipayService.processFreezeNotify(outOrderNo,authNo);
if (success) {
log.info("支付宝免押处理完成,支付单号: {}, 支付宝授权资金订单号: {}",
outOrderNo, authNo);
return buildResponse("success");
} else {
log.error("支付宝免押处理状态失败,订单号: {}, 支付宝授权资金订单号: {}", outOrderNo, authNo);
return buildResponse("failure");
}
} catch (Exception e) {
log.error("处理支付宝退款通知异常", e);
return buildResponse("failure");
}
}
private String buildResponse(String result) {
return result;
}

View File

@ -70,4 +70,11 @@ public interface OrderPayMapper {
@Select("select * from zc_order_sub where payment_id = #{paymentId} order by suborder_id desc limit 1")
OrderSub getSubOrderByTradeNo(@Param("paymentId") String paymentId);
/**
* 免押成功,更新子订单状态
*/
@Update("update zc_order_sub set transaction_id = #{transactionId},pay_status = 'SUCCESS'" +
" where payment_id = #{authNo}")
int updateFreezeSubOrderPaymentStatus(@Param("authNo") String authNo,
@Param("transactionId") String transactionId);
}

View File

@ -1,7 +1,6 @@
package com.sczx.pay.service;
import com.sczx.pay.dto.*;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.Map;
@ -65,4 +64,9 @@ public interface AlipayService {
* 处理退款通知
*/
boolean processRefundNotify(Map<String, String> notifyMap);
/**
* 处理免押通知
*/
boolean processFreezeNotify(String outOrderNo,String authNo);
}

View File

@ -42,6 +42,10 @@ public class AlipayServiceImpl implements AlipayService {
@Value("${alipay.refund-notify-url}")
private String refundNotifyUrl;
@Value("${alipay.freeze-notify-url}")
private String freezeNotifyUrl;
@Value("${alipay.alipay-public-cert-path}")
private String alipayPublicCertPath;
@ -339,6 +343,9 @@ public class AlipayServiceImpl implements AlipayService {
model.setDepositProductMode("DEPOSIT_ONLY");
request.setBizModel(model);
// 设置异步通知地址
request.setNotifyUrl(freezeNotifyUrl);
log.info("免押冻结请求 : {}",request);
AlipayFundAuthOrderAppFreezeResponse fundAuthOrderAppFreezeResponse = alipaySdkUtil.execute(request);
log.info("免押冻结响应 : {}",fundAuthOrderAppFreezeResponse.getBody());
@ -611,15 +618,27 @@ public class AlipayServiceImpl implements AlipayService {
log.info("支付宝退款记录状态已更新,退款单号: {}, 支付宝退款单号: {}, 状态: {}", outRequestNo, outRequestNo, refundStatus);
return true;
} else {
log.warn("未找到对应的微信退款记录,退款单号: {}", outRequestNo);
log.warn("未找到对应的支付宝退款记录,退款单号: {}", outRequestNo);
return false;
}
} catch (Exception e) {
log.error("处理微信退款通知异常,退款单号: {}", notifyMap.get("out_request_no"), e);
log.error("处理支付宝退款通知异常,退款单号: {}", notifyMap.get("out_request_no"), e);
return false;
}
}
@Override
public boolean processFreezeNotify(String outOrderNo, String authNo) {
try {
log.info("处理支付宝免押支付成功通知, 更新状态,订单号: {}, 授权号: {}", outOrderNo, authNo);
int result = orderPayMapper.updateFreezeSubOrderPaymentStatus(outOrderNo, authNo);
return result>0;
} catch (Exception e) {
log.error("处理支付宝免押支付成功通知异常,订单号: {}", outOrderNo, e);
}
return false;
}
/**
* 记录支付信息到数据库
*/