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.

Tom
fuente

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

juhanix
fuente
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