68 lines
2.1 KiB
JavaScript
68 lines
2.1 KiB
JavaScript
import Stripe from 'stripe';
|
|
import dotenv from 'dotenv';
|
|
dotenv.config();
|
|
|
|
const stripe = new Stripe(process.env.STRIPE_SECRET);
|
|
|
|
export default class PaymentsHandler {
|
|
|
|
static async danceTicket(req, res) {
|
|
try {
|
|
const session = await stripe.checkout.sessions.create({
|
|
mode: "payment",
|
|
payment_method_types: ["card"],
|
|
metadata: {
|
|
productId: "austin_winter_ball_2025_ticket"
|
|
},
|
|
line_items: [
|
|
{
|
|
price_data: {
|
|
currency: "usd",
|
|
product_data: {
|
|
name: "Hyperia Winter Ball"
|
|
},
|
|
unit_amount: 3500
|
|
},
|
|
quantity: 1
|
|
}
|
|
],
|
|
success_url: `${process.env.PROTOCOL + process.env.BASE_URL}/success`,
|
|
cancel_url: `${process.env.PROTOCOL + process.env.BASE_URL}/events`
|
|
});
|
|
|
|
res.json({ url: session.url });
|
|
} catch (err) {
|
|
console.error(err);
|
|
res.status(500).json({ error: "Something went wrong." });
|
|
}
|
|
}
|
|
|
|
static webhook = (req, res) => {
|
|
const sig = req.headers["stripe-signature"];
|
|
|
|
try {
|
|
const event = stripe.webhooks.constructEvent(
|
|
req.body,
|
|
sig,
|
|
process.env.WEBHOOK_SECRET
|
|
);
|
|
|
|
if (event.type === "checkout.session.completed") {
|
|
const session = event.data.object;
|
|
let toStore = {
|
|
"product": session.metadata.productId,
|
|
"email": session.customer_details.email,
|
|
"name": session.customer_details.name,
|
|
"time": global.currentTime(),
|
|
"amount": session.amount_total,
|
|
}
|
|
global.db.payments.add(toStore)
|
|
}
|
|
|
|
res.sendStatus(200);
|
|
} catch (err) {
|
|
console.error(err);
|
|
res.sendStatus(400);
|
|
}
|
|
}
|
|
} |