@@ -14,6 +14,9 @@ function getStripe(): Stripe {
1414 return stripe ;
1515}
1616
17+ // Fallback site URL in case env var is not set
18+ const SITE_URL = process . env . NEXT_PUBLIC_SITE_URL || 'https://smartaimemory.com' ;
19+
1720export async function POST ( req : NextRequest ) {
1821 try {
1922 const { priceId, mode, customerEmail, successUrl, cancelUrl } = await req . json ( ) ;
@@ -22,6 +25,11 @@ export async function POST(req: NextRequest) {
2225 return NextResponse . json ( { error : 'Price ID is required' } , { status : 400 } ) ;
2326 }
2427
28+ // Validate priceId is not a placeholder
29+ if ( priceId . includes ( 'placeholder' ) ) {
30+ return NextResponse . json ( { error : 'Product not configured. Please contact support.' } , { status : 400 } ) ;
31+ }
32+
2533 const session = await getStripe ( ) . checkout . sessions . create ( {
2634 mode : mode || 'payment' , // 'payment' for one-time, 'subscription' for recurring
2735 payment_method_types : [ 'card' ] ,
@@ -31,8 +39,8 @@ export async function POST(req: NextRequest) {
3139 quantity : 1 ,
3240 } ,
3341 ] ,
34- success_url : successUrl || `${ process . env . NEXT_PUBLIC_SITE_URL } /success?session_id={CHECKOUT_SESSION_ID}` ,
35- cancel_url : cancelUrl || `${ process . env . NEXT_PUBLIC_SITE_URL } /pricing` ,
42+ success_url : successUrl || `${ SITE_URL } /success?session_id={CHECKOUT_SESSION_ID}` ,
43+ cancel_url : cancelUrl || `${ SITE_URL } /pricing` ,
3644 customer_email : customerEmail || undefined ,
3745 allow_promotion_codes : true ,
3846 billing_address_collection : 'required' ,
0 commit comments