增加免押冻结接口

This commit is contained in:
2025-09-23 08:09:42 +08:00
parent 42984db1f7
commit f2a35a6929
5 changed files with 159 additions and 0 deletions

View File

@ -67,4 +67,23 @@ public class AliPaymentController {
return alipayService.refundQuery(request); 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);
}
} }

View File

@ -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;
}

View File

@ -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; // 状态码
}

View File

@ -30,6 +30,16 @@ public interface AlipayService {
*/ */
AlipayResponse refundQuery(AlipayRefundRequest refundQueryRequest); AlipayResponse refundQuery(AlipayRefundRequest refundQueryRequest);
/**
* 资金授权冻结接口
*/
AlipayFundFreezeResponse fundFreeze(AlipayFundFreezeRequest alipayFundFreezeRequest);
/**
* 撤销资金授权冻结接口
*/
AlipayFundFreezeResponse cancelFundFreeze(AlipayFundFreezeRequest alipayFundFreezeRequest);
/** /**
* 验证通知签名 * 验证通知签名
*/ */

View File

@ -44,6 +44,9 @@ public class AlipayServiceImpl implements AlipayService {
@Value("${alipay.alipay-public-cert-path}") @Value("${alipay.alipay-public-cert-path}")
private String alipayPublicCertPath; private String alipayPublicCertPath;
@Value("${alipay.serviceid}")
private String serviceId ;
@Autowired @Autowired
private PaymentRecordMapper paymentRecordMapper; private PaymentRecordMapper paymentRecordMapper;
@ -302,6 +305,106 @@ public class AlipayServiceImpl implements AlipayService {
return response; 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 @Override
public boolean verifyNotifySign(Long companyId, Map<String, String> params) { public boolean verifyNotifySign(Long companyId, Map<String, String> params) {
try { try {