Rocky_Mountain_Vending/app/api/stripe/checkout/route.ts
DMleadgen 46d973904b
Initial commit: Rocky Mountain Vending website
Next.js website for Rocky Mountain Vending company featuring:
- Product catalog with Stripe integration
- Service areas and parts pages
- Admin dashboard with Clerk authentication
- SEO optimized pages with JSON-LD structured data

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 16:22:15 -07:00

50 lines
1.4 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server'
import { getStripeClient } from '@/lib/stripe/client'
/**
* POST /api/stripe/checkout
* Create a Stripe Checkout session
*/
export async function POST(request: NextRequest) {
try {
const stripe = getStripeClient()
const body = await request.json()
const { items, successUrl, cancelUrl } = body
if (!items || !Array.isArray(items) || items.length === 0) {
return NextResponse.json(
{ error: 'Items are required' },
{ status: 400 }
)
}
// Build line items for Stripe Checkout
const lineItems = items.map((item: { priceId: string; quantity: number }) => ({
price: item.priceId,
quantity: item.quantity,
}))
// Create Stripe Checkout session
const session = await stripe.checkout.sessions.create({
payment_method_types: ['card'],
line_items: lineItems,
mode: 'payment',
success_url: successUrl || `${request.nextUrl.origin}/checkout/success?session_id={CHECKOUT_SESSION_ID}`,
cancel_url: cancelUrl || `${request.nextUrl.origin}/checkout/cancel`,
metadata: {
// Add any additional metadata here
},
})
return NextResponse.json({ sessionId: session.id, url: session.url })
} catch (error) {
console.error('Error creating checkout session:', error)
return NextResponse.json(
{ error: 'Failed to create checkout session' },
{ status: 500 }
)
}
}