import { getTranslations, setRequestLocale } from 'next-intl/server' import { fulfillCheckoutSession } from '@/lib/fulfill' import { isSessionPaid } from '@/lib/stripe' import { PageShell } from '@/components/PageShell' export const dynamic = 'force-dynamic' export default async function ServiceSuccessPage({ params, searchParams, }: { params: Promise<{ locale: string }> searchParams: Promise<{ service?: string; session_id?: string }> }) { const { locale } = await params setRequestLocale(locale) const { service: urlService, session_id } = await searchParams const t = await getTranslations('Paid') // Entrega compartida con el webhook (idempotente). Si el webhook ya entregó, // el reclamo atómico devuelve ok=false pero el pago sigue confirmado. let status: 'delivered' | 'already' | 'error' = 'error' let okName: string | null = null let service = urlService ?? null if (session_id) { const r = await fulfillCheckoutSession(session_id, urlService) service = r.service ?? urlService ?? null if (r.ok) { status = 'delivered' okName = r.character } else if (await isSessionPaid(session_id)) { // Pago confirmado pero ya reclamado antes (webhook o recarga de la página). status = 'already' } } return (
{status === 'delivered' ? ( {t(`${service}.success`, { name: okName ?? '' })} ) : status === 'already' ? ( {t('alreadyProcessed')} ) : ( {t('error')} )}
) }