Magento 2: habilite el pago contra reembolso solo para un método de envío específico


9

¿Cómo, por ejemplo, habilitar el pago contra reembolso solo cuando el cliente seleccionó el método de envío de tarifa plana?

No puedo encontrar una manera de hacerlo en la configuración de envío / pago o en las reglas del carrito.

Respuestas:


9

Uso un complemento en un módulo personalizado para establecer la función isAvailable para CashOnDelivery en falso cuando se selecciona el método de envío "flatrate_flatrate".

file: <magento-root>/app/code/MyCompany/MyModule/Plugin/CashonDeliveryPlug.php

<?php
    namespace MyCompany\MyModule\Plugin;
    use Magento\Payment\Model\Method\AbstractMethod;
    use Magento\Quote\Model\Quote;
    class CashondeliveryPlug
    {

      /**
       * @var \Magento\Checkout\Model\Session
       */
       protected $_checkoutSession;

      /**
       * Constructor
       *
       * @param \Magento\Checkout\Model\Session $checkoutSession
       */
        public function __construct
        (
            \Psr\Log\LoggerInterface $logger,
            \Magento\Checkout\Model\Session $checkoutSession
         ) {
            $this->logger = $logger;
            $this->_checkoutSession = $checkoutSession;
            return;
        }

        public function aroundIsAvailable(\Magento\Payment\Model\Method\AbstractMethod $subject, callable $proceed)
        {
            $shippingMethod = $this->_checkoutSession->getQuote()->getShippingAddress()->getShippingMethod();
            #$this->logger->debug($shippingMethod);
            if ($shippingMethod == 'flatrate_flatrate') {
                return false;
            }
            $result = $proceed();
            return $result;
          }
    }

y

file: <magento-root>/app/code/MyCompany/MyModule/etc/di.xml

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\OfflinePayments\Model\Cashondelivery">
        <plugin name="cashondeliveryplug" type="MyCompany\MyModule\Plugin\CashondeliveryPlug" disabled="false" sortOrder="10"/>
    </type>
</config>

¡Espero que esto te ayude! No dude en hacer cualquier pregunta


1
Cómo hacer esto en el backend
Mahi M

debe crear un módulo personalizado con un complemento alrededor de la función IsIvailable. No puedes hacer esto en el backend con stock-magento
juhanix

esta es mi condición ... cómo hacer esto en el backend
Mahi M

tal vez deberías abrir una nueva pregunta, donde puedes dar más información
juhanix

Muchas gracias @juhanix, paso más de 2 horas para encontrar un flujo. Tu solución me ayuda mucho. seguir codificando :)
divya sekar
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.