3

We have only one online payment service for the customer, how to enable bank transfer only for admin order creation?

2
  • do u want to enable a bank transfer payment method in frontend or backend Oct 2, 2020 at 5:24
  • Backend only not for Customer
    – zus
    Oct 2, 2020 at 5:27

2 Answers 2

3

To enable a "payment method" only for admin can you please refer the below link

  1. Magento2: How to add a payment method to admin create order?

  2. https://blog.e-zest.com/making-payment-method-visible-only-for-admin-in-magento-2

It's worked for me, Try the below one

app/code/Gta/AdminPay/registration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Gta_AdminPay',
    __DIR__
);

app/code/Gta/AdminPay/etc/module.xml

<?xml version="1.0"?>
<config xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Gta_AdminPay" setup_version="1.0.1"></module>
</config>

app/code/Gta/AdminPay/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="gta_payment_filters" instance="\Gta\AdminPay\Observer\PaymentMethodAvailable" />
    </event>
</config>

app/code/Gta/AdminPay/Observer/PaymentMethodAvailable.php

<?php
namespace Gta\AdminPay\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\App\Request\DataPersistorInterface;
use Magento\Framework\App\ObjectManager;

class PaymentMethodAvailable implements ObserverInterface
{
    public function __construct(\Psr\Log\LoggerInterface $logger
     )
    {
        $this->_logger = $logger;     
    }
    
    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());

        /* Enable All payment gateway  exclude Your payment Gateway*/
        if ($method_instance->getCode() == 'checkmo') {
            $result->setData('is_available', false);
        }
        else
        {
            $result->setData('is_available', true);
        }
    }
}
8
  • The first point you shared second solution which file i need to edit for bank transfer
    – zus
    Oct 2, 2020 at 5:52
  • you need to create a di.xml file prnt.sc/uroaz3 Oct 2, 2020 at 5:57
  • After creating the module and enable Check / Money Order, It's showing on frond-end also. My module : app/code/Gta/AdminPay/etc/di.xml => justpaste.it/9jtbn, app/code/Gta/AdminPay/etc/module.xml => justpaste.it/2pupr, app/code/Gta/AdminPay/registration.php => justpaste.it/24mph, app/code/Gta/AdminPay/Plugin/Payment/Method/Checkmo/Available.php => justpaste.it/96fs0 Anything else i missed out?
    – zus
    Oct 2, 2020 at 8:36
  • After running the upgrade and static content deploy command still Check / Money Order display on front-end
    – zus
    Oct 2, 2020 at 9:21
  • Wait i will post my code Oct 2, 2020 at 9:29
2

If you need a payment option that is only available internally (admin area), we created an extension for that https://github.com/customgento/module-admin-payment-m2.

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.