Getting this error in production but works fine in development - StripeInvalidRequestError: The `line_items` parameter is required in payment mode
Getting this error in production but works fine in development - StripeInvalidRequestError: The `line_items` parameter is required in payment mode
我有一个最近部署的节点应用程序,在生产中从 stripe/checkout/sessions api 收到错误,但从未在开发中出现。错误:“StripeInvalidRequestError: The line_items
parameter is required in payment mode” 非常简单所以我知道这是我的 line_items 对象是空的但我不知道为什么因为这只发生在生产中但是在开发中工作正常。
这是该路线的代码
router.get('/checkout', async (req, res) => {
if (!req.session.cart) {
return res.redirect('shop/shopping-cart');
}
try {
let cart = new Cart(req.session.cart);
const cartProducts = await cart.generateArray();
let lineItems = [];
cartProducts.forEach(async (cartProduct) => {
let productImages = new Array();
cartProduct.item.images.forEach((img) => {
productImages.push(img.url);
});
const product = await stripe.products.create({
name: cartProduct.item.name,
images: productImages
});
const price = await stripe.prices.create({
product: product.id,
unit_amount: cartProduct.price,
currency: 'usd'
});
lineItems.push({ price: price.id, quantity: cartProduct.qty });
});
let custObj = {};
if (process.env.NODE_ENV !== 'production') {
custObj = {
payment_method: 'pm_card_visa',
invoice_settings: {
default_payment_method: 'pm_card_visa',
}
}
}
const customer = await stripe.customers.create(custObj);
const success_url = process.env.NODE_ENV !== 'production' ?
'http://localhost:3000/shop/success?session_id={CHECKOUT_SESSION_ID}' :
'https://aboutthatwedding.com/shop/success?session_id={CHECKOUT_SESSION_ID}';
const cancel_url = process.env.NODE_ENV !== 'production' ?
'http://localhost:3000/shop/shopping-cart' :
'https://aboutthatwedding.com/shop/shopping-cart';
const session = await stripe.checkout.sessions.create({
customer: customer.id,
payment_method_types: ['card'],
line_items: lineItems,
success_url: success_url,
cancel_url: cancel_url,
mode: "payment",
billing_address_collection: 'required',
shipping_address_collection: {
allowed_countries: ['US', 'CA'],
}
});
res.render('shop/checkout', {
sessionId: session.id,
products: cartProducts,
totalPrice: cart.totalPrice,
stripePubKey: process.env.NODE_ENV !== 'production' ?
process.env.STRIPE_PUBLIC_KEY_TEST :
process.env.STRIPE_PUBLIC_KEY_LIVE
});
} catch (error) {
console.log(error);
}
});
看起来这是一个 foreach(async...) 问题。我将函数更改为迭代 cartProducts 和图像的 for 循环而不是 forEach 循环。
从
中获得该信息
我有一个最近部署的节点应用程序,在生产中从 stripe/checkout/sessions api 收到错误,但从未在开发中出现。错误:“StripeInvalidRequestError: The line_items
parameter is required in payment mode” 非常简单所以我知道这是我的 line_items 对象是空的但我不知道为什么因为这只发生在生产中但是在开发中工作正常。
这是该路线的代码
router.get('/checkout', async (req, res) => {
if (!req.session.cart) {
return res.redirect('shop/shopping-cart');
}
try {
let cart = new Cart(req.session.cart);
const cartProducts = await cart.generateArray();
let lineItems = [];
cartProducts.forEach(async (cartProduct) => {
let productImages = new Array();
cartProduct.item.images.forEach((img) => {
productImages.push(img.url);
});
const product = await stripe.products.create({
name: cartProduct.item.name,
images: productImages
});
const price = await stripe.prices.create({
product: product.id,
unit_amount: cartProduct.price,
currency: 'usd'
});
lineItems.push({ price: price.id, quantity: cartProduct.qty });
});
let custObj = {};
if (process.env.NODE_ENV !== 'production') {
custObj = {
payment_method: 'pm_card_visa',
invoice_settings: {
default_payment_method: 'pm_card_visa',
}
}
}
const customer = await stripe.customers.create(custObj);
const success_url = process.env.NODE_ENV !== 'production' ?
'http://localhost:3000/shop/success?session_id={CHECKOUT_SESSION_ID}' :
'https://aboutthatwedding.com/shop/success?session_id={CHECKOUT_SESSION_ID}';
const cancel_url = process.env.NODE_ENV !== 'production' ?
'http://localhost:3000/shop/shopping-cart' :
'https://aboutthatwedding.com/shop/shopping-cart';
const session = await stripe.checkout.sessions.create({
customer: customer.id,
payment_method_types: ['card'],
line_items: lineItems,
success_url: success_url,
cancel_url: cancel_url,
mode: "payment",
billing_address_collection: 'required',
shipping_address_collection: {
allowed_countries: ['US', 'CA'],
}
});
res.render('shop/checkout', {
sessionId: session.id,
products: cartProducts,
totalPrice: cart.totalPrice,
stripePubKey: process.env.NODE_ENV !== 'production' ?
process.env.STRIPE_PUBLIC_KEY_TEST :
process.env.STRIPE_PUBLIC_KEY_LIVE
});
} catch (error) {
console.log(error);
}
});
看起来这是一个 foreach(async...) 问题。我将函数更改为迭代 cartProducts 和图像的 for 循环而不是 forEach 循环。
从