Comment passer une commande avant d'encaisser un paiement 3D Secure
Modifiez le comportement par défaut du module Stripe lorsque l'authentification 3DS est requise.
Ce guide décrit comment personnaliser le comportement par défaut du module Stripe lorsque l’authentification 3DS est requise. Dans la conception par défaut, lorsque 3DS est requis, le paiement est encaissé à la réussite de l’authentification 3DS et avant que la commande ne soit passée.
Avec cet personnalisation, la commande reçoit d’abord l’état Pending Payment
, puis la fenêtre 3DS s’ouvre. Si l’authentification réussit, le client est redirigé vers la page de réussite du paiement. Stripe envoie ensuite de manière asynchrone l’événement de webhook charge.succeeded à votre site Web, ce qui fait passer la commande à l’état Processing
ou Complete
.
Si le client échoue à l’authentification 3DS ou abandonne le processus de paiement, la commande est automatiquement annulée par cron après 2 à 3 heures. Pendant ce temps, l’inventaire reste réservé. Si vous avez besoin d’annuler la commande plus tôt, vous pouvez le configurer avec le paramètre pending payment order lifetime (durée de vie des commandes de paiement en attente) dans la zone d’administration.
Créer un module
Create a new module with the following directory structure. Replace Vendor
with your preferred vendor name.
app/code/Vendor/StripeCustomizations/ ├── etc/ │ ├── module.xml │ └── config.xml ├── registration.php
Dans registration.
, enregistrez votre module auprès de Magento.
<?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'Vendor_StripeCustomizations', __DIR__ );
Dans le fichier etc/module.
, définissez le module et configurez les dépendances pour vous assurer qu’il se charge après le module Stripe.
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="Vendor_StripeCustomizations" setup_version="1.0.0"> <sequence> <module name="StripeIntegration_Payments"/> </sequence> </module> </config>
Dans etc/config.
, remplacez les paramètres suivants du module Stripe :
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd"> <default> <stripe_settings> <manual_authentication> <rest_api></rest_api> <!-- Setting rest_api to empty will achieve the desired behavior --> </manual_authentication> </stripe_settings> </default> </config>
Note
The single x
value for <rest_
is a placeholder character that forces Magento to respect the override. If you leave the value empty, Magento ignores it and wont override the value.
Activez le module :
php bin/magento module:enable Vendor_StripeCustomizations php bin/magento setup:upgrade php bin/magento cache:clean php bin/magento cache:flush
Considérations sur GraphQL
L’API REST est utilisée par la majorité des thèmes Magento basés sur le thème principal Luma. Si vous utilisez une vitrine personnalisée qui utilise GraphQL au lieu de l’API REST, ce comportement est celui par défaut et vous n’avez pas besoin d’effectuer la modification décrite ci-dessus.
Si toutefois vous préférez que votre vitrine GraphQL passe la commande après confirmation de la réussite du paiement, vous pouvez utiliser la même approche de personnalisation avec la configuration suivante dans etc/config.
:
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd"> <default> <stripe_settings> <manual_authentication> <graphql_api>card,link</graphql_api> </manual_authentication> </stripe_settings> </default> </config>