instead of rental data in local storage, using stripe metadata
This commit is contained in:
@@ -8,7 +8,7 @@ const platformFee = 0.1;
|
||||
|
||||
router.post("/create-checkout-session", async (req, res) => {
|
||||
try {
|
||||
const { itemName, total, return_url } = req.body;
|
||||
const { itemName, total, return_url, rentalData } = req.body;
|
||||
|
||||
if (!itemName) {
|
||||
return res.status(400).json({ error: "No item name found" });
|
||||
@@ -20,10 +20,24 @@ router.post("/create-checkout-session", async (req, res) => {
|
||||
return res.status(400).json({ error: "No return_url found" });
|
||||
}
|
||||
|
||||
// Prepare metadata - Stripe metadata keys must be strings
|
||||
const metadata = rentalData
|
||||
? {
|
||||
itemId: rentalData.itemId,
|
||||
startDate: rentalData.startDate,
|
||||
endDate: rentalData.endDate,
|
||||
startTime: rentalData.startTime,
|
||||
endTime: rentalData.endTime,
|
||||
totalAmount: rentalData.totalAmount.toString(),
|
||||
deliveryMethod: rentalData.deliveryMethod,
|
||||
}
|
||||
: {};
|
||||
|
||||
const session = await StripeService.createCheckoutSession({
|
||||
item_name: itemName,
|
||||
total: total,
|
||||
return_url: return_url,
|
||||
metadata: metadata,
|
||||
});
|
||||
|
||||
res.json({ clientSecret: session.client_secret });
|
||||
@@ -44,6 +58,7 @@ router.get("/checkout-session/:sessionId", async (req, res) => {
|
||||
status: session.status,
|
||||
payment_status: session.payment_status,
|
||||
customer_email: session.customer_details?.email,
|
||||
metadata: session.metadata,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("Error retrieving checkout session:", error);
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
const stripe = require("stripe")(process.env.STRIPE_SECRET_KEY);
|
||||
|
||||
class StripeService {
|
||||
static async createCheckoutSession({ item_name, total, return_url }) {
|
||||
static async createCheckoutSession({
|
||||
item_name,
|
||||
total,
|
||||
return_url,
|
||||
metadata = {},
|
||||
}) {
|
||||
try {
|
||||
const session = await stripe.checkout.sessions.create({
|
||||
const sessionConfig = {
|
||||
line_items: [
|
||||
{
|
||||
price_data: {
|
||||
@@ -18,12 +23,15 @@ class StripeService {
|
||||
],
|
||||
mode: "payment",
|
||||
ui_mode: "embedded",
|
||||
return_url: return_url, //"https://example.com/checkout/return?session_id={CHECKOUT_SESSION_ID}"
|
||||
});
|
||||
return_url: return_url,
|
||||
metadata: metadata,
|
||||
};
|
||||
|
||||
const session = await stripe.checkout.sessions.create(sessionConfig);
|
||||
|
||||
return session;
|
||||
} catch (error) {
|
||||
console.error("Error creating connected account:", error);
|
||||
console.error("Error creating checkout session:", error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user