diff --git a/app/api/create-checkout-session/route.ts b/app/api/create-checkout-session/route.ts index a4acff7..a750cef 100644 --- a/app/api/create-checkout-session/route.ts +++ b/app/api/create-checkout-session/route.ts @@ -33,7 +33,8 @@ export async function POST(req: Request) { boxId, boxName, amount, - currency + currency, + req ); console.log('Checkout session created successfully:', { sessionId: session.id }); diff --git a/app/lib/stripe.ts b/app/lib/stripe.ts index e9745b6..8d4e585 100644 --- a/app/lib/stripe.ts +++ b/app/lib/stripe.ts @@ -1,4 +1,5 @@ import { loadStripe } from '@stripe/stripe-js'; +import { headers } from 'next/headers'; // Initialize Stripe on the client export const getStripe = () => { @@ -56,7 +57,8 @@ export async function createCheckoutSession( boxId: string, boxName: string, amount: number, - currency: string = 'usd' + currency: string = 'usd', + request?: Request ) { try { // This function should only be called from server-side code @@ -67,6 +69,27 @@ export async function createCheckoutSession( typescript: true, }); + // Determine the base URL dynamically + let baseUrl = process.env.NEXT_PUBLIC_BASE_URL; + + if (!baseUrl && request) { + // Fallback: extract from request headers + const headersList = await headers(); + const host = headersList.get('host'); + const protocol = headersList.get('x-forwarded-proto') || 'http'; + + if (host) { + baseUrl = `${protocol}://${host}`; + } + } + + // Final fallback for development + if (!baseUrl) { + baseUrl = 'http://localhost:3000'; + } + + console.log('Using base URL for Stripe checkout:', baseUrl); + const session = await stripe.checkout.sessions.create({ payment_method_types: ['card'], line_items: [ @@ -83,8 +106,8 @@ export async function createCheckoutSession( }, ], mode: 'payment', - success_url: `${process.env.NEXT_PUBLIC_BASE_URL}/boxes/success?box_id=${boxId}&session_id={CHECKOUT_SESSION_ID}`, - cancel_url: `${process.env.NEXT_PUBLIC_BASE_URL}/boxes?canceled=true`, + success_url: `${baseUrl}/boxes/success?box_id=${boxId}&session_id={CHECKOUT_SESSION_ID}`, + cancel_url: `${baseUrl}/boxes?canceled=true`, metadata: { boxId, },