From c1eb0bbcf3918aa26bfab683e2609f65462bf601 Mon Sep 17 00:00:00 2001 From: eric Date: Fri, 13 Mar 2026 05:51:05 -0500 Subject: [PATCH] 's' --- app/api/pay/confirm/route.ts | 2 +- app/components/PayStatusPollProvider.tsx | 2 +- app/lib/payment/usePayStatusPoll.ts | 17 +++++++++++++---- config/services.config.ts | 2 +- config/site.config.ts | 2 +- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/app/api/pay/confirm/route.ts b/app/api/pay/confirm/route.ts index a4d6df4..b383f52 100644 --- a/app/api/pay/confirm/route.ts +++ b/app/api/pay/confirm/route.ts @@ -97,7 +97,7 @@ export async function POST(request: NextRequest) { const pb = getPocketBaseConfig(); const joinConfig = getJoinPaymentConfig(); - const totalFee = Number(joinConfig?.amount ?? 100); + const totalFee = Number(joinConfig?.amount ?? 8800); const checkPayments = await fetch( `${pb.url}/api/collections/payments/records?filter=${encodeURIComponent(`order_id="${orderId}"`)}&perPage=1`, diff --git a/app/components/PayStatusPollProvider.tsx b/app/components/PayStatusPollProvider.tsx index 94d95c8..ab3de9f 100644 --- a/app/components/PayStatusPollProvider.tsx +++ b/app/components/PayStatusPollProvider.tsx @@ -6,7 +6,7 @@ import { usePayStatusPoll } from "@/app/lib/payment/usePayStatusPoll"; * 全局支付轮询:支付返回任意页面时检测 paid,调用 confirm 后跳转首页 */ export function PayStatusPollProvider() { - usePayStatusPoll(() => { + usePayStatusPoll((_orderId) => { window.location.href = "/"; }); return null; diff --git a/app/lib/payment/usePayStatusPoll.ts b/app/lib/payment/usePayStatusPoll.ts index 79d429d..2a887cb 100644 --- a/app/lib/payment/usePayStatusPoll.ts +++ b/app/lib/payment/usePayStatusPoll.ts @@ -54,18 +54,27 @@ function parsePendingOrder(raw: string | null): [string | null, boolean] { return [orderId, true]; } -export function usePayStatusPoll(onPaid: () => void): boolean { +export function usePayStatusPoll(onPaid: (orderId: string) => void): boolean { const [polling, setPolling] = useState(false); const onPaidRef = useRef(onPaid); onPaidRef.current = onPaid; useEffect(() => { + const urlOrderId = + typeof window !== "undefined" + ? new URLSearchParams(window.location.search).get("order_id") || "" + : ""; const cookieRaw = getCookie(COOKIE_NAME); const [cookieOrderId, cookieValid] = parsePendingOrder(cookieRaw); const storageRaw = getStorage(STORAGE_NAME); const [storageOrderId, storageValid] = parsePendingOrder(storageRaw); - const orderId = cookieValid ? cookieOrderId : storageValid ? storageOrderId : null; - const activeRaw = cookieValid ? cookieRaw : storageValid ? storageRaw : null; + let orderId = cookieValid ? cookieOrderId : storageValid ? storageOrderId : null; + let activeRaw = cookieValid ? cookieRaw : storageValid ? storageRaw : null; + if (!orderId && urlOrderId.trim()) { + orderId = urlOrderId.trim(); + activeRaw = `${orderId}|${Date.now()}`; + persistPendingOrder(activeRaw); + } if (!orderId) { if (cookieRaw || storageRaw) { @@ -134,7 +143,7 @@ export function usePayStatusPoll(onPaid: () => void): boolean { } catch { /* 忽略,不影响跳转 */ } - onPaidRef.current(); + onPaidRef.current(orderId); return; } } catch { diff --git a/config/services.config.ts b/config/services.config.ts index 43b4278..d92696b 100644 --- a/config/services.config.ts +++ b/config/services.config.ts @@ -99,7 +99,7 @@ export function getPaymentConfig(themeOverride?: { amount?: number; type?: strin enabled: true, apiUrl: process.env.PAYMENT_API_URL || DEFAULT_PAYMENT_API_URL, provider: (process.env.PAYMENT_PROVIDER as "zpay" | "xorpay") || "zpay", - defaultAmount: Number(process.env.PAYMENT_DEFAULT_AMOUNT) || 100, + defaultAmount: Number(process.env.PAYMENT_DEFAULT_AMOUNT) || 8800, defaultType: process.env.PAYMENT_DEFAULT_TYPE || "meetup", zpaySubmitUrl: process.env.ZPAY_SUBMIT_URL || "https://zpayz.cn/submit.php", }; diff --git a/config/site.config.ts b/config/site.config.ts index f9d087f..2d4b335 100644 --- a/config/site.config.ts +++ b/config/site.config.ts @@ -95,7 +95,7 @@ export const THEME_CONFIGS: Record = { accent: "amber", }, services: { - join: { amount: 100, type: "meetup" }, + join: { amount: 8800, type: "meetup" }, pocketbaseJoinCollection: "solan", shopUrl: process.env.NEXT_PUBLIC_SHOP_URL || "https://store.hackrobot.cn/", // 独立站域名 },