Comment forcer la redirection vers une autre page que le success_url dans Stripe Checkout?
QUESTION:
J'utilise actuellement un webhook: à la checkout.session.completed
réception de l' événement, l'utilisateur est redirigé vers la success_url par défaut même si j'essaye de le rediriger vers une autre page avec res.redirect ("/ page") (Node.js). N'y a-t-il vraiment aucun moyen de le rediriger vers une autre page en cas d'échec de mon code d'exécution? (Autrement dit: le paiement réussit, mais le code d'exécution échoue, donc la redirection vers success_url n'est pas appropriée)
RÉFÉRENCE:
https://stripe.com/docs/payments/checkout/one-time
https://stripe.com/docs/payments/checkout/fulfillment#webhooks
"Le webhook checkout.session.completed est envoyé à votre serveur avant que votre client ne soit redirigé. Votre accusé de réception de webhook (tout code d'état 2xx) déclenchera la redirection du client vers success_url"
CE QUE J'AI ESSAYÉ:
Chaînage du statut res.status (401) d'Express.js 4 vers une redirection
Donc, si je devais envoyer un code de statut 4xx, cela ne devrait-il pas empêcher la redirection success_url? C'est bien ce que j'observe.
Mais je n'arrive pas à rediriger vers une autre page. J'ai essayé:
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 ?
CODE
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});
}
});
L' checkout.session.completed
événement envoyé à votre point de terminaison webhook n'est là que pour vous informer que la session de paiement est terminée. Vous ne pouvez pas utiliser la notification d'événement pour modifier la session de paiement de quelque manière que ce soit au-delà d'une réponse par succès ou échec.
La raison pour laquelle la redirection du client est retardée jusqu'à ce que vous répondiez à l' checkout.session.completed
événement est de vous permettre d'effectuer des tâches d'exécution sur votre serveur avant que l'utilisateur ne soit redirigé vers le success_url
(comme la mise à jour de votre base de données, la réalisation d'autres appels d'API, etc.). Cela garantit que le client arrive sur une page qui reflète son achat réussi.
Le success_url
lui-même ne peut pas être modifié à ce stade du processus, mais vous pouvez configurer une page sur votre serveur qui redirigera l'utilisateur vers la page de votre choix en fonction de l'ID de session de paiement et le définira success_url
sur cette page. Vous pouvez inclure l'ID de session de paiement dans votre en success_url
utilisant l' {CHECKOUT_SESSION_ID}
espace réservé .