"use client"; import { useEffect, useState } from "react"; import { useSearchParams } from "next/navigation"; import Link from "next/link"; export default function RegistrationSuccessPage() { const searchParams = useSearchParams(); const token = searchParams.get("token"); const payerId = searchParams.get("PayerID"); const [state, setState] = useState<"loading" | "success" | "error">("loading"); const [registrationId, setRegistrationId] = useState(null); const [errorMessage, setErrorMessage] = useState(null); useEffect(() => { if (!token || !payerId) { setState("error"); setErrorMessage("Thiếu thông tin thanh toán."); return; } fetch("/ipv6/api/payments/capture", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ token, PayerID: payerId }), }) .then(async (res) => { if (!res.ok) { const err = await res.json().catch(() => ({})); throw new Error(err?.error ?? "Capture thất bại."); } return res.json(); }) .then((data) => { setRegistrationId(data.registrationId); setState("success"); }) .catch((err) => { setErrorMessage(err.message); setState("error"); }); }, [token, payerId]); return (
{state === "loading" && (
progress_activity

Đang xử lý thanh toán của bạn...

)} {state === "success" && (
check_circle

Thanh toán thành công!

Cảm ơn bạn đã đăng ký tham dự IPv6 Summit.

{registrationId && (
Mã đăng ký #{registrationId}
)}
Số tiền đã thanh toán $120 USD

Chúng tôi sẽ liên hệ với bạn qua email để xác nhận.

home Về trang chủ
)} {state === "error" && (
error

Có lỗi xảy ra

{errorMessage && (

{errorMessage}

)} refresh Thử lại đăng ký
)}
); }