Paypal Plus: "Entschuldigung. PayPal Plus ist momentan nicht verfügbar."

Ich möchte in unserem CE 4.10.7 Shop gerne Paypal Plus nutzen und habe dazu das offzielle Modul (v2.0.5) installiert.

Zuvor habe ich unter https://developer.paypal.com eine REST API app erstellt und die entsprechenden Credentials im Modul eingetragen.

Es ist aktuell die einzige aktive Zahlungsart im Test-Shop und kann im Warenkorb auch schön ausgewählt werden. Doch wenn ich dann auf “Weiter” klicke, läuft die Sache endlos ins Leere und es erscheint folgendes:

Der API-Call geht raus und wird von Paypal auch akzeptiert, es ist definitiv kein Auth-Problem. Die Antwort vom Paypal-Support war sinngemäß: “Bei uns sieht alles super aus, fragen Sie OXID.”

Ich habe mal das Paypal-Logfile auf DEBUG geschaltet und durchsucht. Ich erkenne da nix auffälliges - Anfrage geht raus, Bestätigung kommt zurück. Ich bin so ein bisschen mit meinem Latein am Ende.

Irgendwelche Ideen, wo ich noch schauen sollte?

Zufällig Sandbox?
Ich habe vor paar Wochen pp+ in einem Shop eingerichtet und da hat sandbox Modus nicht funktioniert, im live Modus ging aber alles anstandslos.

Leider sowohl Sandbox als auch Live. :frowning:

Was ich noch beobachtet habe: Wenn man eine der Zahlmöglichkeiten (Paypal, Lastschrift, Kreditkarte) in dem Paypal-Plus-“Fenster” ausgewählt hat und “Weiter zum nächsten Schritt” klickt, lädt er kurz und zeigt nochmal die Zahlarten an (Auswahl wird aber beibehalten). Erst beim erneuten Klick auf “Weiter zum nächsten Schritt” lädt er dann ewig bis zu obiger Fehlermeldung.

Eventuell relevant, vielleicht auch nicht.

Oh toll, in einem frisch aufgesetzten oxid6-Shop funktioniert es tadellos. :expressionless:

Wird wohl Zeit für ein Upgrade…

/ Okay, es interferiert mit einem von uns selbst entwickelten Modul. Damit kann ich es weiter einkreisen. Falls es relevanten Erkenntnisgewinn gibt, poste ich das hier.

2 Likes

Okay, ist gelöst - es lag tatsächlich an einem unserer eigenen Module.

Wir verkaufen 90% regional und nicht deutschlandweit. Daher macht es für uns Sinn, einige Liefermöglichkeiten nur regional anbieten zu können.

Kurzerhand habe ich das Land “Regional” erstellt und im Controller payment::init() überladen. Letzteres wird nämlich auf Seite 3 des Warenkorbes aufgerufen, wenn klar ist, wohin geliefert werden soll. Dort wird die PLZ der gewünschten Lieferadresse geprüft und gegen eine Liste von regionalen PLZ geprüft. Ist die PLZ regional, wird die oxAddress->countryid überschrieben. Hat der Kunde keine separate Lieferadresse angegeben, wird oxUser->countryid überschrieben.

Die Lieferarten wurden dann nach Ländern aufgeschlüsselt geschaltet (Deutschland oder Regional).

Das Problem war, dass am Ende oxUser->save() aufgerufen wurde und Paypal mit dieser Veränderung nicht zurecht kam.

Also habe ich unser Modul sauberer gelöst und nun wird der User entweder in die Gruppe “Regionaler Kunde” oder “Überregionaler Kunde” verschoben, wenn payment::init() aufgerufen wird. Die Liefer- und Zahlmöglichkeiten nach Gruppe aufschlüsseln geht ja auch von Haus aus.

Falls es interessiert, hier noch ein bisschen Code, wie der Controller payment überladen wurde:

<?php
class pfl_aundo_payment extends pfl_aundo_payment_parent
{
    /**
     * Executes parent method parent::init().
     * Changes the user's groups based on user's zipcode to enable local delivery.
     */
    public function init()
    {
        parent::init();

        if($oUser = $this->getUser())
        {
            $oUser->setGroupsAccordingToZip();
        }
    }

}

Und die neue Funktion für oxUser:

<?php
class pfl_aundo_oxuser extends pfl_aundo_oxuser_parent  {

    public function setGroupsAccordingToZip()
    {
        // init locals
        $oConf              = $this->getConfig();
        $aLocalZips         = $oConf->getConfigParam('pfl_aundo_local_zips');
        $localgroupid       = $oConf->getConfigParam('pfl_aundo_local_groupid');
        $nonlocalgroupid    = $oConf->getConfigParam('pfl_aundo_nonlocal_groupid');

        // get relevant zip code
        if($this->getSelectedAddressId() != NULL)
        {
            // delivery address is set
            $delZip = $this->getSelectedAddress()->oxaddress__oxzip->value;
        }
        else
        {
            // no delivery address set
            $delZip = $this->oxuser__oxzip->value;
        }

        // add/remove to/from corresponding group
        if(in_array($delZip, $aLocalZips))
        {
            $this->addToGroup($localgroupid);
            $this->removeFromGroup($nonlocalgroupid);
        }
        else
        {
            $this->addToGroup($nonlocalgroupid);
            $this->removeFromGroup($localgroupid);
        }
    }
}

Paypal funktioniert seitdem tadellos und auch unsere bisherige Aufteilung Regional/Überregional klappt hervorragend.

Manchmal muss man es erst hier aufschreiben, um drauf zu kommen. :smiley:

2 Likes