From 13cf90d54b37defc5cdac26b0e1f6714a03b227f Mon Sep 17 00:00:00 2001 From: qiube <18969599531@163.com> Date: Tue, 23 Dec 2025 10:18:15 +0800 Subject: [PATCH] =?UTF-8?q?feat(payment):=20=E6=B7=BB=E5=8A=A0PayPal?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E9=85=8D=E7=BD=AE=E5=92=8C=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=9B=B4=E6=96=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 配置PayPal沙箱环境的Client ID和密钥 - 新增updatePaymentStatus方法用于更新订单支付状态 - 新增updateOrderStatus方法用于更新订单状态 - 实现支付状态更新时同步更新订单状态逻辑 - 添加详细的日志记录和异常处理机制 - 集成MyBatis Plus查询更新订单数据 --- .../mtpay/service/CustomerOrderService.java | 15 +++++++ .../impl/CustomerOrderServiceImpl.java | 44 +++++++++++++++++++ mt-pay/src/main/resources/application-dev.yml | 11 +++++ 3 files changed, 70 insertions(+) diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/service/CustomerOrderService.java b/mt-pay/src/main/java/com/mtkj/mtpay/service/CustomerOrderService.java index 1c8e796..905548d 100644 --- a/mt-pay/src/main/java/com/mtkj/mtpay/service/CustomerOrderService.java +++ b/mt-pay/src/main/java/com/mtkj/mtpay/service/CustomerOrderService.java @@ -28,5 +28,20 @@ public interface CustomerOrderService { * @return 订单响应 */ CustomerOrderResponseDTO getOrderById(Long id); + + /** + * 更新订单支付状态 + * @param orderNo 订单号 + * @param paymentStatus 支付状态 + * @param paymentOrderId 支付订单ID(可选) + */ + void updatePaymentStatus(String orderNo, String paymentStatus, Long paymentOrderId); + + /** + * 更新订单状态 + * @param orderNo 订单号 + * @param status 订单状态 + */ + void updateOrderStatus(String orderNo, String status); } diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/CustomerOrderServiceImpl.java b/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/CustomerOrderServiceImpl.java index 237cd61..db9fbe4 100644 --- a/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/CustomerOrderServiceImpl.java +++ b/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/CustomerOrderServiceImpl.java @@ -137,5 +137,49 @@ public class CustomerOrderServiceImpl implements CustomerOrderService { BeanUtils.copyProperties(order, response); return response; } + + @Override + public void updatePaymentStatus(String orderNo, String paymentStatus, Long paymentOrderId) { + log.info("更新订单支付状态,订单号: {}, 支付状态: {}, 支付订单ID: {}", + orderNo, paymentStatus, paymentOrderId); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(CustomerOrder::getOrderNo, orderNo); + CustomerOrder order = customerOrderMapper.selectOne(queryWrapper); + + if (order == null) { + log.warn("订单不存在,订单号: {}", orderNo); + throw new BusinessException(ResultCode.DATA_NOT_FOUND, "订单不存在"); + } + + order.setPaymentStatus(paymentStatus); + if (paymentOrderId != null) { + order.setPaymentOrderId(paymentOrderId); + } + + // 如果支付成功,更新订单状态为已支付 + if ("PAID".equals(paymentStatus)) { + order.setStatus("PAID"); + } + + customerOrderMapper.updateById(order); + log.info("订单支付状态更新成功,订单号: {}", orderNo); + } + + @Override + public void updateOrderStatus(String orderNo, String status) { + log.info("更新订单状态,订单号: {}, 状态: {}", orderNo, status); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(CustomerOrder::getOrderNo, orderNo); + CustomerOrder order = customerOrderMapper.selectOne(queryWrapper); + + if (order == null) { + log.warn("订单不存在,订单号: {}", orderNo); + throw new BusinessException(ResultCode.DATA_NOT_FOUND, "订单不存在"); + } + + order.setStatus(status); + customerOrderMapper.updateById(order); + log.info("订单状态更新成功,订单号: {}", orderNo); + } } diff --git a/mt-pay/src/main/resources/application-dev.yml b/mt-pay/src/main/resources/application-dev.yml index a24bad5..9f7c9b7 100644 --- a/mt-pay/src/main/resources/application-dev.yml +++ b/mt-pay/src/main/resources/application-dev.yml @@ -65,3 +65,14 @@ pingpong: gateway: https://sandbox-acquirer-payment.pingpongx.com mode: sandbox +# PayPal支付配置(开发环境使用沙箱) +paypal: + # PayPal Client ID(API密钥) + client-id: AdGYUZpvLuHR30dybOApvM-RNB1pVKtd74SVfh-6TK52xV-1JEBddHVMCWuDdyyHri4DXd4kABBi7Icb + # PayPal Client Secret(密钥) + client-secret: ENblspyRmwsOU_PWFurlhEYUF5Da6aYKl0pjK4ehm7p3R5aSqvbpaF_YsIIs8v0ty1c9WJu15XP-Fe_1 + # 环境模式:sandbox(沙箱)或 production(生产) + mode: sandbox + # 是否启用PayPal支付 + enabled: true +