el.xwx.moe/lib/api/paymentCheckout.ts

51 lines
1.3 KiB
TypeScript
Raw Normal View History

import Stripe from "stripe";
export default async function paymentCheckout(
stripeSecretKey: string,
email: string,
priceId: string
) {
const stripe = new Stripe(stripeSecretKey, {
apiVersion: "2022-11-15",
});
const listByEmail = await stripe.customers.list({
email: email.toLowerCase(),
expand: ["data.subscriptions"],
});
const isExistingCustomer = listByEmail?.data[0]?.id || undefined;
2023-07-19 23:46:16 -05:00
const NEXT_PUBLIC_TRIAL_PERIOD_DAYS =
process.env.NEXT_PUBLIC_TRIAL_PERIOD_DAYS;
2024-10-06 00:59:31 -05:00
const session = await stripe.checkout.sessions.create({
customer: isExistingCustomer ? isExistingCustomer : undefined,
line_items: [
{
price: priceId,
quantity: 1,
2024-10-06 00:59:31 -05:00
adjustable_quantity: {
enabled: true,
minimum: 1,
maximum: Number(process.env.STRIPE_MAX_QUANTITY || 100),
},
},
],
mode: "subscription",
customer_email: isExistingCustomer ? undefined : email.toLowerCase(),
2023-07-19 17:30:22 -05:00
success_url: `${process.env.BASE_URL}?session_id={CHECKOUT_SESSION_ID}`,
cancel_url: `${process.env.BASE_URL}/login`,
automatic_tax: {
enabled: true,
},
subscription_data: {
2023-07-19 23:46:16 -05:00
trial_period_days: NEXT_PUBLIC_TRIAL_PERIOD_DAYS
? Number(NEXT_PUBLIC_TRIAL_PERIOD_DAYS)
: 14,
},
});
return { response: session.url, status: 200 };
}