Merge branch 'zhangli/2025-9-27_my'
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -43,6 +43,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;
|
||||
|
||||
@ -343,6 +347,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());
|
||||
@ -618,15 +625,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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 记录支付信息到数据库
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user