增加免押冻结接口
This commit is contained in:
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
13
src/main/java/com/sczx/pay/dto/AlipayFundFreezeRequest.java
Normal file
13
src/main/java/com/sczx/pay/dto/AlipayFundFreezeRequest.java
Normal 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;
|
||||||
|
}
|
||||||
14
src/main/java/com/sczx/pay/dto/AlipayFundFreezeResponse.java
Normal file
14
src/main/java/com/sczx/pay/dto/AlipayFundFreezeResponse.java
Normal 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; // 状态码
|
||||||
|
}
|
||||||
@ -30,6 +30,16 @@ public interface AlipayService {
|
|||||||
*/
|
*/
|
||||||
AlipayResponse refundQuery(AlipayRefundRequest refundQueryRequest);
|
AlipayResponse refundQuery(AlipayRefundRequest refundQueryRequest);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 资金授权冻结接口
|
||||||
|
*/
|
||||||
|
AlipayFundFreezeResponse fundFreeze(AlipayFundFreezeRequest alipayFundFreezeRequest);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 撤销资金授权冻结接口
|
||||||
|
*/
|
||||||
|
AlipayFundFreezeResponse cancelFundFreeze(AlipayFundFreezeRequest alipayFundFreezeRequest);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 验证通知签名
|
* 验证通知签名
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user