繁体   English   中英

如何强制重定向到 Stripe Checkout 中的 success_url 以外的其他页面?

[英]How to force redirect to another page than the success_url in Stripe Checkout?

题:

我目前正在使用 webhook:当收到checkout.session.completed事件时,即使我尝试使用 res.redirect("/page") (Node.js) 将用户重定向到另一个页面,默认情况下也会将用户重定向到 success_url。 js)。 如果我的执行代码失败,真的没有办法将他重定向到另一个页面吗? (即:支付成功,但是履行码失败,所以重定向到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});
    }

});

发送到您的 webhook 端点checkout.session.completed事件只是为了让您知道 Checkout Session 已完成。 除了响应成功或失败之外,您不能使用事件通知以任何方式更改结帐会话。

客户端重定向延迟直到您响应checkout.session.completed事件的原因是允许您在用户重定向到success_url之前在您的服务器上执行完成任务(例如更新您的数据库,进行其他 API 调用等。 )。 这可确保客户登陆反映其成功购买的页面。

在此过程中, success_url本身无法更改,但您可以在服务器上设置一个页面,该页面将根据结帐会话 ID 将用户重定向到您希望的任何页面,并将success_url设置为该页面。 您可以使用{CHECKOUT_SESSION_ID}占位符在您的success_url包含结帐会话 ID

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM