Idę do Magento 2 Admin> Marketing> Promocje> Reguły ceny koszyka i tworzę nową regułę: Przelew bankowy Płatność:
Informacje o regułach tabulatorów:
- Nazwa reguły: Płatność przelewem bankowym
- Status: Aktywny
- Strony internetowe: strona główna
- Grupy klientów: wybierz wszystko
- Kupon: brak kuponu
- Zastosowania na klienta: 0
- Od: puste
- Do: puste
- Priorytet: 0
- Publiczny w kanale RSS: Nie
Karta Warunki:
- Jeśli WSZYSTKIE z tych warunków są PRAWDĄ:
- Metodą płatności jest płatność przelewem bankowym
Karta Działania:
- Zastosuj: procent rabatu cenowego produktu
- Kwota rabatu: 2
- Maksymalny rabat za ilość dotyczy: 0
- Zniżka Ilość Krok (Kup X): 0
- Zastosuj do Kwota wysyłki: Nie
- Odrzuć kolejne zasady: Nie
- Darmowa wysyłka: Nie
- Zastosuj regułę tylko do koszyka produktów spełniających następujące warunki (pozostaw puste dla wszystkich przedmiotów): nic
Następnie włączam metodę płatności przelewem bankowym, przejdź do strony kasy, kliknij Płatność przelewem bankowym, ale procentowa cena rabatu nie pojawia się w Podsumowaniu zamówienia.
Proszę o radę. Jak zrobić rabat na metodę płatności na Magento 2. W przypadku Magento 1 dobrze się pisze.
Dziękuję bardzo
Odpowiedzi:
Ta reguła nie działa, ponieważ Magento 2 nie zapisuje metody płatności, aby podać ją po wybraniu. I nie przeładowuje też sum przy wyborze metody płatności. I niestety musisz napisać niestandardowy moduł, aby rozwiązać problem.
Nowy moduł wymaga tylko 4 plików:
app / code / Namespace / ModuleName / etc / frontend / tras.xml
Spowoduje to zdefiniowanie nowego kontrolera dla naszego modułu.
app / code / Namespace / ModuleName / Controller / Checkout / ApplyPaymentMethod.php
Ten plik tworzy akcję kontrolera, aby zapisać wybraną metodę płatności do wyceny
app / code / Namespace / ModuleName / view / frontend / Requjs-config.js
Ten plik pozwala zastąpić
Magento_Checkout/js/action/select-payment-method
plikapp / code / Namespace / ModuleName / view / frontend / web / js / action / select-payment-method.js
Wysyła żądanie ajax, aby zapisać metodę płatności i ponownie załadować sumy koszyka.
Części kodu PS zostały pobrane z rozszerzenia Opłata za płatności dla Magento 2.
źródło
Na Magento 2.2 nie mogłem uzyskać odpowiedzi MagestyApps na pracę. Musiałem dodać dodatkowe pliki. Bo:
\Magento\AdvancedSalesRule\Model\Rule\Condition\FilterTextGenerator\Address\PaymentMethod::generateFilterText
(faktycznie do niej wraca\Magento\AdvancedSalesRule\Model\Rule\Condition\FilterTextGenerator\Address::generateFilterText
) oczekiwała, że danepayment_method
zostaną ustawione na adresach wyceny;payment_method
danych na adresach wyceny nie działała, gdy wycena stała się zamówieniem, ponieważ nie trwapayment_method
;Poniższy moduł działał dla mnie (dzięki odpowiedzi MagestyApps, był oparty na tym):
Registration.php
etc / module.xml
etc / di.xml
etc / frontend / trasy.xml
Kontroler / Kasa / ApplyPaymentMethod.php
Model / Reguła / Warunek / FilterTextGenerator / Adres / PaymentMethod.php
Plugin / AddPaymentMethodOptionBack.php
view / frontend / Requjs-config.js
view / frontend / web / js / action / select-payment-method.js
źródło
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
. Próbowałem nawet zmienić AdvancedSalesRule na SalesRule, ponieważ widzę, że nie ma modelu AdvancedSalesRule w Magento 2.2.2Właśnie sprawdziliśmy tę samą regułę i stwierdziliśmy, że nie działa. Korzystając z tych samych warunków, żadna informacja o wybranej wybranej metodzie nie jest wysyłana i nie jest nigdzie rejestrowana, dopóki zamówienie nie zostanie złożone, a reguła może nie działać.
Adres nie ma metody płatności do momentu zatwierdzenia i pobiera metodę płatności z oferty płatności, która nie istnieje, ponieważ nie wysłano żadnych informacji (
$model->getQuote()->getPayment()->getMethod()
zwrotównull
).Przypuszczamy, że jest to błąd Magento. Po wybraniu metody płatności informacje należy przesłać z góry.
źródło
Działa rozwiązanie z niestandardowym modułem.
Pomyślałem, że dla początkujących Magento przydatne będą informacje, że musisz także dodać te pliki, aby móc dodać i włączyć ten moduł:
(kopiuj z innego modułu i zmieniaj pliki zgodnie z nazwą modułu i przestrzenią nazw)
wtedy będziesz w stanie biec
bin/magento setup:upgrade
źródło
utworzyłem pliki i zastąpiłem przestrzenie nazw i modulename, ale myślę, że moje pliki nie zostaną wykonane.
Może błąd w moich plikach?
Registration.php
composer.json
}
module.xml
źródło
w rzeczywistości przesłonięcie plików rdzenia Magento nie jest dobrym pomysłem. Zamiast przesłonić,
Magento_Checkout/js/action/select-payment-method
lepiej stwórz dla niego mixin. Możesz to zrobić bez tworzenia nowego kontrolera. Zobacz poniżej (oprócz odpowiedzi @magestyapps)app / code / Namespace / ModuleName / view / frontend / Requjs-config.js
app / code / Namespace / ModuleName / view / frontend / js / checkout / action / select-payment-method-mixin.js
źródło
Sprawdź rozwiązanie w poniższym poście:
https://meetanshi.com/blog/solution-discount-based-on-payment-method-not-showing-in-magento-2-cart-total/
źródło