经过与ChatGPT长时间的讨论,我设法编写了代码,将用户重定向到Stripe支付页面,然后在交易成功完成时捕获一个事件。问题是我的fetch
请求已经收到了来自/checkout
端点的响应,并且没有等待来自/webhook
的响应。我希望我的API在成功完成交易后返回一个正确生成的响应。我做错了什么?
首先,我向/checkout
端点发送一个请求,该端点负责生成支付链接并将其发回:
fetch('http://localhost:3001/checkout', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
items: [
{
id: 0,
},
],
}),
})
.then((res) => {
if (res.ok) return res.json();
return res.json().then((e) => console.error(e));
})
.then(({url}) => {
console.log(url);
window.location = url;
})
.catch((e) => {
console.log(e);
});
当我按下按钮时,此代码会将我重定向到条纹付款页面。
终点/checkout
:
app.post('/checkout', async (req, res) => {
try {
const session = await stripe.checkout.sessions.create({
payment_method_types: ['card'],
line_items: req.body.items.map(({id}) => {
const storeItem = storeItems.get(id);
return {
price_data: {
currency: 'pln',
product_data: {
name: storeItem.name,
},
unit_amount: storeItem.priceInCents,
},
quantity: 1,
};
}),
mode: 'payment',
success_url: `${process.env.CLIENT_URL}/success.html`,
cancel_url: `${process.env.CLIENT_URL}/cancel.html`,
});
console.log(session.url);
res.json({url: session.url});
} catch (e) {
// If there is an error send it to the client
console.log(e.message);
res.status(500).json({error: e.message});
}
});
我使用stripe listen --forward-to localhost:3001/webhook
将StripeCLI连接到我的服务器,现在我可以使用/webhook
端点捕获成功的事务事件,但是我无法将The transaction was successful
返回给客户端:
app.post('/webhook', (req, res) => {
const event = req.body;
if (event.type === 'checkout.session.completed') {
res.send('The transaction was successful');
}
});
2条答案
按热度按时间0tdrvxhp1#
成功付款后,客户应重定向回您的网站。在那里您可以创建成功页面。
如果你想得到一些数据从Strapi后paymant是成功的页面,你可以添加这个
在succes页面,你只需解构数据。然后对它们做任何你想做的事情:)
如果你像这样解构对象:(下一个. js)
你可以注销整个对象,看看里面有什么
如果付款成功,则应输入prop变量:付款状态:“已付”
yizd12fk2#
Stripe会自动将客户端重定向到您在创建Stripe会话时指定的
success_url
。例如,您可以使用webhook将订单保存在数据库中,但不能重定向客户端。