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 {