From 68f6125c489954d65242f397cf981c38f57bee48 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Thu, 19 Jun 2025 15:12:34 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=E6=94=AF=E4=BB=98=E5=AE=9D=E4=BB=98?= =?UTF-8?q?=E6=AC=BE=E7=A0=81=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/entity/order/HardOrderEntity.java | 2 +- .../bsd/pjcloud/hard/config/AlipayConf.java | 10 ++++ .../hard/controller/ali/AliPayController.java | 47 +++++++++++++++++++ .../pjcloud/hard/service/AlipayService.java | 2 +- .../service/impl/ali/AlipayServiceImpl.java | 18 +++++-- .../impl/order/HardAfterSaleServiceImpl.java | 20 +++++++- .../impl/order/HardOrderServiceImpl.java | 9 ++-- .../src/main/resources/application.yml | 7 ++- .../main/resources/mapper/SmErpUnitMapper.xml | 1 - 9 files changed, 103 insertions(+), 13 deletions(-) create mode 100644 pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/ali/AliPayController.java diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/order/HardOrderEntity.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/order/HardOrderEntity.java index a62211489..0f1f7b4b4 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/order/HardOrderEntity.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/order/HardOrderEntity.java @@ -35,7 +35,7 @@ public class HardOrderEntity extends Model { /** * 订单编号 */ - @Schema(description = "订单编号 目前正元正在使用") + @Schema(description = "订单编号 目前正元、微信支付、支付宝支付正在使用") private String orderNo; /** diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/config/AlipayConf.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/config/AlipayConf.java index c0d7c82ed..7aaec00d5 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/config/AlipayConf.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/config/AlipayConf.java @@ -25,6 +25,16 @@ public class AlipayConf { /** * 公钥 */ + private String publicKey; + + /** + * 支付宝公钥 + */ private String alipayPublicKey; + /** + * 回调地址 + */ + private String callbackUrl; + } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/ali/AliPayController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/ali/AliPayController.java new file mode 100644 index 000000000..173b1c7bf --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/ali/AliPayController.java @@ -0,0 +1,47 @@ +package com.bsd.pjcloud.hard.controller.ali; + +import com.bsd.pjcloud.common.security.annotation.Inner; +import com.bsd.pjcloud.hard.service.AlipayService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/hard-ali-pay") +@Tag(description = "hard-ali-pay", name = "支付宝相关") +@SecurityRequirement(name = HttpHeaders.AUTHORIZATION) +@Validated +public class AliPayController { + + private final AlipayService aliPayService; + + /* ************************************* start callback start ************************************* */ + + @Inner(value = false) + @PostMapping("/callback") + @Operation(summary = "支付宝回调") + public String refundCallback(HttpServletRequest request) { + Map parameterMap = request.getParameterMap(); + Map params = new HashMap<>(); + for (Map.Entry entry : parameterMap.entrySet()) { + params.put(entry.getKey(), entry.getValue()[0]); + } + return aliPayService.refundCallback(params); + } + + /* ************************************* end callback end ************************************* */ + +} diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/AlipayService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/AlipayService.java index 1490154e5..d2c04b392 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/AlipayService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/AlipayService.java @@ -38,5 +38,5 @@ public interface AlipayService { /** * 退款回调 */ - String refundCallback(HttpEntity httpEntity, @RequestHeader Map headers); + String refundCallback(Map params); } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/AlipayServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/AlipayServiceImpl.java index b25b64275..4bfcdad98 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/AlipayServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/AlipayServiceImpl.java @@ -5,6 +5,7 @@ import com.alipay.api.AlipayClient; import com.alipay.api.AlipayConfig; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.domain.*; +import com.alipay.api.internal.util.AlipaySignature; import com.alipay.api.request.*; import com.alipay.api.response.*; import com.bsd.pjcloud.hard.api.dto.ali.*; @@ -71,6 +72,7 @@ public class AlipayServiceImpl implements AlipayService { // 支付场景 model.setScene("bar_code"); request.setBizModel(model); + request.setNotifyUrl(conf.getCallbackUrl()); try { AlipayTradePayResponse response = alipayClient.execute(request); String body = response.getBody(); @@ -148,6 +150,7 @@ public class AlipayServiceImpl implements AlipayService { // 退款单号 model.setOutRequestNo(String.valueOf(dto.getRefundId())); request.setBizModel(model); + request.setNotifyUrl(conf.getCallbackUrl()); try { AlipayTradeRefundResponse response = alipayClient.execute(request); String body = response.getBody(); @@ -170,6 +173,7 @@ public class AlipayServiceImpl implements AlipayService { // 退款单号 model.setOutRequestNo(String.valueOf(dto.getRefundId())); request.setBizModel(model); + request.setNotifyUrl(conf.getCallbackUrl()); try { AlipayTradeFastpayRefundQueryResponse response = alipayClient.execute(request); String body = response.getBody(); @@ -185,13 +189,19 @@ public class AlipayServiceImpl implements AlipayService { * 退款回调 */ @Override - public String refundCallback(HttpEntity httpEntity, Map headers) { - AlipayClient alipayClient = getClient(); + public String refundCallback(Map params) { + if (ObjectUtil.isEmpty(params)) return "fail"; try { - + boolean checkSignature = AlipaySignature.rsaCheckV1(params, conf.getAlipayPublicKey(), "UTF-8", "RSA2"); + if (!checkSignature) { + log.error("支付宝回调校验失败"); + return "fail"; + } + log.debug("支付宝回调参数:{}", params); + return "success"; } catch (Exception e) { log.error("退款回调", e); + return "fail"; } - return ""; } } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java index f9ebb11e1..cd257b370 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java @@ -3,6 +3,7 @@ package com.bsd.pjcloud.hard.service.impl.order; import cn.hutool.core.util.ObjectUtil; import cn.hutool.extra.spring.SpringUtil; import cn.hutool.json.JSONUtil; +import com.alipay.api.response.AlipayTradeRefundResponse; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -26,6 +27,7 @@ import com.bsd.pjcloud.hard.api.constant.refund.HardAfterSaleOperateTypeEnum; import com.bsd.pjcloud.hard.api.constant.refund.HardRefundStatusEnum; import com.bsd.pjcloud.hard.api.constant.refund.HardSaleStatusEnum; import com.bsd.pjcloud.hard.api.constant.refund.HardSaleTypeEnum; +import com.bsd.pjcloud.hard.api.dto.ali.AliRefundDto; import com.bsd.pjcloud.hard.api.dto.order.HardAdminRefundDto; import com.bsd.pjcloud.hard.api.dto.order.HardAfterSaleDto; import com.bsd.pjcloud.hard.api.dto.order.HardDisagreeDto; @@ -42,6 +44,7 @@ import com.bsd.pjcloud.hard.api.vo.wechat.WechatRefundVo; import com.bsd.pjcloud.hard.mapper.order.HardAfterSaleLogMapper; import com.bsd.pjcloud.hard.mapper.order.HardAfterSaleMapper; import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper; +import com.bsd.pjcloud.hard.service.AlipayService; import com.bsd.pjcloud.hard.service.HardAfterSaleService; import com.bsd.pjcloud.hard.service.HardOrderService; import com.bsd.pjcloud.hard.service.WechatPayService; @@ -73,6 +76,7 @@ public class HardAfterSaleServiceImpl extends ServiceImpl SELECT u.id, s.product_code, - s.barCode, s.pic_url, s.product_name, s.unit, From 554e7d2377ba31a3c7ec3d1b20945b38b8e333df Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Thu, 19 Jun 2025 15:37:25 +0800 Subject: [PATCH 2/2] 11 --- .../com/bsd/pjcloud/hard/service/impl/ali/AlipayServiceImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/AlipayServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/AlipayServiceImpl.java index 4bfcdad98..8cec23710 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/AlipayServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/ali/AlipayServiceImpl.java @@ -13,7 +13,6 @@ import com.bsd.pjcloud.hard.config.AlipayConf; import com.bsd.pjcloud.hard.service.AlipayService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpEntity; import org.springframework.stereotype.Service; import java.math.BigDecimal;