So geben Sie eine Bestellung auf, bevor Sie eine 3D Secure-Zahlung einziehen
Ändern Sie das Standardverhalten des Stripe-Moduls, wenn die 3DS-Authentifizierung erforderlich ist.
In diesem Leitfaden wird eine Anpassung beschrieben, bei der das Standardverhalten des Stripe-Moduls geändert wird, wenn die 3DS-Authentifizierung erforderlich ist. Wenn im Standarddesign 3DS erforderlich ist, wird die Zahlung eingezogen, wenn die 3DS-Authentifizierung erfolgreich ist und bevor die Bestellung aufgegeben wird.
Mit dieser Anpassung wird die Bestellung zunächst im Status Pending Payment
aufgegeben und das 3DS-Modal wird geöffnet. Wenn 3DS erfolgreich ist, wird der Kunde/die Kundin auf die Bestätigungsseite weitergeleitet. Stripe sendet dann asynchron das charge.succeeded-Webhook-Ereignis an Ihre Website zurück. Dadurch wechselt die Bestellung zum Status Processing
oder Complete
.
Wenn der Kunde/die Kundin die 3DS-Authentifizierung nicht bestanden hat oder den Zahlungsvorgang abbricht, wird die Bestellung nach 2-3 Stunden automatisch über cron storniert. Während dieser Zeit bleibt der Bestand reserviert. Wenn Sie die Bestellung früher stornieren müssen, können Sie sie mit der Einstellung Pending Payment Order Lifetime im Admin-Bereich konfigurieren. Ò
Ein neues Modul erstellen
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
Registrieren Sie in registration.
Ihr Modul bei Magento.
<?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'Vendor_StripeCustomizations', __DIR__ );
Definieren Sie in etc/module.
das Modul und richten Sie Abhängigkeiten ein, um sicherzustellen, dass es nach dem Stripe-Modul geladen wird.
<?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>
Überschreiben Sie in etc/config.
die folgenden Einstellungen des Stripe-Moduls:
<?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>
Notiz
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.
Aktivieren Sie das Modul:
php bin/magento module:enable Vendor_StripeCustomizations php bin/magento setup:upgrade php bin/magento cache:clean php bin/magento cache:flush
Überlegungen zu GraphQL
Die REST-API wird von den meisten Magento-Designs verwendet, die auf dem Luma-Kerndesign basieren. Wenn Sie eine nutzerdefinierte Storefront verwenden, die GraphQL anstelle der REST-API verwendet, ist dieses Verhalten das Standardverhalten und Sie müssen die oben beschriebene Änderung nicht vornehmen.
Wenn Sie jedoch bevorzugen, dass Ihre GraphQL-basierte Storefront die Bestellung nach erfolgreicher Zahlung aufgibt, können Sie das gleiche Anpassungsverfahren mit der folgenden Konfiguration in etc/config.
verwenden:
<?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>