Ich gehe zu Magento 2 Admin> Marketing> Promotions> Cart Price Rules und erstelle eine neue Regel: Banküberweisung Zahlung:
Informationen zu Tab-Regeln:
- Regelname: Banküberweisung Zahlung
- Status: Aktiv
- Websites: Hauptwebsite
- Kundengruppen: Alle auswählen
- Coupon: Kein Coupon
- Verwendung pro Kunde: 0
- Von: leer
- An: leer
- Priorität: 0
- Öffentlich im RSS-Feed: Nein
Registerkarte "Bedingungen":
- Wenn ALLE dieser Bedingungen WAHR sind:
- Zahlungsmethode ist Überweisung
Registerkarte "Aktionen":
- Anwenden: Prozent vom Produktpreisrabatt
- Rabattbetrag: 2
- Maximaler Mengenrabatt gilt für: 0
- Rabatt Menge Schritt (Kaufen X): 0
- Gilt für Versandmenge: Nein
- Nachfolgende Regeln verwerfen: Nein
- Kostenloser Versand: Nein
- Wenden Sie die Regel nur auf Artikel an, die den folgenden Bedingungen entsprechen (lassen Sie das Feld für alle Artikel leer): nichts
Dann aktiviere ich die Zahlungsmethode "Überweisung", gehe zur Kasse und klicke auf "Überweisung", aber der prozentuale Rabatt wird in der Bestellübersicht nicht angezeigt.
Bitte geben Sie mir einen Rat. Wie kann man bei Magento 2 einen Rabatt auf die Zahlungsmethode gewähren? Bei Magento 1 funktioniert das sehr gut.
Vielen Dank
Antworten:
Diese Regel funktioniert nicht, da Magento 2 die Zahlungsmethode nicht speichert, wenn Sie eine auswählen. Außerdem werden bei der Auswahl einer Zahlungsmethode keine Summen neu geladen. Und leider müssen Sie ein benutzerdefiniertes Modul schreiben, um das Problem zu lösen.
Für das neue Modul müssen nur 4 Dateien erstellt werden:
app / code / Namespace / Modulname / etc / frontend / routes.xml
Dadurch wird ein neuer Controller für unser Modul definiert.
app / code / Namespace / Modulname / Controller / Checkout / ApplyPaymentMethod.php
Diese Datei erstellt eine Controller-Aktion, um die ausgewählte Zahlungsmethode für das Angebot zu speichern
app / code / Namespace / Modulname / view / frontend / requirejs-config.js
Diese Datei ermöglicht das Überschreiben der
Magento_Checkout/js/action/select-payment-method
Dateiapp / code / Namespace / Modulname / view / frontend / web / js / action / select-payment-method.js
Sendet eine Ajax-Anfrage, um die Zahlungsmethode zu speichern und den Gesamtbetrag des Einkaufswagens neu zu laden.
PS Teile des Codes wurden aus der Zahlungsgebühr- Erweiterung für Magento 2 entnommen .
quelle
Auf Magento 2.2 konnte ich MagestyApps nicht zum Laufen bringen. Ich musste einige zusätzliche Dateien hinzufügen. Weil:
\Magento\AdvancedSalesRule\Model\Rule\Condition\FilterTextGenerator\Address\PaymentMethod::generateFilterText
(auf die es tatsächlich zurückgreift\Magento\AdvancedSalesRule\Model\Rule\Condition\FilterTextGenerator\Address::generateFilterText
) die Daten erwartetepayment_method
für die Angebotsadressen festgelegt werden.payment_method
Daten für die Angebotsadressen funktionierte nicht, als das Angebot zu einer Bestellung wurde, da es nicht fortbestehtpayment_method
.Das folgende Modul hat für mich funktioniert (dank der Antwort von MagestyApps basierte es darauf):
registration.php
etc / module.xml
etc / di.xml
etc / frontend / routes.xml
Controller / Checkout / ApplyPaymentMethod.php
Model / Rule / Condition / FilterTextGenerator / Address / PaymentMethod.php
Plugin / AddPaymentMethodOptionBack.php
view / frontend / requirejs-config.js
view / frontend / web / js / action / select-payment-method.js
quelle
Fatal error: Class 'Magento\AdvancedSalesRule\Model\Rule\Condition\Address\PaymentMethod' not found in Vendor/SalesRulesPaymentMethod/Model/Rule/Condition/FilterTextGenerator/Address/PaymentMethod.php on line 7
. Ich habe sogar versucht, AdvancedSalesRule in SalesRule zu ändern, da ich sehe, dass es in Magento 2.2.2Wir haben die gleiche Regel überprüft und festgestellt, dass sie nicht funktioniert. Unter den gleichen Bedingungen werden keine Informationen über die ausgewählte Methode gesendet und sie werden nirgendwo aufgezeichnet, bis die Bestellung aufgegeben wird und die Regel möglicherweise nicht funktioniert.
Die Adresse hat bis zur Bestätigung keine Zahlungsmethode und erhält die Zahlungsmethode aus dem nicht vorhandenen Zahlungsangebot, da keine Informationen gesendet wurden (
$model->getQuote()->getPayment()->getMethod()
Retourennull
).Wir nehmen an, dass dies ein Magento-Fehler ist. Wenn Sie eine Zahlungsmethode auswählen, sollten die Informationen im Voraus gesendet werden.
quelle
Die Lösung mit dem benutzerdefinierten Modul funktioniert.
Ich dachte nur, dass es für Magento-Anfänger nützlich wäre, zu wissen, dass Sie auch diese Dateien hinzufügen müssen, um dieses Modul hinzufügen und aktivieren zu können:
(Kopieren Sie von einem anderen Modul und ändern Sie die Dateien entsprechend Ihrem Modulnamen und Namespace.)
dann könntest du rennen
bin/magento setup:upgrade
quelle
Ich habe die Dateien erstellt und die Namespaces und Modulnamen ersetzt, aber ich glaube, meine Dateien werden nicht ausgeführt.
Vielleicht ein Fehler in meinen Dateien?
registration.php
composer.json
}
module.xml
quelle
Das Überschreiben von Magento-Kerndateien ist eigentlich keine gute Idee. Anstatt zu überschreiben
Magento_Checkout/js/action/select-payment-method
, sollte ein Mixin dafür erstellt werden. Und Sie können es deaktivieren, ohne einen neuen Controller zu erstellen. Siehe unten (zusätzlich zu @magestyapps Antwort)app / code / Namespace / Modulname / view / frontend / requirejs-config.js
app / code / Namespace / Modulname / view / frontend / js / checkout / action / select-payment-method-mixin.js
quelle
Überprüfen Sie die Lösung im folgenden Beitrag:
https://meetanshi.com/blog/solution-discount-based-on-payment-method-not-showing-in-magento-2-cart-total/
quelle