From f97eb7e47ac8cf2592fa5b14925b32597b6819e8 Mon Sep 17 00:00:00 2001 From: zhangli <123879394@qq.com> Date: Thu, 25 Sep 2025 21:02:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=85=8D=E6=8A=BC=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AliAuthPaymentController.java | 7 +++ .../pay/dto/AlipayFinishFreezeRequest.java | 19 ++++++++ .../com/sczx/pay/service/AlipayService.java | 6 +++ .../pay/service/impl/AlipayServiceImpl.java | 44 +++++++++++++++++++ 4 files changed, 76 insertions(+) create mode 100644 src/main/java/com/sczx/pay/dto/AlipayFinishFreezeRequest.java diff --git a/src/main/java/com/sczx/pay/controller/AliAuthPaymentController.java b/src/main/java/com/sczx/pay/controller/AliAuthPaymentController.java index 061749a..9db5ed6 100644 --- a/src/main/java/com/sczx/pay/controller/AliAuthPaymentController.java +++ b/src/main/java/com/sczx/pay/controller/AliAuthPaymentController.java @@ -45,4 +45,11 @@ public class AliAuthPaymentController { log.info("收到支付宝查询免押冻结请求: {}", alipayQueryFreezeRequest); return alipayService.queryFundFreeze(alipayQueryFreezeRequest); } + + @ApiOperation(value = "完结冻结接口") + @PostMapping("/finishFreeze") + public AlipayResponse finishFreeze(@RequestBody AlipayFinishFreezeRequest alipayFinishFreezeRequest) { + log.info("收到支付宝完结免押冻结请求: {}", alipayFinishFreezeRequest); + return alipayService.finishFreeze(alipayFinishFreezeRequest); + } } diff --git a/src/main/java/com/sczx/pay/dto/AlipayFinishFreezeRequest.java b/src/main/java/com/sczx/pay/dto/AlipayFinishFreezeRequest.java new file mode 100644 index 0000000..c357861 --- /dev/null +++ b/src/main/java/com/sczx/pay/dto/AlipayFinishFreezeRequest.java @@ -0,0 +1,19 @@ +package com.sczx.pay.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@ApiModel("支付宝资金冻结请求参数") +@Data +public class AlipayFinishFreezeRequest { + private String companyId; + @ApiModelProperty(value = "支付宝资金授权订单号") + private String authNo; + + @ApiModelProperty(value = "解冻请求流水号") + private String outRequestNo; + + @ApiModelProperty(value = "解冻金额") + private String amount; +} diff --git a/src/main/java/com/sczx/pay/service/AlipayService.java b/src/main/java/com/sczx/pay/service/AlipayService.java index 181a6cd..4ec9519 100644 --- a/src/main/java/com/sczx/pay/service/AlipayService.java +++ b/src/main/java/com/sczx/pay/service/AlipayService.java @@ -1,6 +1,7 @@ package com.sczx.pay.service; import com.sczx.pay.dto.*; +import org.springframework.web.bind.annotation.RequestBody; import java.util.Map; @@ -45,6 +46,11 @@ public interface AlipayService { */ AlipayQueryFreezeResponse queryFundFreeze(AlipayQueryFreezeRequest alipayQueryFreezeRequest); + /** + * 完结冻结接口 + */ + AlipayResponse finishFreeze(AlipayFinishFreezeRequest alipayFinishFreezeRequest); + /** * 验证通知签名 */ 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 e9aae05..9adbcad 100644 --- a/src/main/java/com/sczx/pay/service/impl/AlipayServiceImpl.java +++ b/src/main/java/com/sczx/pay/service/impl/AlipayServiceImpl.java @@ -455,6 +455,50 @@ public class AlipayServiceImpl implements AlipayService { return response; } + @Override + public AlipayResponse finishFreeze(AlipayFinishFreezeRequest alipayFinishFreezeRequest) { + AlipayResponse response = new AlipayResponse(); + try { + // 构造请求参数以调用接口 + AlipayFundAuthOrderUnfreezeRequest request = new AlipayFundAuthOrderUnfreezeRequest(); + AlipayFundAuthOrderUnfreezeModel model = new AlipayFundAuthOrderUnfreezeModel(); + + // 设置支付宝资金授权订单号 + model.setAuthNo(alipayFinishFreezeRequest.getAuthNo()); + + // 设置解冻请求流水号 + model.setOutRequestNo(alipayFinishFreezeRequest.getOutRequestNo()); + + // 设置本次操作解冻的金额 + model.setAmount(alipayFinishFreezeRequest.getAmount()); + + // 设置商户对本次解冻操作的附言描述 + model.setRemark("还车解冻押金"); + request.setBizModel(model); + // 第三方代调用模式下请设置app_auth_token + // request.putOtherTextParam("app_auth_token", "<-- 请填写应用授权令牌 -->"); + log.info("完结免押冻结请求 : {}",request); + AlipayFundAuthOrderUnfreezeResponse unFreezeResponse = alipaySdkUtil.execute(request); + log.info("完结免押冻结响应 : {}",unFreezeResponse.getBody()); + + if (unFreezeResponse.isSuccess()) { + response.setSuccess(true); + response.setCode("SUCCESS"); + response.setMessage("完结免押冻结成功"); + } else { + response.setSuccess(false); + response.setCode("FAIL"); + response.setMessage("完结免押冻结失败: " + unFreezeResponse.getMsg() + ":" + unFreezeResponse.getSubMsg()); + } + } catch (Exception e) { + log.error("支付宝完结免押冻结异常,公司ID: {}, 订单号: {}", alipayFinishFreezeRequest.getCompanyId(), alipayFinishFreezeRequest.getOutRequestNo(), e); + response.setSuccess(false); + response.setCode("FAIL"); + response.setMessage("支付宝完结免押冻结失败异常: " + e.getMessage()); + } + return response; + } + @Override public boolean verifyNotifySign(Long companyId, Map params) { try {