For removing a particular payment method in particular category or particular product type you need to crate a even observer
1st You Need to create a module
app/code/Arvind/Cod
ist we need to register our module
<?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'Arvind_Cod', __DIR__ );
Second We Need to create a two folder in our module app/code/Arvind/Cod/etc
app/code/Arvind/Cod/Observer
in our etc folder we need to create three xml file
1 di.xml
2 events.xml
3 module.xml
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"> </config>
events.xml
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="payment_method_is_active"> <observer name="arvind_cod_observer_cod" instance="Arvind\Cod\Observer\Cod" /> </event> </config>
module.xml
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd"> <module name="Arvind_Cod" setup_version="1.0.0"> <sequence> <module name="Magento_Backend"/> <module name="Magento_Sales"/> <module name="Magento_Quote"/> <module name="Magento_Checkout"/> <module name="Magento_Cms"/> </sequence> </module> </config>
In Our Observer Folder we have 1 File
Cod.php
<?php namespace Arvind\Cod\Observer; class Cod implements \Magento\Framework\Event\ObserverInterface { public function __construct() {} /** * * @param \Magento\Framework\Event\Observer $observer * @return void */ public function execute(\Magento\Framework\Event\Observer $observer) { $result = $observer->getEvent()->getResult(); $method_instance = $observer->getEvent()->getMethodInstance(); $quote = $observer->getEvent()->getQuote(); if(null !== $quote){ /* Disable All payment gateway exclude Your payment Gateway*/ if($method_instance->getCode() =='cashondelivery'){ $items= $quote->getAllVisibleItems(); foreach ($items as $eachitem) { //$product = $eachitem->getById('id'); $catid = $eachitem->getProduct()->getCategoryIds(); if (in_array("3", $catid)){ $result->setData('is_available', false); break; } } } } } }
for Product Type just Changed
if(null !== $quote){ /* Disable All payment gateway exclude Your payment Gateway*/ if($method_instance->getCode() =='cashondelivery'){ $items= $quote->getAllVisibleItems(); foreach ($items= as $eachitem) { if($eachitem->getProductType()=='downloadable'): $result->isAvailable = false; break; endif; } } }