Magento, PayPal und der mobile Checkout mit Smartphones

Veröffentlicht von itabs 4. Mai 2013 2 Kommentare 6093 Mal angesehen

PayPal gehört schon seit längerer Zeit zu den etablierten Zahlarten im E-Commerce, aus diesem Grund muss man sich sicherlich die Frage nach dem Sinn oder Unsinn einer PayPal Integration nicht mehr stellen, auch wenn es sicherlich vereinzelt Branchen und Zielgruppen gibt, bei denen PayPal auf eine gewisse Ablehnung stößt. In vielen Fällen ist aber PayPal eine hervorragende Möglichkeit, die Conversions zu erhöhen und bei akzeptablen Gebühren profitiert auch der Shop-Betreiber, wenn er diese Payment-Methode mit ins Programm aufnimmt.

Auch wenn Magento mittlerweile zum selben Konzern wie PayPal gehört, nämlich eBay, ist die Integration in manchen Stellen doch ein wenig holprig. In diesem konkreten Fall geht es darum, wie man den mobilen Checkout in seinem Magento-Shop „aktivieren“ kann, da es von Haus aus doch ein paar Hürden gibt. Beginnen wir aber einfach mit einer Schritt für Schritt Integration innerhalb von Magento.

 

PayPal konfigurieren und aktivieren

Ich beziehe mich auf die aktuellste Version von Magento, sprich die 1.7.0.2. In älteren Versionen ist das Handling ein wenig anders, das Prinzip ist aber über die Versionen hinweg das selbe geblieben. Um PayPal zu konfigurieren, muss man den Menüpunkt System -> Konfiguration -> Zahlungsarten öffnen. Dort gibt es anschließend den Oberpunkt „PayPal Payment Solutions“ und hier muss man nun bei „Website Payment Standard“ auf  configure klicken.

paypal-1Hier reicht es nun aus die E-Mail Adresse des PayPal Accounts zu hinterlegen und bei Enable the Solution die Auswahl. ja zu stellen. Anschließend kann bei Magento im Checkout als Zahlungsweise ebenfalls PayPal ausgewählt werden und alles weitere funktioniert „out of the box“.

 

Und was ist mit Smartphones?

Interessant wird es nun, wenn man mit einem Smartphone durch den Checkout springt. Mobile ist ein immer wichtigeres Thema und als Shop-Betreiber sollte man neben einer mobil optimierten Magento Version auch einen mobilen Checkout anbieten um die Quote der Kaufabbrüche zu senken. Grundsätzlich ist die „Desktop-Variante“ von PayPal alles andere als „Smartphone tauglich“, auch wenn technisch betrachtet alles problemlos funktioniert, die Usability lässt aber zu wünschen übrig.

PayPal bietet einen mobilen Checkout an, im Gegensatz zu den vom Support getätigten Aussagen benötigt man hierfür auch nicht die PayPal Express Version. PayPal prüft beim Aufruf der Payment-Seite den Gerätetyp und leitet anschließend auf das richtige Endgerät weiter. Nur scheint dies bei Magento von Haus aus direkt nicht zu funktionieren. Die Ursache liegt in der Übermittlung der Informationen. Wenn in Magento eine Bestellung per PayPal getätigt wird, landet man anschließend auf einer „Redirect Seite“ die Informationen beinhaltet und an PayPal „übermittelt.

paypal-2

 

Innerhalb dieser Weiterleitungsseite werden in Form eines Formulars mit Hidden-Fields Werte gesammelt und an PayPal übergeben, was dann wie folgt aussieht:

<form action=“https://www.paypal.com/webscr“ id=“paypal_standard_checkout“ name=“paypal_standard_checkout“ method=“POST“><div><input name=“form_key“ type=“hidden“ value=“XXX“ /></div><input id=“business“ name=“business“ value=“papypal@example.com“ type=“hidden“/>
<input id=“invoice“ name=“invoice“ value=“YYY“ type=“hidden“/>
<input id=“currency_code“ name=“currency_code“ value=“EUR“ type=“hidden“/>
<input id=“paymentaction“ name=“paymentaction“ value=“sale“ type=“hidden“/>
<input id=“return“ name=“return“ value=“http://www.example.compaypal/standard/success/“ type=“hidden“/>
<input id=“cancel_return“ name=“cancel_return“ value=“http://www.example.compaypal/standard/cancel/“ type=“hidden“/>
<input id=“notify_url“ name=“notify_url“ value=“http://www.example.compaypal/ipn/“ type=“hidden“/>
<input id=“bn“ name=“bn“ value=“Varien_Cart_WPS_CH“ type=“hidden“/>
<input id=“cpp_header_image“ name=“cpp_header_image“ value=“http://www.example.com/media/example/logo.jpg“ type=“hidden“/>
<input id=“item_name“ name=“item_name“ value=“ABCDEFG“ type=“hidden“/>
<input id=“lc“ name=“lc“ value=“de_DE“ type=“hidden“/>
<input id=“charset“ name=“charset“ value=“utf-8″ type=“hidden“/>
<input id=“amount“ name=“amount“ value=“22.33″ type=“hidden“/>
<input id=“tax“ name=“tax“ value=“9.47″ type=“hidden“/>
<input id=“shipping“ name=“shipping“ value=“0.00″ type=“hidden“/>
<input id=“discount_amount“ name=“discount_amount“ value=“0.00″ type=“hidden“/>
<input id=“cmd“ name=“cmd“ value=“_ext-enter“ type=“hidden“/>
<input id=“redirect_cmd“ name=“redirect_cmd“ value=“_xclick“ type=“hidden“/>
<input id=“city“ name=“city“ value=“asdasd“ type=“hidden“/>
<input id=“country“ name=“country“ value=“DE“ type=“hidden“/>
<input id=“email“ name=“email“ value=“customer@example.com“ type=“hidden“/>
<input id=“first_name“ name=“first_name“ value=“Vorname“ type=“hidden“/>
<input id=“last_name“ name=“last_name“ value=“Nachname“ type=“hidden“/>
<input id=“zip“ name=“zip“ value=“123456″ type=“hidden“/>
<input id=“state“ name=“state“ value=“RR“ type=“hidden“/>
<input id=“address1″ name=“address1″ value=“asdsada“ type=“hidden“/>
<input id=“address2″ name=“address2″ value=“a“ type=“hidden“/>
<input id=“address_override“ name=“address_override“ value=“1″ type=“hidden“/>
</form>

Sprich, Magento übergibt eine Menge an Informationen wie Preis, Produkt, Adresse des Kunden etc. Der Knackpunkt liegt nun darin, dass der mobile Checkout von PayPal im Gegensatz zur „Desktop-Variante“ nicht alle Informationen auch tatsächlich verarbeiten kann. Sendet man Werte mit denen der mobile Checkout nichts anfängt, leitet PayPal automatisch zur „Desktop-Variante“ weiter. Und dies ist der Effekt, den man standardmäßig in Magento hat. Konkret geht es dabei um folgende Zeile:

<input id=“discount_amount“ name=“discount_amount“ value=“0.00″ type=“hidden“/>

Der mobile PayPal Bezahlvorgang ist nicht in der Lage diese zu verarbeiten, weswegen man als Kunde mit seinem Smartphone immer auf der klassischen Variante von PayPal landet. Entfernt man diese Zeile, klappt der Vorgang mit einem Smartphone wunderbar und PayPal leitet auf die Smartphone Variante weiter. Für was ist aber nun dieser Wert verantwortlich? Definiert man als Shop-Betreiber Warenkorb-Preisregeln (Gutscheine, Rabatte im Warenkorb etc.) ist dies ein Discount, sprich ein Rabatt. Dieser kann explizit an PayPal übermittelt werden, wodurch man auf der PayPal Seite dann den Rabatt angezeigt bekommt. Tut man dies nicht, sieht man auf der PayPal Seite auch keinen Rabatt. Dies ist meiner Meinung nach nicht ganz so tragisch, da ja die Endsumme, d.h. die Summe die der Kunde bezahlen wird, soweit korrekt übermittelt wird.

 

Was muss ich ändern?

Ohne an dieser Stelle zu Tief in die Entwickler-Sicht zu springen: Unter app/code/core/Mage/PayPal/Block/Standard/ gibt es die Datei Redirect.php die letztendlich alle Informationen sammelt, das Formular samt den Hidden Fields generiert und zurück liefert. An dieser Stelle kann man nun ansetzen und den discount_amount gar nicht erst ausgeben. Da jedoch auf der Desktop-Variante diese Information kein Problem darstellt, ist es meiner Meinung nach sinnvoll zu differenzieren ob ein Smartphone einkauft oder nicht. Je nach Projekt-Setup kann dies anhand vom Store bzw. StoreView geschehen, oder durch eine direkte Prüfung des Endgeräts.

 

Was ist die Alternative?

Alternativ hierzu kann man auch PayPal Express verwenden, in diesem Fall treten die oben beschriebenen Probleme nicht auf und man hat letztendlich gar keinen Customizing-Aufwand. Nachteilig hierbei ist letztendlich nur, dass der Bezahlprozess anders aufgebaut ist im Vergleich zu PayPal Standard. Das kann, muss aber kein Nachteil sein.

Hier sind 2 Kommentare

  1. tom
    - 29. Mai 2013
      -   Antworten

    Hallo Herr Steireif, herzlichen Dank für Ihren tollen Artikel. Ihre Lösung sollte mein Problem beantworten.

    Sie Schreiben:

    „Redirect.php die letztendlich alle Informationen sammelt, das Formular samt den Hidden Fields generiert und zurück liefert. An dieser Stelle kann man nun ansetzen und den discount_amount gar nicht erst ausgeben.“

    Ich bin mir nun nicht sicher was ich genau in der Datei Redirect.php an Code auskommentieren/hinzufügen sollte damit discount_amount nicht ausgegeben wird.

    Haben Sie hier einen Hinweis was genau gemacht werden muss?

    Herzlichen Dank!

  2. - 8. Juni 2013
      -   Antworten

    Hallo Tom,

    es geht um die folgende Stelle:

    foreach ($standard->getStandardCheckoutFormFields() as $field=>$value) {
    $form->addField($field, ‚hidden‘, array(’name’=>$field, ‚value’=>$value));
    }

    Vereinfacht gesagt werden dort alle Informationen gesammelt und in ein Array gepackt. Ich habe bei einem Projekt z.B. folgende Erweiterung:

    foreach ($standard->getStandardCheckoutFormFields() as $field=>$value) {
    if($store_code != ‚mobile‘ AND $field != ‚discount_amount‘) {
    $form->addField($field, ‚hidden‘, array(’name’=>$field, ‚value’=>$value));
    }
    }

    Da musst du dir eben eine entsprechende Abfrage bauen…

Schreibe einen Kommentar zu tom Antwort verwerfen

  • Onlineshop Erstellung

    Das kann so auf keinen Fall pauschal beantworten. …

  • Dominik Karch

    Ich finde die Frage was ein Onlineshop kostet wirk …

  • Alexander Steireif

    Die Kosten hängen letztendlich von der gewählten …

  • Pierre

    Cool mal wieder was neues, wie sind da die Kosten? …

  • Bernd

    Hallo ich würde wissen was ich bei Uses per Coupo …