Skip to content

Instantly share code, notes, and snippets.

@memdufaizan
Forked from ShariqAnsari88/order.js
Created March 10, 2023 19:04
Show Gist options
  • Select an option

  • Save memdufaizan/627b18e8b1cf7e846bbd9f13ab8a233c to your computer and use it in GitHub Desktop.

Select an option

Save memdufaizan/627b18e8b1cf7e846bbd9f13ab8a233c to your computer and use it in GitHub Desktop.
E-Commerce by JS Dev
("use strict");
const stripe = require("stripe")(process.env.STRIPE_KEY);
/**
* order controller
*/
const { createCoreController } = require("@strapi/strapi").factories;
module.exports = createCoreController("api::order.order", ({ strapi }) => ({
async create(ctx) {
const { products } = ctx.request.body;
try {
const lineItems = await Promise.all(
products.map(async (product) => {
const item = await strapi
.service("api::product.product")
.findOne(product.id);
return {
price_data: {
currency: "inr",
product_data: {
name: item.title,
},
unit_amount: Math.round(item.price * 100),
},
quantity: product.attributes.quantity,
};
})
);
const session = await stripe.checkout.sessions.create({
shipping_address_collection: { allowed_countries: ["IN"] },
payment_method_types: ["card"],
mode: "payment",
success_url: process.env.CLIENT_URL + "/success",
cancel_url: process.env.CLIENT_URL + "?success=false",
line_items: lineItems,
});
await strapi
.service("api::order.order")
.create({ data: { products, stripeId: session.id } });
return { stripeSession: session };
} catch (error) {
ctx.response.status = 500;
return { error };
}
},
}));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment