diff --git a/backend/internal/service/payment_order.go b/backend/internal/service/payment_order.go index b1493e9408..e9841461e1 100644 --- a/backend/internal/service/payment_order.go +++ b/backend/internal/service/payment_order.go @@ -436,6 +436,8 @@ func (s *PaymentService) ExpireTimedOutOrders(ctx context.Context) (int, error) } n := 0 for _, o := range orders { + // Cancel upstream payment (e.g. Stripe PaymentIntent) before marking expired + s.cancelUpstreamPayment(ctx, o) c, e := s.entClient.PaymentOrder.Update().Where(paymentorder.IDEQ(o.ID), paymentorder.StatusEQ(OrderStatusPending)).SetStatus(OrderStatusExpired).Save(ctx) if e != nil { slog.Warn("expire failed", "orderID", o.ID, "error", e) @@ -448,3 +450,20 @@ func (s *PaymentService) ExpireTimedOutOrders(ctx context.Context) (int, error) } return n, nil } + +// cancelUpstreamPayment attempts to cancel the upstream provider payment (e.g. Stripe PaymentIntent). +func (s *PaymentService) cancelUpstreamPayment(ctx context.Context, o *dbent.PaymentOrder) { + if o.PaymentTradeNo == "" || o.PaymentType == "" { + return + } + s.EnsureProviders(ctx) + prov, err := s.registry.GetProvider(o.PaymentType) + if err != nil { + return + } + if cp, ok := prov.(payment.CancelableProvider); ok { + if err := cp.CancelPayment(ctx, o.PaymentTradeNo); err != nil { + slog.Warn("cancel upstream payment failed", "orderID", o.ID, "tradeNo", o.PaymentTradeNo, "error", err) + } + } +} diff --git a/frontend/src/i18n/locales/zh.ts b/frontend/src/i18n/locales/zh.ts index 8f9f06897b..bf6c0dd088 100644 --- a/frontend/src/i18n/locales/zh.ts +++ b/frontend/src/i18n/locales/zh.ts @@ -4510,8 +4510,8 @@ export default { description: '配置支付系统选项', enabled: '启用支付', enabledHint: '启用或禁用支付系统', - enabledPaymentTypes: '服务商', - enabledPaymentTypesHint: '选择要启用的服务商', + enabledPaymentTypes: '支持的支付方式', + enabledPaymentTypesHint: '选择要启用的支付方式', minAmount: '最低金额', maxAmount: '最高金额', dailyLimit: '每日限额', diff --git a/frontend/src/views/user/PaymentView.vue b/frontend/src/views/user/PaymentView.vue index 0dfdbaabc5..f0f86ff3be 100644 --- a/frontend/src/views/user/PaymentView.vue +++ b/frontend/src/views/user/PaymentView.vue @@ -96,42 +96,6 @@ diff --git a/frontend/src/views/user/StripePaymentView.vue b/frontend/src/views/user/StripePaymentView.vue index 22e35115df..bc65255d64 100644 --- a/frontend/src/views/user/StripePaymentView.vue +++ b/frontend/src/views/user/StripePaymentView.vue @@ -1,6 +1,6 @@ - +