How to restrict a selected payment method in Magento 2?
Event: etc\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="bg_customer_group_payment_filters" instance="\Bg\PaymentRestriction\Observer\PaymentMethodAvailable" />
</event>
</config>
Observer: Bg\PaymentRestriction\Observer\PaymentMethodAvailable.php
<?php
namespace Bg\PaymentRestriction\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\App\Request\DataPersistorInterface;
use Magento\Framework\App\ObjectManager;
use Bg\PaymentRestriction\Helper\Data as DataHelper;
class PaymentMethodAvailable implements ObserverInterface
{
/**
* @var \Magento\Customer\Model\Session
*/
private $customerSession;
/**
* @var \Bg\PaymentRestriction\Helper\Data
*/
private $dataHelper;
/**
* @var \Magento\Customer\Api\GroupRepositoryInterface
*/
private $groupRepository;
public function __construct(
\Psr\Log\LoggerInterface $logger,
DataHelper $dataHelper
) {
$this->_logger = $logger;
$this->dataHelper = $dataHelper;
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
$result = $observer->getEvent()->getResult();
$method_instance = $observer->getEvent()->getMethodInstance();
$quote = $observer->getEvent()->getQuote();
$this->_logger->info($method_instance->getCode());
$activeRule = $this->dataHelper->getPaymentMethod();
/* Enable All payment gateway exclude Your payment Gateway*/
if ($method_instance->getCode() == 'checkmo') {
$result->setData('is_available', false);
} else {
$result->setData('is_available', true);
}
}
}
I got a value like this in frontend.