From 27f5576aa28d6f8b787df8aa7bbdcbaca262f24e Mon Sep 17 00:00:00 2001 From: zhangli <123879394@qq.com> Date: Thu, 25 Sep 2025 01:11:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 2 +- Jenkinsfile | 2 + .../controller/AliAuthPaymentController.java | 48 ++++++++++++++++++ .../pay/controller/AliPaymentController.java | 20 -------- .../pay/dto/AlipayQueryFreezeRequest.java | 12 +++++ .../pay/dto/AlipayQueryFreezeResponse.java | 14 ++++++ .../com/sczx/pay/service/AlipayService.java | 5 ++ .../pay/service/impl/AlipayServiceImpl.java | 50 +++++++++++++++++++ src/main/resources/bootstrap.yml | 2 +- 9 files changed, 133 insertions(+), 22 deletions(-) create mode 100644 src/main/java/com/sczx/pay/controller/AliAuthPaymentController.java create mode 100644 src/main/java/com/sczx/pay/dto/AlipayQueryFreezeRequest.java create mode 100644 src/main/java/com/sczx/pay/dto/AlipayQueryFreezeResponse.java diff --git a/Dockerfile b/Dockerfile index fd863fa..75e6d3c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,4 +7,4 @@ WORKDIR /app # 复制 jar 包 COPY target/*.jar app.jar # 设置 JVM 参数和启动命令 -ENTRYPOINT ["java", "-jar", "-Xms64m", "-Xmx128m", "app.jar"] \ No newline at end of file +ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar app.jar"] \ No newline at end of file diff --git a/Jenkinsfile b/Jenkinsfile index 7070542..8e819ea 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -7,6 +7,7 @@ pipeline { APP_NAME = "sczx-singlepay" DOCKER_IMAGE = "${APP_NAME}:latest" CONTAINER_NAME = "${APP_NAME}-container" + NACOS_ADDR = "115.190.8.52:8848" } stages { @@ -66,6 +67,7 @@ pipeline { --name \${CONTAINER_NAME} \ --network sczx-net \ -p 8019:8019 \ + -e NACOS_SERVER_ADDR=\${NACOS_ADDR} \ -e JAVA_OPTS="-Xms256m -Xmx512m -Duser.timezone=Asia/Shanghai" \ -e TZ=Asia/Shanghai \ -v /etc/localtime:/etc/localtime:ro \ diff --git a/src/main/java/com/sczx/pay/controller/AliAuthPaymentController.java b/src/main/java/com/sczx/pay/controller/AliAuthPaymentController.java new file mode 100644 index 0000000..061749a --- /dev/null +++ b/src/main/java/com/sczx/pay/controller/AliAuthPaymentController.java @@ -0,0 +1,48 @@ +package com.sczx.pay.controller; + +import com.sczx.pay.dto.*; +import com.sczx.pay.service.AlipayService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +@Api(value = "支付宝芝麻免押支付接口", tags = "支付宝芝麻免押支付接口") +@Slf4j +@RestController +@RequestMapping("/api/authAlipay") +public class AliAuthPaymentController { + + @Autowired + private AlipayService alipayService; + + + + /** + * 免押冻结 + */ + @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); + } + + @ApiOperation(value = "查询冻结接口") + @PostMapping("/queryFundFreeze") + public AlipayQueryFreezeResponse queryFundFreeze(@RequestBody AlipayQueryFreezeRequest alipayQueryFreezeRequest) { + log.info("收到支付宝查询免押冻结请求: {}", alipayQueryFreezeRequest); + return alipayService.queryFundFreeze(alipayQueryFreezeRequest); + } +} diff --git a/src/main/java/com/sczx/pay/controller/AliPaymentController.java b/src/main/java/com/sczx/pay/controller/AliPaymentController.java index 3500265..1e0058e 100644 --- a/src/main/java/com/sczx/pay/controller/AliPaymentController.java +++ b/src/main/java/com/sczx/pay/controller/AliPaymentController.java @@ -66,24 +66,4 @@ public class AliPaymentController { log.info("收到支付宝退款查询请求: {}", 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); - } } diff --git a/src/main/java/com/sczx/pay/dto/AlipayQueryFreezeRequest.java b/src/main/java/com/sczx/pay/dto/AlipayQueryFreezeRequest.java new file mode 100644 index 0000000..9ca37c5 --- /dev/null +++ b/src/main/java/com/sczx/pay/dto/AlipayQueryFreezeRequest.java @@ -0,0 +1,12 @@ +package com.sczx.pay.dto; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +@ApiModel("支付宝资金冻结请求参数") +@Data +public class AlipayQueryFreezeRequest { + private String companyId; + private String outOrderNo; + private String operationType; +} diff --git a/src/main/java/com/sczx/pay/dto/AlipayQueryFreezeResponse.java b/src/main/java/com/sczx/pay/dto/AlipayQueryFreezeResponse.java new file mode 100644 index 0000000..9755cc1 --- /dev/null +++ b/src/main/java/com/sczx/pay/dto/AlipayQueryFreezeResponse.java @@ -0,0 +1,14 @@ +package com.sczx.pay.dto; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +@ApiModel("支付宝资金冻结响应参数") +@Data +public class AlipayQueryFreezeResponse { + private boolean success; + private String message; + private String outTradeNo; // 商户订单号 + private String authNo; // 支付串(用于前端调起支付) + 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 29123de..181a6cd 100644 --- a/src/main/java/com/sczx/pay/service/AlipayService.java +++ b/src/main/java/com/sczx/pay/service/AlipayService.java @@ -40,6 +40,11 @@ public interface AlipayService { */ AlipayFundFreezeResponse cancelFundFreeze(AlipayFundFreezeRequest alipayFundFreezeRequest); + /** + * 查询资金授权冻结接口 + */ + AlipayQueryFreezeResponse queryFundFreeze(AlipayQueryFreezeRequest alipayQueryFreezeRequest); + /** * 验证通知签名 */ 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 57fece7..6ff2cdc 100644 --- a/src/main/java/com/sczx/pay/service/impl/AlipayServiceImpl.java +++ b/src/main/java/com/sczx/pay/service/impl/AlipayServiceImpl.java @@ -17,6 +17,7 @@ import com.sczx.pay.service.AlipayService; import com.sczx.pay.utils.AlipaySdkUtil; import com.sczx.pay.utils.ThreadPoolUtils; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -405,6 +406,55 @@ public class AlipayServiceImpl implements AlipayService { return response; } + @Override + public AlipayQueryFreezeResponse queryFundFreeze(AlipayQueryFreezeRequest alipayQueryFreezeRequest) { + AlipayQueryFreezeResponse response = new AlipayQueryFreezeResponse(); + try { + // 构造请求参数以调用接口 + AlipayFundAuthOperationDetailQueryRequest request = new AlipayFundAuthOperationDetailQueryRequest(); + AlipayFundAuthOperationDetailQueryModel model = new AlipayFundAuthOperationDetailQueryModel(); +// +// // 设置支付宝授权资金订单号 +// model.setAuthNo("2014021601002000640012345678"); + + // 设置商户的授权资金订单号 + model.setOutOrderNo(alipayQueryFreezeRequest.getOutOrderNo()); + +// // 设置支付宝的授权资金操作流水号 +// model.setOperationId("20140216010020006400"); + + // 设置商户的授权资金操作流水号 + model.setOutRequestNo(alipayQueryFreezeRequest.getOutOrderNo()); + + // 设置需要查询的授权资金操作类型 + model.setOperationType(alipayQueryFreezeRequest.getOperationType()); + + request.setBizModel(model); + log.info("查询免押冻结请求 : {}",request); + AlipayFundAuthOperationDetailQueryResponse queryResponse = alipaySdkUtil.execute(request); + log.info("查询免押冻结响应 : {}",queryResponse.getBody()); + + if (queryResponse.isSuccess() && StringUtils.equalsIgnoreCase(queryResponse.getOrderStatus(), "AUTHORIZED")) { + response.setSuccess(true); + response.setCode("SUCCESS"); + response.setAuthNo(queryResponse.getAuthNo()); + response.setOutTradeNo(queryResponse.getOutOrderNo()); + response.setMessage("查询免押冻结成功"); + + } else { + response.setSuccess(false); + response.setCode("FAIL"); + response.setMessage("查询免押冻结失败: " + queryResponse.getMsg() + ":" + queryResponse.getSubMsg()); + } + } catch (Exception e) { + log.error("支付宝查询免押冻结异常,公司ID: {}, 订单号: {}", alipayQueryFreezeRequest.getCompanyId(), alipayQueryFreezeRequest.getOutOrderNo(), e); + response.setSuccess(false); + response.setCode("FAIL"); + response.setMessage("支付宝查询免押冻结失败异常: " + e.getMessage()); + } + return response; + } + @Override public boolean verifyNotifySign(Long companyId, Map params) { try { diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml index f6df30f..2d93521 100644 --- a/src/main/resources/bootstrap.yml +++ b/src/main/resources/bootstrap.yml @@ -3,7 +3,7 @@ spring: name: sczx-singlepay # 应用名称,对应 Nacos 配置的 dataId cloud: nacos: - server-addr: 115.190.8.52:8848 # Nacos 服务器地址 + server-addr: ${NACOS_SERVER_ADDR} # Nacos 服务器地址 config: group: DEFAULT_GROUP # 配置分组 file-extension: yaml # 配置文件格式