'use client'; import React, { useEffect, useState, Suspense } from 'react'; import { Elements } from '@stripe/react-stripe-js'; import { getStripe } from '@/lib/stripe-client'; import { useSearchParams } from 'next/navigation'; import CheckoutForm from '@/components/checkout/CheckoutForm'; import MockCheckoutForm from '@/components/checkout/MockCheckoutForm'; import CryptoCheckout from '@/components/checkout/CryptoCheckout'; import { Loader2, AlertCircle, ArrowLeft, UserCircle, CreditCard, Coins } from 'lucide-react'; import Link from 'next/link'; function CheckoutContent() { const searchParams = useSearchParams(); const sessionId = searchParams.get('session_id'); const amountParam = parseFloat(searchParams.get('amount') || '0'); const currencyParam = searchParams.get('currency') || 'TL'; const refIdParam = searchParams.get('ref_id') || 'TX-DEFAULT'; const callbackUrlParam = searchParams.get('callback_url') || '/'; const merchantIdParam = searchParams.get('merchant_id') || null; const [clientSecret, setClientSecret] = useState(null); const [paymentData, setPaymentData] = useState(null); const [error, setError] = useState(null); const [paymentMethod, setPaymentMethod] = useState<'card' | 'crypto'>('crypto'); const [merchantName, setMerchantName] = useState('Yükleniyor...'); const [displayAmount, setDisplayAmount] = useState(0); const [displayCurrency, setDisplayCurrency] = useState('TRY'); const isMock = process.env.NEXT_PUBLIC_USE_MOCK_PAYMENTS === 'true'; useEffect(() => { async function initializeCheckout() { try { if (sessionId) { // Fetch data from existing transaction session const res = await fetch(`/api/transactions/${sessionId}/details`); const data = await res.json(); if (data.error) { setError(data.error); return; } setPaymentData(data); setClientSecret(data.clientSecret); setMerchantName(data.merchant_name); setDisplayAmount(data.amount); setDisplayCurrency(data.currency); if (data.nextAction === 'redirect' && data.redirectUrl) { setTimeout(() => { window.location.href = data.redirectUrl; }, 2000); } } else if (amountParam > 0) { // Legacy flow: create on the fly const res = await fetch('/api/create-payment-intent', { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ amount: amountParam, currency: currencyParam, ref_id: refIdParam, callback_url: callbackUrlParam, merchant_id: merchantIdParam }), }); const data = await res.json(); if (data.error) { setError(data.error); } else { setClientSecret(data.clientSecret); setPaymentData(data); setDisplayAmount(amountParam); setDisplayCurrency(currencyParam); setMerchantName('Yetkili Satıcı'); } } else { setError('Geçersiz işlem parametreleri.'); } } catch (err) { setError('Ödeme başlatılamadı. Lütfen tekrar deneyin.'); } } initializeCheckout(); }, [sessionId, amountParam, currencyParam, refIdParam, callbackUrlParam, merchantIdParam]); if (error) { return (

Hata Oluştu

{error}

); } return (
{/* Header */} {/* Main Content */}
{/* Left Column: Product Info (Cover Image) */}
Digital NFT Product {/* Overlay Gradient */}
{/* Content on Image */}
Premium Dijital Varlık

CyberCube #082

P2C ağına ömür boyu erişim sağlayan özel, yüksek sadakatli 3D üretken dijital koleksiyon parçası.

Satıcı

{merchantName}

Destek

help@ayris.dev

{/* Right Column: Payment Form */}
{!clientSecret ? (

Ödeme ekranı hazırlanıyor...

) : (
{/* Payment Method Selector (Hidden for now, only Crypto active) */}
{paymentMethod === 'crypto' ? ( { setTimeout(() => { const url = paymentData?.callback_url || '/'; window.location.href = `${url}${url.includes('?') ? '&' : '?'}status=success&tx_hash=${hash}`; }, 2000); }} /> ) : (
{paymentData?.nextAction === 'redirect' ? (

Ödeme Sayfasına Yönlendiriliyorsunuz

Lütfen tarayıcınızı kapatmayın

Sizi güvenli ödeme adımına aktarıyoruz. Bu işlem birkaç saniye sürebilir.

) : isMock ? ( ) : paymentData?.provider === 'stripe' ? ( ) : (

{paymentData?.provider.toUpperCase()} Entegrasyonu

Bu ödeme yöntemi geliştirme aşamasındadır.

)}
)}
Mağazaya Dön
)}
{/* Footer */}

© 2026 P2CGateway Inc. Tüm hakları saklıdır.

); } export default function CheckoutPage() { return (
}>
); }