65 lines
1.7 KiB
JavaScript
Executable file
65 lines
1.7 KiB
JavaScript
Executable file
import express from 'express';
|
|
import dotenv from 'dotenv'
|
|
import stripe from 'stripe';
|
|
|
|
//load variable
|
|
dotenv.config();
|
|
|
|
//start server
|
|
const app = express();
|
|
|
|
app.use(express.static('public'));
|
|
app.use(express.json());
|
|
|
|
|
|
//Home Route
|
|
app.get('/', (req, res) => {
|
|
res.sendFile('menu.html', {root: 'public'});
|
|
});
|
|
//success
|
|
app.get('/success', (req, res) => {
|
|
res.sendFile('success.html', {root: 'public'});
|
|
});
|
|
//unsuccess
|
|
app.get('/unsuccess', (req, res) => {
|
|
res.sendFile('unsuccess.html', {root: 'public'});
|
|
});
|
|
//stripe
|
|
let stripeGateway = stripe(process.env.stripe_api);
|
|
let DOMAIN = process.env.DOMAIN;
|
|
|
|
app.post('/stripe-checkout', async (req, res) => {
|
|
const lineItems = req.body.items.map((item) => {
|
|
const unitAmount = parseInt(item.price.replace(/[^0-9.-]+/g, '') * 100);
|
|
console.log('item-price:', item.price);
|
|
console.log('unitAmount:', unitAmount);
|
|
return {
|
|
price_data:{
|
|
currency: 'usd',
|
|
product_data: {
|
|
name: item.title,
|
|
images: [item.productImg]
|
|
},
|
|
unit_amount: unitAmount,
|
|
},
|
|
quantity: item.quantity,
|
|
};
|
|
});
|
|
console.log('lineItems:', lineItems);
|
|
|
|
//craete checkout
|
|
const session = await stripeGateway.checkout.sessions.create({
|
|
payment_method_types: ['card'],
|
|
mode: 'payment',
|
|
success_url: `${DOMAIN}/success`,
|
|
cancel_url: `${DOMAIN}/unsuccess`,
|
|
line_items: lineItems,
|
|
//asking address in stripe checkout
|
|
billing_address_collection: 'required'
|
|
});
|
|
res.json(session.url);
|
|
});
|
|
|
|
app.listen(3005, ()=>{
|
|
console.log('listening on port 3005;');
|
|
});
|