How to Show Payment Methods for Particular Categories in Magento 2

 Steps to Show Payment Methods for Particular Categories in Magento 2:

Step 1: First, create an events.xml file inside the etc folder at the below file path


app\code\Vendor\Extension\etc


Now add the code as mentioned below.


<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="payment_method_is_active" instance="Vendor\Extension\Observer\ActivePaymentMethod" />

    </event>

</config>

Step 2: In the second step, create the ActivePaymentMethod.php file inside the model folder at the following path


app\code\Vendor\Extension\Observer


Then add the code as follows.


<?php

namespace Vendor\Extension\Observer;

use Magento\Framework\Event\ObserverInterface;

use Magento\Catalog\Api\ProductRepositoryInterface;

class ActivePaymentMethod implements ObserverInterface

{

    protected $_cart;

    protected $_checkoutSession;

    protected $productRepository;

    public function __construct(

        \Magento\Checkout\Model\Cart $cart,

        \Magento\Checkout\Model\Session $checkoutSession,

        ProductRepositoryInterface $productRepository

    )

    {

        $this->_cart = $cart;

        $this->_checkoutSession = $checkoutSession;

        $this->productRepository = $productRepository;

    }

    /**

     * Execute observer

     *

     * @param \Magento\Framework\Event\Observer $observer

     * @return void

     */

    public function execute(\Magento\Framework\Event\Observer $observer)

    {

        $quote = $this->getCheckoutSession()->getQuote();

        $categoryID = "Add your category ID";

        $items = $quote->getAllItems();

        $flag = false;

        foreach($items as $item)

        {

            $product = $this->getProduct($item->getProductId());

            $categoryIds = $product->getCategoryIds();

            if(in_array($categoryID, $categoryIds))

            {

                $flag = true; 

                break;

            }

        }

 

        if($flag == false && $observer->getEvent()->getMethodInstance()->getCode()=="Enter Your Payment Method Code")

        {

            $checkResult = $observer->getEvent()->getResult();

            $checkResult->setData('is_available', false); 

        }

    }

    public function getProduct($productId)

    {

        return $product = $this->productRepository->getById($productId);

    }

    public function getCart()

    {        

        return $this->_cart;

    }

    public function getCheckoutSession()

    {

        return $this->_checkoutSession;

    }

}

Comments

Popular posts from this blog

Add Admin User name and Action name in Order Comment Section through Action Performed from Sales Order Grid in Magento 2

How to Update Product Stock Programmatically in Magento 2

How to Set and Get Cookie in Magento 2