import { NextRequest, NextResponse } from "next/server" import { getStripeClient } from "@/lib/stripe/client" import Stripe from "stripe" // This is your Stripe CLI webhook secret const webhookSecret = process.env.STRIPE_WEBHOOK_SECRET async function handler(req: NextRequest) { const body = await req.text() const signature = req.headers.get("stripe-signature") || "" const stripe = getStripeClient() let event: Stripe.Event try { event = stripe.webhooks.constructEvent(body, signature, webhookSecret!) } catch (err) { console.error("Webhook signature verification failed:", err) return NextResponse.json({ error: "Invalid signature" }, { status: 400 }) } // Handle the event switch (event.type) { case "checkout.session.completed": const checkoutSession = event.data.object as Stripe.Checkout.Session console.log("Payment received for session:", checkoutSession.id) console.log("Customer email:", checkoutSession.customer_email) console.log("Amount:", checkoutSession.amount_total) // TODO: Create order record in database // TODO: Send confirmation email to customer // TODO: Update inventory for physical products break case "payment_intent.succeeded": const paymentIntent = event.data.object as Stripe.PaymentIntent console.log("Payment succeeded for intent:", paymentIntent.id) // TODO: Handle any post-payment logic break case "payment_intent.payment_failed": const failedPayment = event.data.object as Stripe.PaymentIntent console.log("Payment failed for intent:", failedPayment.id) console.log("Failure reason:", failedPayment.last_payment_error?.message) // TODO: Handle failed payment (notify customer, etc.) break case "invoice.payment_succeeded": const invoice = event.data.object as Stripe.Invoice console.log("Invoice payment succeeded for invoice:", invoice.id) // TODO: Handle recurring payment success break case "invoice.payment_failed": const failedInvoice = event.data.object as Stripe.Invoice console.log("Invoice payment failed for invoice:", failedInvoice.id) // TODO: Handle recurring payment failure break default: console.log(`Unhandled event type: ${event.type}`) } return NextResponse.json({ received: true }) } export { handler as POST }