Zahlungsarten im Plugin inaktiv setzen / set payment mean to inactive in plugin

Hallo,

in einem unserer Plugins benötige ich die Möglichkeit abhängig von bestimmten Vorgängen Zahlungsarten auf inaktiv zu setzen.

Das ganze ist im Frontend und der Hook ist z.B. am ‘Enlight_Controller_Action_Frontend_Checkout_shippingPayment’ Event.

Dort würd ich gern dynamisch den Wert für $_SESSION[‘sPayments’][1][‘active’] auf 0 setzen.
Ziel ist es dem Kunden nur noch verfügbare Zahlungsmethoden anzuzeigen.

Ist das programatisch möglich oder muss ich den Umweg über eigene Session variablen und Filter in template blocks gehen?

Wenn du eine aktuelle Shopware Version einsetzt solltest du dich auch Plugintechnisch an das Riskmanagement andocken können, das filtert dir dann die unerwünschten Zahlungsweisen von Haus aus raus.

 

Grüße Matthias

Hallo Matthias,

danke das du dir die zeit für eine Antwort genommen hast. Ich hätte dazu zwei Fragen.

  1. Ab welcher Version ist dies dabei? Das plugin was ich erweitere war bislang auch für SW4 lauffähig, ich nehme an das wird dann nicht mehr möglich sein.
  2. Gibt es dazu irgendwo eine Doku wie man sich da ‘ran hängt’? Sehr gern auch in Englisch.

Soweit schonmal danke für den Hinweis.

Hallo,

auch das ist im Klarna-Plugin enthalten. Dort haben die “sManageRisks”-Methode gehookt:
 

        $this->subscribeEvent(
            'sAdmin::sManageRisks::after',
            'onAfterManageRisks'
        );

    /**
     * @param Enlight_Hook_HookArgs $args
     * @return bool|null
     */
    public function onAfterManageRisks($args)
    {
        $args = $args->getArgs();
        $userData = $args[2];

        if (empty($userData['billingaddress']['company']) && empty($userData['shippingaddress']['company'])) {
            return null; // Nichts machen
        }

        $paymentIds = $this->getKlarnaPaymentIds();
        $currentPaymentId = $args[0];
        if (!in_array($currentPaymentId, $paymentIds)) {
            return null;
        }

        if (!empty($userData['additional']['country']['countryiso'])) {
            $country = $userData['additional']['country']['countryiso'];
            $countries = array('SE', 'FI', 'NO', 'DK');
            if (in_array($country, $countries)) {
                if ($currentPaymentId == $this->getInvoicePaymentId()) {
                    return null;
                } else {
                    return true; //Zahlungsart sperren
                }
            } else {
                return true;
            }
        }
    }

Gruß Heiner

Auch hier danke für den Hinweis.
ich werde mir den hook ansehen und schauen ob ich damit vorran komme.