'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 [status, setStatus] = useState(null); const [loading, setLoading] = useState(true); 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]); if (loading) { return (
查询支付结果中...
); } const isSuccess = status === 'COMPLETED' || status === 'PAID' || status === 'RECHARGING'; const isPending = status === 'PENDING'; return (
{isSuccess ? ( <>

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

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

) : isPending ? ( <>

等待支付

订单尚未完成支付

) : ( <>

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

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

)}

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

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