From 346156ee9b196832100346179b8a8cedc28b29e9 Mon Sep 17 00:00:00 2001 From: break Date: Fri, 3 Jul 2026 10:26:48 +0900 Subject: [PATCH] =?UTF-8?q?=E5=8D=A1=E5=8F=AA=E5=85=81=E8=AE=B8=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E5=AE=9D=E6=94=AF=E4=BB=98,=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E5=8F=AA=E5=85=81=E8=AE=B8=E5=BE=AE=E4=BF=A1=E6=94=AF=E4=BB=98?= =?UTF-8?q?,=E9=92=B1=E5=8C=85=E5=85=85=E5=80=BC=E4=B9=9F=E9=81=B5?= =?UTF-8?q?=E5=BE=AA=E8=BF=99=E4=B8=AA=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/handler/app/client_wallet.go | 12 +++++++++++ internal/service/client_order/service.go | 26 ++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/internal/handler/app/client_wallet.go b/internal/handler/app/client_wallet.go index c76ca2c..fc1d851 100644 --- a/internal/handler/app/client_wallet.go +++ b/internal/handler/app/client_wallet.go @@ -279,6 +279,18 @@ func (h *ClientWalletHandler) CreateRecharge(c *fiber.Ctx) error { return err } + // 第三方支付方式与资产类型必须匹配:单卡只允许支付宝,设备只允许微信 + switch resolved.Asset.AssetType { + case "card": + if req.PaymentMethod != constants.RechargeMethodAlipay { + return errors.New(errors.CodeInvalidParam, "单卡资产只支持支付宝充值") + } + case "device": + if req.PaymentMethod != constants.RechargeMethodWechat { + return errors.New(errors.CodeInvalidParam, "设备资产只支持微信充值") + } + } + config, err := h.wechatConfigService.GetActiveConfig(resolved.SkipPermissionCtx) if err != nil { return err diff --git a/internal/service/client_order/service.go b/internal/service/client_order/service.go index 155a08e..fd0a4bd 100644 --- a/internal/service/client_order/service.go +++ b/internal/service/client_order/service.go @@ -229,6 +229,18 @@ func (s *Service) CreateOrder(ctx context.Context, customerID uint, req *dto.Cli }() if forceRecharge.NeedForceRecharge { + // 强充第三方支付方式与资产类型必须匹配:单卡只允许支付宝,设备只允许微信 + switch assetInfo.AssetType { + case "card": + if req.PaymentMethod != model.PaymentMethodAlipay { + return nil, errors.New(errors.CodeInvalidParam, "单卡资产强充只支持支付宝支付") + } + case constants.ResourceTypeDevice: + if req.PaymentMethod == model.PaymentMethodAlipay { + return nil, errors.New(errors.CodeInvalidParam, "设备资产强充只支持微信支付") + } + } + if req.PaymentMethod == model.PaymentMethodAlipay { // 支付宝强充:不需要 app_type / OpenID activeConfig, err := s.wechatConfigService.GetActiveConfig(skipCtx) @@ -1241,6 +1253,20 @@ func (s *Service) PayOrder(ctx context.Context, customerID uint, orderID uint, r return nil, errors.New(errors.CodeNeedRealname) } + // 第三方支付方式与资产类型必须匹配:单卡只允许支付宝,设备只允许微信 + if req.PaymentMethod == model.PaymentMethodWechat || req.PaymentMethod == model.PaymentMethodAlipay { + switch order.OrderType { + case model.OrderTypeSingleCard: + if req.PaymentMethod != model.PaymentMethodAlipay { + return nil, errors.New(errors.CodeInvalidParam, "单卡资产只支持支付宝支付") + } + case model.OrderTypeDevice: + if req.PaymentMethod != model.PaymentMethodWechat { + return nil, errors.New(errors.CodeInvalidParam, "设备资产只支持微信支付") + } + } + } + switch req.PaymentMethod { case model.PaymentMethodWallet: if err := s.orderPaymentService.WalletPay(skipCtx, orderID, model.BuyerTypePersonal, customerID); err != nil {