题:
我当前使用的是Webhook:checkout.session.completed
收到事件后,即使我尝试使用res.redirect(“ / page”)(Node.js)将其重定向到另一个页面,默认情况下也会将用户重定向到success_url。万一我的履行代码失败,是否真的没有办法将他重定向到另一个页面?(即:付款成功,但是履行代码失败,因此重定向到success_url是不合适的)
参考:
https://stripe.com/docs/payments/checkout/one-time
https://stripe.com/docs/payments/checkout/fulfillment#webhooks
“在重定向客户之前,checkout.session.completed Webhook已发送到您的服务器。您的Webhook确认(任何2xx状态代码)将触发客户将其重定向到success_url”
我尝试过的是:
将Express.js 4的res.status(401)链接到重定向
因此,如果我要发送4xx状态代码,那是否不应该阻止success_url重定向?这确实是我观察到的。
但是我似乎无法重定向到另一个页面。我试过了:
res.status(401).location('/submit/wait/').end();
res.redirect(401, '/submit/wait/');
res.set('Content-Type', 'text/html');
res.status(401).send('<!DOCTYPE html><html><head><meta http-equiv="refresh" content="0; url=/submit/wait"></head></html>`);Is there really no way to then just redirect to another page ?
码
router.post('/webhook', bodyParser.raw({type: 'application/json'}), (req, res) => {
const sig = req.headers['stripe-signature'];
let event;
try {
event = stripe.webhooks.constructEvent(req.rawBody, sig, endpointSecret);
} catch (err) {
return res.status(400).send(`Webhook Error: ${err.message}`);
}
if (event.type === 'checkout.session.completed') {
const session = event.data.object;
(async () => {
try {
//FULFIL ORDER CODE
} catch(e) {
console.log("ERROR FULFILLING ORDER: "+e);
res.status(401).location('/submit/wait/').end();
}
})();
}
else {
console.log("DEFAULT RESPONSE");
// Return a response to acknowledge receipt of the event
res.json({received: true});
}
});
checkout.session.completed
发送到您的Webhook终结点的事件仅是为了通知您Checkout会话已完成。除了响应成功或失败之外,您不能使用事件通知来更改Checkout会话。
客户端重定向延迟到您响应该checkout.session.completed
事件之前的原因是允许您在用户重定向到之前在服务器上执行履行任务success_url
(例如更新数据库,进行其他API调用等)。这样可以确保客户登陆到反映其成功购买的页面上。
此过程success_url
本身不能更改,但是您可以在服务器上设置一个页面,该页面将根据Checkout Session ID将用户重定向到所需的任何页面,并将success_url
页面设置为该页面。您可以使用占位符在其中包含Checkout会话IDsuccess_url
{CHECKOUT_SESSION_ID}
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句