first commit
Some checks failed
Deploy Production / deploy (push) Has been cancelled

This commit is contained in:
Frank John Begornia
2026-01-12 22:16:36 +08:00
commit 3ba0b250ed
44 changed files with 18635 additions and 0 deletions

View File

@@ -0,0 +1,74 @@
import Stripe from "stripe";
export default defineEventHandler(async (event) => {
const config = useRuntimeConfig();
const stripeSecretKey = config.stripeSecretKey;
if (!stripeSecretKey) {
throw createError({
statusCode: 500,
statusMessage: "Stripe secret key not configured",
});
}
const stripe = new Stripe(stripeSecretKey, {
apiVersion: "2025-10-29.clover",
});
const body = await readBody<{
designId: string;
templateId?: string;
designName?: string;
amount: number;
currency?: string;
successUrl: string;
cancelUrl: string;
customerEmail?: string;
}>(event);
if (
!body?.designId ||
!body?.amount ||
!body?.successUrl ||
!body?.cancelUrl
) {
throw createError({
statusCode: 400,
statusMessage: "Missing required fields",
});
}
const { currency = "usd" } = body;
const session = await stripe.checkout.sessions.create({
mode: "payment",
payment_method_types: ["card"],
billing_address_collection: "auto",
customer_email: body.customerEmail,
shipping_address_collection: { allowed_countries: ["US", "CA"] },
line_items: [
{
quantity: 1,
price_data: {
currency,
unit_amount: Math.round(body.amount * 100),
product_data: {
name: body.designName ?? `Slipmat design ${body.designId}`,
metadata: {
designId: body.designId,
...(body.templateId ? { templateId: body.templateId } : {}),
},
},
},
},
],
metadata: {
designId: body.designId,
...(body.templateId ? { templateId: body.templateId } : {}),
},
success_url: body.successUrl,
cancel_url: body.cancelUrl,
});
return { id: session.id, url: session.url };
});