Anzeigen bestimmter Zahlungsmethoden für Kundengruppen

7

Ich bin sehr neu im Magento-Checkout-Prozess, also verzeihen Sie meinen Mangel an Wissen. Gibt es eine Möglichkeit, bestimmte Zahlungsoptionen für bestimmte Kundengruppen anzuzeigen? Zum Beispiel habe ich die "Bestellnummer" in "30-Tage-Guthabenkonto" geändert, aber dies ist nur für eine bestimmte Kundengruppe verfügbar, sodass es nur angezeigt werden soll, wenn der Benutzer angemeldet ist und Teil dieser Kundengruppe ist.

Nochmals Entschuldigung für meinen Mangel an Wissen, wenn Sie helfen können, wären Sie ein Lebensretter.

Vielen Dank

Adam Allen
quelle
Gegenstimme von mir ...
Amit Bera

Antworten:

9

Sie können dies mit Magento tun event observer,create an event on payment_method_is_activeund abhängig von der Kundengruppe die Zahlungsmethode deaktivieren und aktivieren:

Überprüfen Sie diesen Link: Implementierung der Zahlungsmethode pro Währung

und du brauchst do on some change in observer.php ich habe versucht zu beispielen und zu versuchen nach dir zu modifizieren

   public function filterpaymentmethod(Varien_Event_Observer $observer) {
        /* call get payment method */
        $method = $observer->getEvent()->getMethodInstance();
if(Mage::getSingleton('customer/session')->isLoggedIn()) {

 $roleId = Mage::getSingleton('customer/session')->getCustomerGroupId();
 $role = Mage::getSingleton('customer/group')->load($roleId)->getData('customer_group_code');

      if($method->getCode()=='purchaseorder'){
            $quote = $observer->getEvent()->getQuote();

            if($role == $yourcustomergroupid){
              $result = $observer->getEvent()->getResult();   
              $result->isAvailable = true;
              return;
            }else{
               $result = $observer->getEvent()->getResult();   
               $result->isAvailable = false;
            }
        }

     if($method->getCode()=='checkmo'){
            $quote = $observer->getEvent()->getQuote();

            if($role == $yourcustomergroupid){
              $result = $observer->getEvent()->getResult();   
              $result->isAvailable = true;
            return;
            }else{
              $result = $observer->getEvent()->getResult();   
              $result->isAvailable = false;
            }
        }
}

}

Hinweis: Wenn Sie keine Kundengruppen-ID aus der Sitzung erhalten, müssen Sie den Kunden anhand der Kunden-ID (die aus der Sitzung stammen muss) laden, um die Kundengruppe aus der Sitzung abzurufen. Versuchen Sie Folgendes:

/programming/9242390/showing-which-group-a-customer-belongs-to-in-magento http://xhtmlandcsshelp.blogspot.in/2010/12/get-customer-group-id -in-magento.html

Lassen Sie mich wissen, wenn Sie Verwirrung haben

Amit Bera
quelle
lege ich den Beobachter in ein anderes Verzeichnis namens model?
Adam Allen
1
Sie müssen Observer.php unter app / code / local / Bh / ZeroSubtotalpaymentmethod / Model / ... erstellen und einfach die Filterzahlungsmethode ändern
Amit Bera
1
Erstellen Sie auch die Konfiguration unter / etc. Muss ich auch in der App / etc / modules / eine neue XML-Datei erstellen? Vielen Dank auch für Ihre Geduld :)
Adam Allen
config.xml unter app / code / local / Bh> ZeroSubtotalpaymentmethod> etc.
Amit Bera
1
Erstellen Sie Bh_ZeroSubtotalpaymentmethod.xml in der App / etc / modules /
Amit Bera
4

In Magento 2

Lassen Sie uns ein Modul erstellen. Schritt 1) ​​Erstellen Sie solche Ordner.

app/code/Pits/PaymentMethod/etc/
app/code/Pits/PaymentMethod/Observer/

Schritt 2) Deklarieren Sie Ihr Modul

app/code/Pits/PaymentMethod/etc/module.xml.

Fügen Sie den folgenden Code in die obige Datei ein.

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

Schritt 4) Erstellen Sie eine Registrierungsdatei. app / code / Pits / PaymentMethod / registration.php Fügen Sie den folgenden Code ein.

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

Schritt 5) Führen Sie den folgenden Befehl in der Befehlszeile aus

PHP Bin / Magento Modul: Aktivieren Sie Pits_PaymentMethod

 php bin/magento setup:upgrade

Schritt 6) Lässt die Datei events.xml erstellen

app / code / Pits / PaymentMethod / etc / events.xml

Fügen Sie den folgenden Code ein.

<?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="Pits_PaymentMethod_DisabledPgByCustomergroup" instance="Pits\PaymentMethod\Observer\DisabledPgByCustomergroup" />
    </event>
</config>

Schritt 7) Erstellen Sie eine Beobachterdatei

app/code/Pits/PaymentMethod/Observer/DisabledPgByCustomergroup.php.php



<?php
namespace Pits\PaymentMethod\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\App\Request\DataPersistorInterface;
use Magento\Framework\App\ObjectManager;
class DisabledPgByCustomergroup implements ObserverInterface
{
    public function __construct(\Psr\Log\LoggerInterface $logger)
    {
        $this->_logger = $logger;
    }
    /**
     *
     * @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();
        $this->_logger->info($method_instance->getCode());
        /* If Cusomer  group is match then work */
        if (null !== $quote && $quote->getCustomerGroupId() != 4) {
            /* Disable All payment gateway  exclude Your payment Gateway*/
            if ($method_instance->getCode() == 'purchaseorder') {
                $result->setData('is_available', false);
            }
        }
        /*else{
        if($method_instance->getCode() =='purchaseorder'){
        $result->setData('is_available', true);

        }
        }*/
    }
}

Schritt 8) Führen Sie dies in der Befehlszeile aus

php bin/magento setup:upgrade
Divya Muralidharan
quelle