我正在尝试在我的React应用程序中实现Stripe checkout 。目前我的“购物篮”页面包含一个结帐按钮,它调用以下表单提交-
const handleSubmit = async(e) => {
e.preventDefault();
try {
const response = await fetch('/create-checkout-session', {
method: 'POST',
// mode: "no-cors", // no-cors, *cors, same-origin
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({productId}),
});
if (response.ok) {
console.log('Request sent successfully');
} else {
console.log('Request failed');
}
} catch (error) {
console.log('Error occurred during the request', error);
}
}
这调用了我的API
app.post('/create-checkout-session', async (req, res) => {
// Get the selected product ID from the frontend
const { productId } = req.body;
console.log(productId)
// Define a mapping of product IDs to prices
const priceMap = {
bricky_id: 'price_1NA7O1JVu65LdnVcBljr473q',
sub_id: 'price_1NA64tJVu65LdnVcfgUwbhUA',
// Add more product IDs and their corresponding prices here
};
// Get the price based on the selected product ID
const price = priceMap[productId];
console.log(price);
if (!price) {
// Handle invalid product ID
return res.status(400).json({ error: 'Invalid product selected' });
}
const session = await stripe.checkout.sessions.create({
line_items: [
{
price: price,
quantity: 1,
},
{
price: 'price_1NA64tJVu65LdnVcfgUwbhUA',
quantity: 1
}
],
mode: 'subscription',
success_url: `http://localhost:4000/order-success`,
cancel_url: `http://localhost:4000/order-preview`,
});
res.redirect(303, session.url);
// res.redirect({url: session.url});
// res.redirect(session.url);
});
当我在请求体中没有任何内容时进行简单调用时,我会重定向到第三方条带结账页面,但是一旦我将详细信息传递到请求体中,我就会在浏览器中获得以下CORS错误-
访问获取在'https://checkout.条纹。com/c/pay/cs_test_b1SYlrHX7s9b3q2o08lxTvWtMvkV7UJ1ifRvv6tzoHMSGCMIygdCDm9hXD@@#fidkdWxOYHwnPyd1blpxYHZxWjA0Szxpf2RPU3AzMElha1NmbFRjR3N9PU5dS1ZDbnJwQ DJqX21Vb1IzM048TDFgQ2ZWYW5rbkpqXHA3PDVLYndCTnRVTnxAPTRyaH1dQ0djNTxvTTV1NFJQNTVRVlVXTW1LVycpJ2N3amhWYHdzYHcnP3F3cGApJ2lkfGpwcVF8dWAnPydocGlxbFp@WBoJyknYGtkZ2lgVWlkZmBtamlhYHd2Jz9xd3BgeCUl'(重定向自'http://localhost:3000/create-checkout-session')来自源' http://localhost:3000 '已被CORS策略阻止:对印前检查请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果一个不透明的响应满足了你的需求,将请求的模式设置为“no-cors”,以在禁用CORS的情况下获取资源。
OrderPreview. js:11 GET https://checkout.stripe.com/c/pay/cs_test_b1SYlrHX7s9b3q2o08lxTvWtMvkV7UJ1ifRvv6tzoHMSGCMIygdCDm9hXD net::ERR_FAILED
我的React应用程序目前正在使用“代理”:"http://localhost:4000",用于向后端请求。
我正试图从FE向BE传递项目信息,并使用该信息重定向到条带中的正确页面,但CORS阻止了请求。
我已将以下内容添加到我的服务器文件中,
app.use(cors())
app.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
res.setHeader('Access-Control-Allow-Credentials', true);
next();
});
我也尝试了各种格式的回应,我已经离开了评论。//redirect({url:});//res.redirect(session.url);
我觉得我误解了这个问题,因为重定向在从前后传递信息之前就开始工作了。我想知道这个问题是否与代理有关?
任何建议将不胜感激。
1条答案
按热度按时间pxq42qpu1#
正如@codename_duchess所说,尝试将重定向移到前面,并尝试在您的帖子请求中添加内容类型:
}