43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
import {Stripe} from "stripe";
|
|
|
|
const stripe = new Stripe(process.env.STRIPE_SERCET_KEY!);
|
|
export async function POST(request:Request) {
|
|
const body = await request.json();
|
|
const { name, email, amount} = body;
|
|
if(!name || !email || !amount){
|
|
return new Response (JSON.stringify({error:"please enter a valid email Address",status:400}))
|
|
}
|
|
let customer;
|
|
const existingCustomer = await stripe.customers.list({email});
|
|
if(existingCustomer.data.length > 0){
|
|
customer = existingCustomer.data[0];
|
|
}else{
|
|
const newCustomer = await stripe.customers.create({
|
|
name,
|
|
email,
|
|
});
|
|
customer = newCustomer;
|
|
}
|
|
|
|
const ephemeralKey = await stripe.ephemeralKeys.create(
|
|
{customer: customer.id},
|
|
{apiVersion: '2025-03-31.basil'}
|
|
);
|
|
const paymentIntent = await stripe.paymentIntents.create({
|
|
amount: parseInt(amount) * 100,
|
|
currency: 'usd',
|
|
customer: customer.id,
|
|
automatic_payment_methods: {
|
|
enabled: true,
|
|
allow_redirects:"never",
|
|
},
|
|
});
|
|
|
|
return new Response(JSON.stringify({
|
|
paymentIntent: paymentIntent.client_secret,
|
|
ephemeralKey: ephemeralKey.secret,
|
|
customer: customer.id,
|
|
}),
|
|
);
|
|
}
|