From f2a35a692975a33114de26a2653d635e9dfd2764 Mon Sep 17 00:00:00 2001 From: zhangli <123879394@qq.com> Date: Tue, 23 Sep 2025 08:09:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=85=8D=E6=8A=BC=E5=86=BB?= =?UTF-8?q?=E7=BB=93=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pay/controller/AliPaymentController.java | 19 ++++ .../sczx/pay/dto/AlipayFundFreezeRequest.java | 13 +++ .../pay/dto/AlipayFundFreezeResponse.java | 14 +++ .../com/sczx/pay/service/AlipayService.java | 10 ++ .../pay/service/impl/AlipayServiceImpl.java | 103 ++++++++++++++++++ 5 files changed, 159 insertions(+) create mode 100644 src/main/java/com/sczx/pay/dto/AlipayFundFreezeRequest.java create mode 100644 src/main/java/com/sczx/pay/dto/AlipayFundFreezeResponse.java diff --git a/src/main/java/com/sczx/pay/controller/AliPaymentController.java b/src/main/java/com/sczx/pay/controller/AliPaymentController.java index fddcda1..3500265 100644 --- a/src/main/java/com/sczx/pay/controller/AliPaymentController.java +++ b/src/main/java/com/sczx/pay/controller/AliPaymentController.java @@ -67,4 +67,23 @@ public class AliPaymentController { return alipayService.refundQuery(request); } + /** + * 免押冻结 + */ + @ApiOperation(value = "免押冻结接口") + @PostMapping("/fundFreeze") + public AlipayFundFreezeResponse fundFreeze(@RequestBody AlipayFundFreezeRequest request) { + log.info("收到支付宝免押冻结请求: {}", request); + return alipayService.fundFreeze(request); + } + + /** + * 取消冻结 + */ + @ApiOperation(value = "取消冻结接口") + @PostMapping("/cancelFundFreeze") + public AlipayFundFreezeResponse cancelFundFreeze(@RequestBody AlipayFundFreezeRequest request) { + log.info("收到支付宝取消免押冻结请求: {}", request); + return alipayService.cancelFundFreeze(request); + } } diff --git a/src/main/java/com/sczx/pay/dto/AlipayFundFreezeRequest.java b/src/main/java/com/sczx/pay/dto/AlipayFundFreezeRequest.java new file mode 100644 index 0000000..d359fa2 --- /dev/null +++ b/src/main/java/com/sczx/pay/dto/AlipayFundFreezeRequest.java @@ -0,0 +1,13 @@ +package com.sczx.pay.dto; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +@ApiModel("支付宝资金冻结请求参数") +@Data +public class AlipayFundFreezeRequest { + private String companyId; + private String outOrderNo; + private String title; + private String amount; +} diff --git a/src/main/java/com/sczx/pay/dto/AlipayFundFreezeResponse.java b/src/main/java/com/sczx/pay/dto/AlipayFundFreezeResponse.java new file mode 100644 index 0000000..bf572f1 --- /dev/null +++ b/src/main/java/com/sczx/pay/dto/AlipayFundFreezeResponse.java @@ -0,0 +1,14 @@ +package com.sczx.pay.dto; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +@ApiModel("支付宝资金冻结响应参数") +@Data +public class AlipayFundFreezeResponse { + private boolean success; + private String message; + private String outTradeNo; // 商户订单号 + private String orderStr; // 支付串(用于前端调起支付) + private String code; // 状态码 +} diff --git a/src/main/java/com/sczx/pay/service/AlipayService.java b/src/main/java/com/sczx/pay/service/AlipayService.java index 03cbff6..29123de 100644 --- a/src/main/java/com/sczx/pay/service/AlipayService.java +++ b/src/main/java/com/sczx/pay/service/AlipayService.java @@ -30,6 +30,16 @@ public interface AlipayService { */ AlipayResponse refundQuery(AlipayRefundRequest refundQueryRequest); + /** + * 资金授权冻结接口 + */ + AlipayFundFreezeResponse fundFreeze(AlipayFundFreezeRequest alipayFundFreezeRequest); + + /** + * 撤销资金授权冻结接口 + */ + AlipayFundFreezeResponse cancelFundFreeze(AlipayFundFreezeRequest alipayFundFreezeRequest); + /** * 验证通知签名 */ diff --git a/src/main/java/com/sczx/pay/service/impl/AlipayServiceImpl.java b/src/main/java/com/sczx/pay/service/impl/AlipayServiceImpl.java index 49122f2..57fece7 100644 --- a/src/main/java/com/sczx/pay/service/impl/AlipayServiceImpl.java +++ b/src/main/java/com/sczx/pay/service/impl/AlipayServiceImpl.java @@ -44,6 +44,9 @@ public class AlipayServiceImpl implements AlipayService { @Value("${alipay.alipay-public-cert-path}") private String alipayPublicCertPath; + @Value("${alipay.serviceid}") + private String serviceId ; + @Autowired private PaymentRecordMapper paymentRecordMapper; @@ -302,6 +305,106 @@ public class AlipayServiceImpl implements AlipayService { return response; } + @Override + public AlipayFundFreezeResponse fundFreeze(AlipayFundFreezeRequest alipayFundFreezeRequest) { + AlipayFundFreezeResponse response = new AlipayFundFreezeResponse(); + try { + // 构造请求参数以调用接口 + AlipayFundAuthOrderAppFreezeRequest request = new AlipayFundAuthOrderAppFreezeRequest(); + AlipayFundAuthOrderAppFreezeModel model = new AlipayFundAuthOrderAppFreezeModel(); + + // 设置订单标题 + model.setOrderTitle(alipayFundFreezeRequest.getTitle()); + + // 设置商户授权资金订单号 + model.setOutOrderNo(alipayFundFreezeRequest.getOutOrderNo()); + + // 设置商户本次资金操作的请求流水号 + model.setOutRequestNo(alipayFundFreezeRequest.getOutOrderNo()); + + // 设置需要冻结的金额 + model.setAmount(alipayFundFreezeRequest.getAmount()); + + // 设置预授权订单相对超时时间 + model.setTimeoutExpress("5m"); + + // 设置销售产品码 + model.setProductCode("PRE_AUTH_ONLINE"); + + // 设置业务扩展参数 + model.setExtraParam("{\"category\": \"CHARGE_PILE_CAR\",\"serviceId\": \""+serviceId+"\"}"); + + // 设置免押受理台模式 + model.setDepositProductMode("DEPOSIT_ONLY"); + + request.setBizModel(model); + log.info("免押冻结请求 : {}",request); + AlipayFundAuthOrderAppFreezeResponse fundAuthOrderAppFreezeResponse = alipaySdkUtil.execute(request); + log.info("免押冻结响应 : {}",fundAuthOrderAppFreezeResponse.getBody()); + + if (fundAuthOrderAppFreezeResponse.isSuccess()) { + response.setOrderStr(fundAuthOrderAppFreezeResponse.getBody()); + response.setSuccess(true); + response.setCode("SUCCESS"); + response.setMessage("免押冻结成功"); + + } else { + response.setSuccess(false); + response.setCode("FAIL"); + response.setMessage("免押冻结失败: " + fundAuthOrderAppFreezeResponse.getMsg() + ":" + fundAuthOrderAppFreezeResponse.getSubMsg()); + } + } catch (Exception e) { + log.error("支付宝免押冻结异常,公司ID: {}, 订单号: {}", alipayFundFreezeRequest.getCompanyId(), alipayFundFreezeRequest.getOutOrderNo(), e); + response.setSuccess(false); + response.setCode("FAIL"); + response.setMessage("支付宝免押冻结失败异常: " + e.getMessage()); + } + return response; + } + + @Override + public AlipayFundFreezeResponse cancelFundFreeze(AlipayFundFreezeRequest alipayFundFreezeRequest) { + AlipayFundFreezeResponse response = new AlipayFundFreezeResponse(); + try { + // 构造请求参数以调用接口 + AlipayFundAuthOperationCancelRequest request = new AlipayFundAuthOperationCancelRequest(); + AlipayFundAuthOperationCancelModel model = new AlipayFundAuthOperationCancelModel(); + + // 设置商户的授权资金订单号 + model.setOutOrderNo(alipayFundFreezeRequest.getOutOrderNo()); + + // 设置商户的授权资金操作流水号 + model.setOutRequestNo(alipayFundFreezeRequest.getOutOrderNo()); + + // 设置商户对本次撤销操作的附言描述 + model.setRemark(alipayFundFreezeRequest.getTitle()); + + request.setBizModel(model); + + request.setBizModel(model); + log.info("取消免押冻结请求 : {}",request); + AlipayFundAuthOperationCancelResponse fundAuthOperationCancelResponse = alipaySdkUtil.execute(request); + log.info("取消免押冻结响应 : {}",fundAuthOperationCancelResponse.getBody()); + + if (fundAuthOperationCancelResponse.isSuccess()) { + response.setSuccess(true); + response.setCode("SUCCESS"); + response.setMessage("取消免押冻结成功"); + + } else { + response.setSuccess(false); + response.setCode("FAIL"); + response.setMessage("取消免押冻结失败: " + fundAuthOperationCancelResponse.getMsg() + ":" + fundAuthOperationCancelResponse.getSubMsg()); + } + } catch (Exception e) { + log.error("支付宝取消免押冻结异常,公司ID: {}, 订单号: {}", alipayFundFreezeRequest.getCompanyId(), alipayFundFreezeRequest.getOutOrderNo(), e); + response.setSuccess(false); + response.setCode("FAIL"); + response.setMessage("支付宝取消免押冻结失败异常: " + e.getMessage()); + } + return response; + } + @Override public boolean verifyNotifySign(Long companyId, Map params) { try {