'use client'; import { useSearchParams } from 'next/navigation'; import { useEffect, useState, Suspense } from 'react'; function ResultContent() { const searchParams = useSearchParams(); // Support both ZPAY (out_trade_no) and Stripe (order_id) callback params const outTradeNo = searchParams.get('out_trade_no') || searchParams.get('order_id'); const tradeStatus = searchParams.get('trade_status') || searchParams.get('status'); const isPopup = searchParams.get('popup') === '1'; const [status, setStatus] = useState(null); const [loading, setLoading] = useState(true); const [isInPopup, setIsInPopup] = useState(false); // Detect if opened as a popup window (from stripe-popup or via popup=1 param) useEffect(() => { if (isPopup || window.opener) { setIsInPopup(true); } }, [isPopup]); useEffect(() => { if (!outTradeNo) { setLoading(false); return; } const checkOrder = async () => { try { const res = await fetch(`/api/orders/${outTradeNo}`); if (res.ok) { const data = await res.json(); setStatus(data.status); } } catch { // ignore } finally { setLoading(false); } }; checkOrder(); // Poll a few times in case status hasn't updated yet const timer = setInterval(checkOrder, 3000); const timeout = setTimeout(() => clearInterval(timer), 30000); return () => { clearInterval(timer); clearTimeout(timeout); }; }, [outTradeNo]); // Auto-close popup window on success const isSuccess = status === 'COMPLETED' || status === 'PAID' || status === 'RECHARGING'; useEffect(() => { if (!isInPopup || !isSuccess) return; const timer = setTimeout(() => { window.close(); }, 3000); return () => clearTimeout(timer); }, [isInPopup, isSuccess]); if (loading) { return (
查询支付结果中...
); } const isPending = status === 'PENDING'; return (
{isSuccess ? ( <>

{status === 'COMPLETED' ? '充值成功' : '充值处理中'}

{status === 'COMPLETED' ? '余额已成功到账!' : '支付成功,余额正在充值中...'}

{isInPopup && (

此窗口将在 3 秒后自动关闭

)} ) : isPending ? ( <>

等待支付

订单尚未完成支付

{isInPopup && ( )} ) : ( <>

{status === 'EXPIRED' ? '订单已超时' : status === 'CANCELLED' ? '订单已取消' : '支付异常'}

{status === 'EXPIRED' ? '订单已超时,请重新充值' : status === 'CANCELLED' ? '订单已被取消' : '请联系管理员处理'}

{isInPopup && ( )} )}

订单号: {outTradeNo || '未知'}

); } export default function PayResultPage() { return (
加载中...
} >
); }