Je vais dans Magento 2 Admin> Marketing> Promotions> Règles de prix du panier et crée une nouvelle règle: Paiement par virement bancaire:
Informations sur la règle de tabulation:
- Nom de la règle: Paiement par virement bancaire
- Statut: Actif
- Sites Web: site Web principal
- Groupes de clients: tout sélectionner
- Coupon: Aucun coupon
- Utilisations par client: 0
- De: vide
- À: vide
- Priorité: 0
- Public dans le flux RSS: Non
Onglet Conditions:
- Si TOUTES ces conditions sont VRAIES:
- La méthode de paiement est le paiement par virement bancaire
Onglet Actions:
- Appliquer: pourcentage de remise sur le prix du produit
- Montant du rabais: 2
- La remise de quantité maximale est appliquée à: 0
- Étape de remise (acheter X): 0
- Appliquer au montant d'expédition: Non
- Ignorer les règles suivantes: Non
- Livraison gratuite: Non
- Appliquer la règle uniquement aux articles du panier répondant aux conditions suivantes (laisser vide pour tous les articles): rien
Ensuite, j'active la méthode de paiement par virement bancaire, accédez à la page de paiement, cliquez sur Paiement par virement bancaire, mais le prix en pourcentage de la remise n'apparaît pas dans le résumé de la commande.
Veuillez me donner un conseil. Comment faire une remise sur le mode de paiement sur Magento 2. Pour Magento 1, ça marche bien.
Merci beaucoup
Réponses:
Cette règle ne fonctionne pas, car Magento 2 n'enregistre pas le mode de paiement à proposer lorsque vous en sélectionnez un. Et il ne recharge pas non plus les totaux lors de la sélection d'un mode de paiement. Et malheureusement, vous devez écrire un module personnalisé pour résoudre le problème.
Le nouveau module n'a besoin que de 4 fichiers pour être créé:
app / code / Namespace / ModuleName / etc / frontend / routes.xml
Cela définira un nouveau contrôleur pour notre module.
app / code / Espace de noms / ModuleName / Controller / Checkout / ApplyPaymentMethod.php
Ce fichier crée une action du contrôleur pour enregistrer le mode de paiement sélectionné pour le devis
app / code / Namespace / ModuleName / view / frontend / requirejs-config.js
Ce fichier permet de remplacer le
Magento_Checkout/js/action/select-payment-method
fichierapp / code / Espace de noms / ModuleName / view / frontend / web / js / action / select-payment-method.js
Envoie une demande ajax pour enregistrer le mode de paiement et recharger les totaux du panier.
PS Certaines parties du code proviennent de l' extension des frais de paiement pour Magento 2.
la source
Sur Magento 2.2, je n'ai pas pu faire fonctionner la réponse de MagestyApps. J'avais besoin d'ajouter des fichiers supplémentaires. Car:
\Magento\AdvancedSalesRule\Model\Rule\Condition\FilterTextGenerator\Address\PaymentMethod::generateFilterText
(en fait, elle revient à\Magento\AdvancedSalesRule\Model\Rule\Condition\FilterTextGenerator\Address::generateFilterText
), s'attendait à ce que les donnéespayment_method
soient définies sur les adresses de devis;payment_method
données sur les adresses de devis, n'a pas fonctionné lorsque le devis est devenu une commande, car il ne persiste paspayment_method
;Le module suivant a fonctionné pour moi (grâce à la réponse de MagestyApps, il était basé sur cela):
registration.php
etc / module.xml
etc / di.xml
etc / frontend / routes.xml
Controller / Checkout / ApplyPaymentMethod.php
Modèle / Règle / Condition / FilterTextGenerator / Adresse / PaymentMethod.php
Plugin / AddPaymentMethodOptionBack.php
voir / frontend / requirejs-config.js
voir / frontend / web / js / action / select-payment-method.js
la source
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
. J'ai même essayé de changer AdvancedSalesRule en SalesRule car je peux voir qu'il n'y a pas de modèle AdvancedSalesRule dans Magento 2.2.2Nous venons de vérifier la même règle et avons constaté que cela ne fonctionne pas. Dans les mêmes conditions, aucune information sur la méthode choisie sélectionnée n'est envoyée et elle n'est enregistrée nulle part tant que la commande n'est pas passée et que la règle peut ne pas fonctionner.
L'adresse n'a pas de mode de paiement jusqu'à la validation et obtient le mode de paiement du devis de paiement qui n'existe pas car aucune information n'a été envoyée (
$model->getQuote()->getPayment()->getMethod()
retoursnull
).Nous supposons que c'est un bug de Magento. Lorsque vous choisissez un mode de paiement, les informations doivent être envoyées à l'avance.
la source
La solution avec le module personnalisé fonctionne.
Je pensais juste qu'il serait utile pour les débutants de Magento de savoir que vous devez également ajouter ces fichiers pour pouvoir ajouter et activer ce module:
(copier à partir d'un module différent et modifier les fichiers en fonction du nom et de l'espace de noms de votre module)
alors vous seriez en mesure d'exécuter
bin/magento setup:upgrade
la source
J'ai créé les fichiers et remplacé les espaces de noms et le nom de module, mais je pense que mes fichiers ne seront pas exécutés.
Peut-être une erreur sur mes fichiers ??
registration.php
composer.json
}
module.xml
la source
en fait, remplacer les fichiers core de magento n'est pas une bonne idée. Au lieu de remplacer,
Magento_Checkout/js/action/select-payment-method
mieux créer un mixin pour cela. Et vous pouvez le désactiver sans créer de nouveau contrôleur. Voir ci-dessous (en plus de la réponse @magestyapps)app / code / Namespace / ModuleName / view / frontend / requirejs-config.js
app / code / namespace / ModuleName / view / frontend / js / checkout / action / select-payment-method-mixin.js
la source
Vérifiez la solution au post ci-dessous:
https://meetanshi.com/blog/solution-discount-based-on-payment-method-not-showing-in-magento-2-cart-total/
la source