"use client";
import { useEffect, useState } from "react";
import { usePayStatusPoll } from "@/app/lib/usePayStatusPoll";
const COOKIE_NAME = "nomadvip_pay_order";
function getCookie(name: string): string | null {
if (typeof document === "undefined") return null;
const match = document.cookie.match(new RegExp(`(?:^|; )${name}=([^;]*)`));
return match ? decodeURIComponent(match[1]) : null;
}
function parseUserIdFromOrderId(orderId: string): string {
if (!orderId?.includes("_order_")) return "";
const prefix = orderId.split("_order_")[0];
const parts = prefix.split("_");
return parts.length >= 2 ? parts.slice(0, -1).join("_") : "";
}
function SuccessWithRedirect() {
useEffect(() => {
const t = setTimeout(() => {
window.location.href = "/";
}, 2000);
return () => clearTimeout(t);
}, []);
return (
);
}
export default function PaidPage() {
const [status, setStatus] = useState<"pending" | "success" | "fail">("pending");
const [fromUrl, setFromUrl] = useState(null);
usePayStatusPoll((orderId) => {
const uid = parseUserIdFromOrderId(orderId || "");
const raw = getCookie(COOKIE_NAME);
const oid = raw?.split("|")[0]?.trim() || orderId || "";
const userId = uid || parseUserIdFromOrderId(oid);
if (userId) {
try {
localStorage.setItem("paidType", "vip");
localStorage.setItem("userName", userId);
} catch {}
}
setStatus("success");
}, () => { window.location.href = "/"; });
useEffect(() => {
const params = new URLSearchParams(window.location.search);
const paid = params.get("paid");
const fail = params.get("fail");
const from = params.get("from");
if (paid === "1") setStatus("success");
else if (fail === "1") setStatus("fail");
if (from) setFromUrl(decodeURIComponent(from));
}, []);
if (status === "pending") {
return (
支付结果确认中
正在查询支付状态,请稍候…
(支付完成后将自动跳转,1 分钟内未支付将返回首页)
);
}
if (status === "success") {
return (
);
}
return (
);
}