diff --git a/.github/workflows/backend-ci.yml b/.github/workflows/backend-ci.yml index f8b22ee7..15ff97fe 100644 --- a/.github/workflows/backend-ci.yml +++ b/.github/workflows/backend-ci.yml @@ -20,7 +20,7 @@ jobs: cache-dependency-path: backend/go.sum - name: Verify Go version run: | - go version | grep -q 'go1.26.2' + go version | grep -q 'go1.26.3' - name: Unit tests working-directory: backend run: make test-unit @@ -60,7 +60,7 @@ jobs: cache-dependency-path: backend/go.sum - name: Verify Go version run: | - go version | grep -q 'go1.26.2' + go version | grep -q 'go1.26.3' - name: golangci-lint uses: golangci/golangci-lint-action@v9 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 26ed8524..80bc9850 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -115,7 +115,7 @@ jobs: - name: Verify Go version run: | - go version | grep -q 'go1.26.2' + go version | grep -q 'go1.26.3' # Docker setup for GoReleaser - name: Set up QEMU diff --git a/.github/workflows/security-scan.yml b/.github/workflows/security-scan.yml index 600fd2fa..ef8e59e5 100644 --- a/.github/workflows/security-scan.yml +++ b/.github/workflows/security-scan.yml @@ -23,7 +23,7 @@ jobs: cache-dependency-path: backend/go.sum - name: Verify Go version run: | - go version | grep -q 'go1.26.2' + go version | grep -q 'go1.26.3' - name: Run govulncheck working-directory: backend run: | diff --git a/Dockerfile b/Dockerfile index 890bda0b..7befb464 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,7 @@ # ============================================================================= ARG NODE_IMAGE=node:24-alpine -ARG GOLANG_IMAGE=golang:1.26.2-alpine +ARG GOLANG_IMAGE=golang:1.26.3-alpine ARG ALPINE_IMAGE=alpine:3.21 ARG POSTGRES_IMAGE=postgres:18-alpine ARG GOPROXY=https://goproxy.cn,direct diff --git a/README.md b/README.md index 718730c6..bdb09d15 100644 --- a/README.md +++ b/README.md @@ -72,8 +72,8 @@ Sub2API is an AI API gateway platform designed to distribute and manage API quot






+ {{ t(field.hintKey) }} +
@@ -177,14 +186,17 @@ - -- {{ t('admin.settings.payment.stripeWebhookHint') }} + {{ t(providerWebhookHint) }}
- {{ stripeWebhookUrl }}
+ {{ providerWebhookUrl }}
+ + {{ t('admin.settings.payment.stripeWebhookApiVersionHint', { version: STRIPE_SDK_API_VERSION }) }} +
{{ errorMessage }}
+ +{{ t('payment.qr.payInNewWindowHint') }}
+{{ t('payment.actualPay') }}
-¥{{ order.pay_amount.toFixed(2) }}
+{{ formatGatewayAmount(order.pay_amount) }}
{{ stripeError }}
@@ -101,17 +101,20 @@ import { usePaymentStore } from '@/stores/payment' import { paymentAPI } from '@/api/payment' import { extractI18nErrorMessage } from '@/utils/apiError' import { isMobileDevice } from '@/utils/device' +import { formatPaymentAmount, normalizePaymentCurrency } from '@/components/payment/currency' +import { PAYMENT_RECOVERY_STORAGE_KEY, readPaymentRecoverySnapshot } from '@/components/payment/paymentFlow' import type { PaymentOrder } from '@/types/payment' import type { Stripe, StripeElements } from '@stripe/stripe-js' import AppLayout from '@/components/layout/AppLayout.vue' import Icon from '@/components/icons/Icon.vue' -const { t } = useI18n() +const i18n = useI18n() +const { t } = i18n const route = useRoute() const router = useRouter() const paymentStore = usePaymentStore() -// Popup mode: skip AppLayout when opened with a specific method (alipay/wechat_pay) +// 弹窗模式:指定支付宝或微信方式时跳过 AppLayout const isPopup = computed(() => !!route.query.method) const loading = ref(true) @@ -121,6 +124,7 @@ const stripeSubmitting = ref(false) const stripeSuccess = ref(false) const stripeReady = ref(false) const order = ref