Loading...
Loading...
Stripe payment integration for SaaS. Use when implementing Stripe checkout, webhooks, subscriptions, or payment flows. Includes secure patterns for Next.js.
npx skill4agent add dvorkinguy/claude-skills-agents stripe-integrationSTRIPE_SECRET_KEY=sk_...
STRIPE_PUBLISHABLE_KEY=pk_...
STRIPE_WEBHOOK_SECRET=whsec_...pnpm add stripe @stripe/stripe-js// lib/stripe.ts
import Stripe from 'stripe';
export const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, {
apiVersion: '2024-11-20.acacia',
typescript: true,
});// app/api/checkout/route.ts
import { stripe } from '@/lib/stripe';
import { auth } from '@/lib/auth';
export async function POST(request: Request) {
const user = await auth();
if (!user) return new Response('Unauthorized', { status: 401 });
const { priceId } = await request.json();
// Validate price ID against allowed list
const allowedPrices = ['price_xxx', 'price_yyy'];
if (!allowedPrices.includes(priceId)) {
return new Response('Invalid price', { status: 400 });
}
const session = await stripe.checkout.sessions.create({
customer: user.stripeCustomerId,
mode: 'subscription',
line_items: [{ price: priceId, quantity: 1 }],
success_url: `${process.env.NEXT_PUBLIC_URL}/dashboard?success=true`,
cancel_url: `${process.env.NEXT_PUBLIC_URL}/pricing`,
subscription_data: {
metadata: { userId: user.id },
},
});
return Response.json({ url: session.url });
}stripe.webhooks.constructEvent()checkout.session.completedcustomer.subscription.createdcustomer.subscription.updatedcustomer.subscription.deletedinvoice.payment_failedinvoice.paid# Forward webhooks to local
stripe listen --forward-to localhost:3000/api/webhooks/stripe
# Trigger test events
stripe trigger checkout.session.completed
stripe trigger customer.subscription.updated
stripe trigger invoice.payment_failedawait request.text()