Stripe Checkout成功时运行函数



在我的Nodejs/Express API中,我想在客户端成功检出Stripe后运行一组构造代码。

这是我的checkout函数,它基本上处理checkout阶段:

// Checkout
const checkoutCart = async (req, res, next) => {
const cart_id = req.params.cart_id;
const user_id = req.user.user_id;
try {
// Check if cart isn't empty
const cart = await db.query(selectCartProducts, [user_id]);
if (!cart.rows.length) {
res.status(200).json({ message: "Cart Is Empty" });
} else {
// Calculate the total price of the products based on their quantity
const total_price = cart.rows
.reduce((acc, item) => {
return acc + parseFloat(item.price) * item.quantity;
}, 0)
.toFixed(2);
// Check if shipping address has been provided in the user info
const address = await db.query(checkAddress, [user_id]);
if (!address.rows.length) {
missingAddressError(next);
} else {
///////////////////////////////////////////////////////////////
// Stripe
const session = await stripe.checkout.sessions.create({
line_items: cart.rows.map((product) => {
return {
price_data: {
currency: "usd",
product_data: {
name: product.name,
images: product.img_urls,
},
unit_amount: product.price * 100,
},
quantity: product.quantity,
};
}),
mode: "payment",
success_url: process.env.ADDRESS1,
cancel_url: process.env.ADDRESS2,
});
////////////////////////////////////////////////////////////
// I want the below code to run if the checkout is a success
////////////////////////////////////////////////////////////
// Create new order
const order = await db.query(insertOrder, [
user_id,
total_price,
"Complete",
]);
const order_id = order.rows[0].order_id;
// Move products from cart to order history
await Promise.all(
cart.rows.map(async (product) => {
await db.query(insertProductIntoOrder, [
order_id,
product.product_id,
product.quantity,
product.color,
]);
// Delete products from cart after adding them to order history (empty cart)
await db.query(deleteProductFromCart, [
cart_id,
product.product_id,
]);
})
);
res.status(201).json({
message: "Order Submitted Successfully",
order: {
order_number: order.rows[0].order_number,
total_price: order.rows[0].total_price,
status: order.rows[0].status,
},
});
}
}
} catch (err) {
next(err);
}
}; 

是否有任何方法可以检查条纹Checkout的状态并根据结果做其他事情?

你应该使用Stripe webhook事件。更具体地说,监听checkout.session.completed事件来运行代码。

Stripe有一个关于这个的文档页面。

最新更新