【发布时间】:2021-10-12 03:49:20
【问题描述】:
我可以使用以下方法成功处理 Stripe 付款:
const processPayment = async () => {
const url = '/.netlify/functions/charge-card';
const newItems = items.map(({ id, quantity }) => ({
id,
quantity,
}));
const stripe = await loadStripe(publishableKey);
const { data } = await axios.post(url, { items: newItems });
await stripe.redirectToCheckout({ sessionId: data.id });
};
这是唯一适合我的方法
exports.handler = async (event, context) => {
const { items } = JSON.parse(event.body);
const allItems = await getProducts();
const cartWithProducts = items.map(({ id, quantity }) => {
const item = allItems.find(p => p.id === id);
return {
...item,
quantity,
};
});
const lineItems = cartWithProducts.map(product => ({
price_data: {
currency: 'usd',
product_data: {
name: product.name,
},
unit_amount: product.price,
},
quantity: product.quantity,
}));
const session = await stripe.checkout.sessions.create({
payment_method_types: ['card'],
line_items: lineItems,
mode: 'payment',
success_url: `${process.env.URL}/success`,
cancel_url: `${process.env.URL}/cancelled`,
});
console.log(lineItems);
return {
statusCode: 200,
body: JSON.stringify({
id: session.id,
}),
};
但是,我不想使用await stripe.redirectToCheckout({ sessionId: data.id });,因为我不想被重定向到 Stripe 的网站。我想做这样的事情:
return (
<StripeCheckout
label={'Pay Now'}
name={'CRWN Clothing Ltd.'}
billingAddress
shippingAddress
image={'https://svgshare.com/i/CUz.svg'}
description={`Your total is $${price}`}
amount={priceForStripe}
panelLabel={'Pay Now'}
token={processPayment}
stripeKey={publishableKey}
/>
这会显示弹出窗口并允许我输入所有信息并提交付款,但实际上没有任何反应。不知道是不是跟sessionId和data.id有关。我可以使用另一个函数来代替 stripe.redirectToCheckout 来处理信息吗?
【问题讨论】:
标签: javascript reactjs function stripe-payments payment