Voy a Magento 2 Admin> Marketing> Promociones> Reglas de precios de carrito y creo una nueva Regla: Pago por transferencia bancaria:
Información de regla de tabulación:
- Nombre de la regla: pago por transferencia bancaria
- Estado: Activo
- Sitios web: sitio web principal
- Grupos de clientes: seleccionar todo
- Cupón: sin cupón
- Usos por cliente: 0
- De: en blanco
- Para: en blanco
- Prioridad: 0
- Público en RSS: No
Pestaña de condiciones:
- Si TODAS estas condiciones son VERDADERAS:
- El método de pago es el pago por transferencia bancaria
Pestaña Acciones:
- Aplicar: porcentaje del descuento del precio del producto
- Cantidad de descuento: 2
- El descuento por cantidad máxima se aplica a: 0
- Descuento Cantidad Paso (Comprar X): 0
- Aplicar a la cantidad de envío: No
- Descartar reglas posteriores: No
- Envío gratis: no
- Aplique la regla solo a los artículos del carrito que cumplan las siguientes condiciones (deje en blanco para todos los artículos): nada
Luego habilito el método de Pago por transferencia bancaria, vaya a la página de pago, haga clic en Pago por transferencia bancaria, pero el Precio porcentual de descuento no aparece en el Resumen del pedido.
Por favor dame un consejo. Cómo hacer un descuento en el método de pago en Magento 2. Para Magento 1, funciona bien.
Muchas gracias
Respuestas:
Esta regla no funciona porque Magento 2 no guarda el método de pago para cotizar cuando selecciona uno. Y tampoco recarga los totales al seleccionar un método de pago. Y desafortunadamente, debe escribir un módulo personalizado para resolver el problema.
El nuevo módulo solo necesita 4 archivos para ser creado:
app / code / Namespace / ModuleName / etc / frontend / routes.xml
Esto definirá un nuevo controlador para nuestro módulo.
app / code / Namespace / ModuleName / Controller / Checkout / ApplyPaymentMethod.php
Este archivo crea una acción del controlador para guardar el método de pago seleccionado para cotizar
app / code / Namespace / ModuleName / view / frontend / requirejs-config.js
Este archivo permite anular el
Magento_Checkout/js/action/select-payment-method
archivoapp / code / Namespace / ModuleName / view / frontend / web / js / action / select-payment-method.js
Envía una solicitud ajax para guardar el método de pago y recargar los totales del carrito.
Las partes de PS del código se tomaron de la extensión de la tarifa de pago para Magento 2.
fuente
En Magento 2.2 no pude conseguir que la respuesta de MagestyApps funcionara. Necesitaba agregar algunos archivos adicionales. Porque:
\Magento\AdvancedSalesRule\Model\Rule\Condition\FilterTextGenerator\Address\PaymentMethod::generateFilterText
(en realidad recurre a\Magento\AdvancedSalesRule\Model\Rule\Condition\FilterTextGenerator\Address::generateFilterText
), esperaba que los datospayment_method
se establecieran en las direcciones de cotización;payment_method
datos en las direcciones de cotización, no funcionó cuando la cotización se convirtió en un pedido, porque no persistepayment_method
;El siguiente módulo funcionó para mí (gracias a la respuesta de MagestyApps, se basó en eso):
registro.php
etc / module.xml
etc / di.xml
etc / frontend / routes.xml
Controller / Checkout / ApplyPaymentMethod.php
Modelo / Regla / Condición / FilterTextGenerator / Address / PaymentMethod.php
Plugin / AddPaymentMethodOptionBack.php
ver / frontend / requirejs-config.js
ver / frontend / web / js / action / select-payment-method.js
fuente
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
. Incluso intenté cambiar AdvancedSalesRule a SalesRule ya que puedo ver que no hay un modelo AdvancedSalesRule en Magento 2.2.2Simplemente verificamos la misma regla y descubrimos que no funciona. Usando las mismas condiciones, no se envía información sobre el método elegido seleccionado y no se registra en ninguna parte hasta que se realiza el pedido y la regla puede no funcionar.
La dirección no tiene método de pago hasta la validación y obtiene el método de pago de la cotización de pago que no existe porque no se ha enviado información (
$model->getQuote()->getPayment()->getMethod()
devolucionesnull
).Suponemos que este es un error de Magento. Cuando elige un método de pago, la información debe enviarse por adelantado.
fuente
La solución con el módulo personalizado está funcionando.
Solo pensé que sería una información útil para los principiantes de Magento saber que también deben agregar estos archivos para poder agregar y habilitar este módulo:
(copie desde un módulo diferente y cambie los archivos de acuerdo con el nombre y el espacio de nombres de su módulo)
entonces podrías correr
bin/magento setup:upgrade
fuente
Creé los archivos y reemplacé los espacios de nombres y el nombre del módulo, pero creo que mis archivos no se ejecutarán.
Tal vez un error en mis archivos?
registro.php
composer.json
}
module.xml
fuente
en realidad, anular los archivos principales de magento no es una buena idea. En lugar de anular
Magento_Checkout/js/action/select-payment-method
mejor crear un mixin para ello. Y puede revenderlo sin crear un nuevo controlador. Vea a continuación (además de la respuesta @magestyapps)app / code / Namespace / ModuleName / view / frontend / requirejs-config.js
app / code / Namespace / ModuleName / view / frontend / js / checkout / action / select-payment-method-mixin.js
fuente
Verifique la solución en la siguiente publicación:
https://meetanshi.com/blog/solution-discount-based-on-payment-method-not-showing-in-magento-2-cart-total/
fuente