Neu STRIPE Zahlungsplugin für JTL-Shop5

karabey

Sehr aktives Mitglied
28. November 2012
926
75
Schwere Bugs im Ninepoint Stripe-Plugin in Version 3.0.5!

Nachdem ich dieses Plugin über mehrere Versionen hinweg beta-getestet habe und es eigentlich gut (gerade von der UI her) finde, muss ich nun leider doch davor warnen. Die aktuelle Plugin-Version 3.0.5 hat gleich einen ganzen Strauß an größeren Bugs und der Entwickler Ninepoint legt (im Moment?) keinen Fokus mehr auf deren Behebung, da das ganze Team mit der Migration ihres gerade an JTL verkauften Marketplace- Connector beschäftigt ist.

Hier die Liste der mir aktuell bekannten, unbehobenen Bugs bzw. Unzulänglichkeiten:
  1. Der wohl massivste Fehler: das Plugin stürzt immer mal wieder im Zahlungsprozess ab, so dass die Zahlung zwar durchgeführt, die Bestellung aber nicht abgeschicktwird. Das scheint ausschließlich das Stripe-eigene Wallet "Link" zu betreffen, lässt sich mit dessen Deaktivierung im Stripe-Backend also umgehen - allerdings ist diese Zahlungsart den Statistiken zufolge recht (bei uns ca. 20% der Zahlungen über Stripe) beliebt, weil der Kunde die KK-Daten nicht erneut eingeben muss (und war bis vor Kurzem auch noch günstiger als normale KK-Zahlungen).
    • Der Kunde sieht manchmal eine weiße Seite, bekommt keine Bestellbestätigung im Browser oder per Mail und die Artikel liegen noch in seinem Warenkorb, irgendwann beschwert er sich dann darüber, dass er keine Ware bekommt...
    • Manchmal wirft das Plugin den Kunden auch mit der Fehlermeldung "This PaymentIntent's amount could not be updated because it has a status of succeeded..." in den Warenkorb zurück, führt im Hintergrund aber die Zahlung durch! Der Kunde versucht es dann nochmal und nochmal, dabei löst er jedes Mal eine Zahlung aus, bis das Limit seiner Kreditkarte erreicht ist.... so geschehen, Kunde stocksauer.
      Den Anhang 130315 betrachten
    • Der Händler findet solche Fälle nur, wenn er die Zahlungen im Stripe-Backend einzeln durchgeht und nach denen schaut, die keine "Order-ID: 12345678", sondern noch das Stripe-interne Payment Intent Object "pi_3Sm0yd*******Re2r1Y8EjyXM" in der Description stehen haben. Die Bestellung lässt sich nicht immer über die Metadaten rekonstruieren und dann manuell anlegen, meist hilft nur eine Erstattung und Entschuldigung an den Kunden.
  2. Seit Einführung der Version 3 verfügt das Stripe-Plugin über eine Express-Checkout-Funktion.
    • Die Nutzung dieser hat (wie solche Funktionen immer) zur Folge, dass die restlichen Bestellschritte übersprungen werden, mit den üblichen Problemen: Lieferadressen werden nicht vom Kunden überprüft und sind u.U. falsch, das Kommentarfeld wird nicht zum Ausfüllen angeboten und die Zustimmung zu AGBs, Datenschutz, Widerrufsrecht, Altersüberprüfung, Übermittlung der E-Mail an Versanddienstleister usw. wird gar nicht erst abgefragt.
    • Schlimmer wiegt aber, dass die Google und Apple Pay Buttons aus dem normalen Bezahlfenster (ohne Express nach Abschicken der Bestellung) entfernt wurden und diese äußerst beliebten Zahlungsarten (bei uns fast 40% der Stripe-Zahlungen) bei Deaktivierung der Express-Funktion damit gar nicht mehr angeboten werden.
  3. Das Stripe-Plugin wirft in dieser Version massenhaft PHP-Fehler.
  4. Kein Bug, aber eine Unzulänglichkeit: das Stripe-Plugin legt bei der Zahlungsabwicklung kein Kundenobjekt in Stripe an bzw. benutzt es wieder, wie das von Stripe eigentlich gedacht ist, sondern bucht jede Zahlung wieder als neuer „Guest“ obwohl die kompletten Adressdaten übergeben werden. Das hat zur Folge, dass die Betrugsprävention von Stripe trotzdem schlechter greift und den Kunden ggf. öfter mit 3DS-Abfragen nervt oder auch mal Zahlungen ablehnt, weil die Risiko-Score ohne die Verbindung zu früheren Zahlungen höher ist.
    Für den Händler ist die Handhabung im Backend dadurch nicht ganz so komfortabel (mittlerweile verknüpft Stripe über die Kunden-E-Mail aber auch Guest Accounts, wodurch das nicht mehr so tragisch ist) und die Kunden-Statistiken im Stripe-Backend sind nutzlos.
    Die richtige Nutzung von Kundenobjekten wäre aber die Voraussetzung für die Tokenisierung (also die Wiederverwendung von bei Stripe sicher gespeicherten Kreditkartendaten ohne neue Eingabe), die im nicht mehr existenten customweb/SellXed-Stripe-Plugin mal ein echtes Killer-Feature für Stammkunden war… das Feature scheint Ninepoint aber leider sowieso nicht zu verfolgen.

  5. Das Plugin führt (auch schon in früheren Versionen) bei JEDEM einzelnen Seitenaufruf im Shop (auch wenn die nichts mit der Zahlung zu tun hat) eine synchrone Abfrage an die Stripe-API durch. Mit dem Tideways-Profiler lässt sich wunderbar beobachten, dass die knappe 300ms dauert und die Ladezeit jeder einzelnen Seite um diese 300ms verlangsamt. Der JTL-Shop ist gerade wegen der ganzen nötigen Plugins auch so schon kein Geschwindigkeitswunder, aber das ist einfach schlampige Plugin-Programmierung, die zu einer völlig unnötigen Verlangsamung des Shops führt. Und das mögen weder Google noch die Kunden.
    Den Anhang 130324 betrachten
    So eine Abfrage gehört asynchron ausgeführt, über einen Webhook (den das Plugin sogar für Lastschriften usw. hat) oder einen Cronjob implementiert, die unabhängig von der Shop-Oberfläche laufen und diese nicht beeinflussen. Leider nicht das erste Mal, dass ich sowas bei den teilweise hobby-artig programmierten Plugins für den JTL-Shop finde.
All diese Informationen (und viel mehr Details zum Debugging) sind Ninepoint teilweise seit Monaten bekannt, passiert ist wenig. Unterm Strich sind diese Bugs so schwerwiegend, dass wir jetzt die Reißleine gezogen und das Plugin rausgeworfen haben. Ich veröffentliche diese ganzen Details, damit euch das alles erspart bleibt.

Wir schauen uns jetzt das Plugin von Payever an, das auch Stripe anbinden kann und sogar kostenlos angeboten wird – das ist allerdings eine Middleware, nicht nur ein Plugin und hat auf den ersten Blick auch so manche Unzulänglichkeit...

Ich kann gut hier zustimmen. Bereits über 10 Emails geschrieben an die Firma, es gibt immer eine Antwort, aber keine Lösung. Mal Gemini und Claude über den Plugin Inhalt laufen lassen und beide haben die Gründe für die Fehler gefunden. Seltsam.


Code:
Pluginjtl_stripe_pluginServicesStripeService::authenticated {
    error: Could not connect to Stripe (https://api.stripe.com/v1/webhook_endpoints).  Please check your internet connection and try again.  If this problem persists, you should check Stripes service status at https://twitter.com/stripestatus, or let us know at support@stripe.com.nn(Network error [errno 6]: Could not resolve host: api.stripe.com)
}
Pluginjtl_stripe_pluginControllersIOController::ioRequest {
    error: Syntax error
}


###################
✦ In JTL-Shop 5 wird HOOK_IO_HANDLE_REQUEST bei jeder IO-Anfrage ausgelöst. Der IOController dieses Plugins versucht, jede dieser Anfragen als JSON zu dekodieren. Wenn eine andere Komponente des Shops oder ein externer Aufruf (z. B. ein
  Bot) ungültiges JSON an io.php sendet, fängt dieses Plugin die Exception ab und loggt sie als eigenen Fehler. Das ist ein Designfehler des Plugins, da es zu global agiert.

  Der Verbindungsfehler in StripeService::authenticated tritt auf, wenn der Server api.stripe.com nicht auflösen kann (DNS-Problem). Diese Methode wird an mehreren Stellen in der Bootstrap.php aufgerufen. Ich werde mir nun die
  Bootstrap.php genauer ansehen.


  ✓  ReadFile  Bootstrap.php

✦ Die Analyse der Log-Fehler hat folgende Ursachen ergeben:

  1. Fehler: IOController::ioRequest { error: Syntax error }
   * Ursache: Dieser Fehler tritt auf, weil das Plugin auf den globalen Hook HOOK_IO_HANDLE_REQUEST reagiert. Dieser Hook wird bei jeder IO-Anfrage im JTL-Shop ausgelöst (nicht nur für Stripe-relevante).
   * Technischer Hintergrund: Das Plugin versucht im IOController, den Inhalt jeder Anfrage mittels json_decode zu verarbeiten. Wenn eine Anfrage (z. B. von einem Bot, einem anderen Plugin oder einer fehlerhaften Browser-Anfrage) kein
     gültiges JSON enthält, wirft PHP einen Fehler. Das Stripe-Plugin fängt diesen ab und schreibt ihn in sein eigenes Log-File.
   * Fazit: Dies ist oft "Hintergrundrauschen". Das Plugin loggt hier Fehler, die eventuell gar nichts mit Stripe zu tun haben, sondern durch ungültige Aufrufe an den Shop verursacht werden.

  2. Fehler: StripeService::authenticated { error: Could not connect to Stripe ... Could not resolve host: api.stripe.com }
  In der Datei Services/StripeService.php ist die Prüfung so programmiert:

    1 public function authenticated(): bool
    2 {
    3     if (isset($_SESSION['isStripeCredentialsValid'])) {
    4         return $_SESSION['isStripeCredentialsValid'];
    5     }
    6
    7     try {
    8         (new WebhookEndpoint())->all(); // Hier wird Stripe kontaktiert
    9     } catch (\Exception $e) {
   10         $this->error(__METHOD__, ['error' => $e->getMessage()]); // Fehler wird geloggt
   11         return false; // Es wird false zurückgegeben, ABER NICHTS in der Session gespeichert
   12     }
   13
   14     $_SESSION['isStripeCredentialsValid'] = true; // Nur bei Erfolg wird es gespeichert
   15     return true;
   16 }

  Das Problem:
  Wenn die Verbindung fehlschlägt, wird der Fehler geloggt und false zurückgegeben. Da das Plugin den Fehlerzustand aber nicht in der Session speichert (kein "Negativ-Caching"), versucht es bei jedem einzelnen Seitenaufruf erneut, Stripe
  zu erreichen.

  3. Woher kommen die Aufrufe?
  Das Plugin ruft diese Prüfung in der Bootstrap.php bei fast jeder Interaktion auf:
   * Artikel-Detailseiten: Jedes Mal, wenn ein Kunde (oder ein Suchmaschinen-Bot) eine Produktseite aufruft.
   * Warenkorb: Bei jedem Aufruf des Warenkorbs.
   * Bestellvorgang: Bei jedem Schritt im Checkout.

  Wenn also 500 Mal eine Seite aufgerufen wird, während das DNS-Problem besteht, erzeugt das Plugin 500 Log-Einträge. Da auch Bots (Google etc.) ständig Seiten aufrufen, kommen diese hohen Zahlen schnell zustande.

####################
 

mesh

Sehr aktives Mitglied
30. Dezember 2017
702
92
Wir haben das Plugin jetzt eingebunden, aber bei uns wird für Stripe GooglePay und ApplePay nicht angezeigt. Der Support dreht sich leider mit uns im Kreis.

Hat noch jemand eine Idee was ich dafür Einstellen muss ? Bisher hatte ich diese Zahlarten mit Stripe noch nicht genutzt.
 
  • Gefällt mir
Reaktionen: karabey

abiber

Gut bekanntes Mitglied
25. Februar 2015
53
29
Hallo Frank,

meiner Meinung nach gibt es momentan kein brauchbares Plugin für Stripe - das von Ninepoint ist zu buggy, das von Payever nicht benutzerfreundlich genug und das von WaWiPay zu teuer. Wir haben gezwungenermaßen von Stripe zu Mollie gewechselt, da es da immerhin ein brauchbares Plugin und guten Support von Webstollen gibt. Hoffentlich dauerhaft. Oder halt PayPal, das wird auch gut direkt von JTL supported, ist aber leider auch teuer.

Viele Grüße
Alex
 
  • Gefällt mir
Reaktionen: karabey

simplybecause

Sehr aktives Mitglied
25. Dezember 2012
203
45
Hallo Alex,
danke für die Info.
Ich muß mal schau, was die Kreditkartenzahlung via PayPal kostet.
Mollie kommt nicht infrage wenn ich hier lese, wie die mit Kunden umgehen.
Wir hatten mal Payone, bevor wir zu JTL gewechselt sind. Das war leider auch nicht wirklich toll.
 

sjk

Sehr aktives Mitglied
16. Januar 2019
612
271
Mollie kommt nicht infrage wenn ich hier lese, wie die mit Kunden umgehen.
Ist natürlich auch selection bias.
Wir sind seit fast sieben Jahren bei Mollie und hatten noch nie einen Fehler in der Zahlungsabwicklung.
Einziger Kritikpunkt ist der umständlich zu erreichende Support. Vom Dashboard bekommt man da nur das Wiki verlinkt, dort ist irgendwo ein Kontaktformular versteckt.
Deshalb, wenn Mollie, direkt einen Account Manager anfordern und die Support Telefonnummer erfragen. Gibt es nämlich beides, sofern man für Mollie kein Kleinsthändler ist.
 

Martin1977

Sehr aktives Mitglied
1. August 2023
584
156
Kreditkartenabrechnung mit Paypal und JTL klappt bei mir nicht vernünftig. Da geht fast keine Zahlung durch. Bei Mollie klappt es ohne Probleme. Leider konnte da der Support auch nicht helfen. Das ist aber der Stand von vor 6 Monaten. Hat sich diesbezüglich vielleicht was verbessert ?
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Individuelle Software, Web & Automatisierung für den E-Commerce – Nodarix GmbH Dienstleistung, Jobs und Ähnliches 0
Neu Wir suchen Mitstreiter für ein gemeinsames Konfigurator-Projekt Dienstleistung, Jobs und Ähnliches 0
Neu Wir suchen Mitstreiter für ein gemeinsames Konfigurator-Projekt User helfen Usern - Fragen zu JTL-Wawi 6
In Diskussion Workflow für Erinnerungen an bevorstehende Lieferungen JTL-Workflows - Ideen, Lob und Kritik 0
Neu Wie stelle ich Retouren in JTL für DPD ein? JTL-ShippingLabels - Ideen, Lob und Kritik 1
Neu JTL Shop Plugin - BD Automatisierter Widerruf (Von Händler für Händler - Schluss mit Mail-Chaos & Spam-Sorgen!) Plugins für JTL-Shop 0
Wroker macht keinen abgleich für Kaufland JTL-Wawi 2.0 8
Neu Beta-Tester gesucht: Produktdaten aus Artikelfotos schneller für JTL/CSV vorbereiten Dienstleistung, Jobs und Ähnliches 0
Neu Kundengruppeneinstellungen für Mindestabnahme und Abnahmeintervall löschen User helfen Usern - Fragen zu JTL-Wawi 0
Neu Installationsdatei für JTL‑Wawi 1.9.6.5 Installation von JTL-Wawi 2
Wie lange braucht ihr aktuell für die Anlage eines neuen Artikels? JTL-Wawi App 3
Neu kostenlos: DHL Sendungsverfolgung für JTL-Wawi – Web-Dashboard mit Frühwarnsystem Schnittstellen Import / Export 0
In Diskussion Tool für Abrechnung von Fulfillment Dienstleistungen Arbeitsabläufe im Fulfillment Network 0
Neu Widerrufsbutton für JTL-Shop 4 Allgemeine Fragen zu JTL-Shop 17
Neu Keine Labels für Warenpost international über Packtisch JTL-ShippingLabels - Fehler und Bugs 8
Neu Laut Backend Shop Update für Shop 5.71 - Download nicht zu finden? Betrieb / Pflege von JTL-Shop 3
Neu Meta Shop seit September 2025: JTL-Lösung für neue Checkout-URL gesucht Allgemeine Fragen zu JTL-Shop 0
Angebliche externe Aufträge "für Rechnungserstellung freigeben" und Rechnungen erstellen. Gibt es dazu eine akzeptable Erklärung von JTL? JTL-Wawi 1.11 1
Neu Artikelname & Beschreibung angepasst für jeweiligen Marktplatz Arbeitsabläufe in JTL-Wawi 1
Neu OnFinds: KI-Suche für JTL-Shop mit fairer Abrechnung nach Artikelanzahl. 30 Tage kostenlos testen Plugins für JTL-Shop 0
API 2.1 für OnPrem? JTL-Wawi 2.0 6
Neu Dummy-ID oder Freiposition für Angebot mit mehrzeiliger Beschreibung JTL-Wawi - Ideen, Lob und Kritik 7
Neu Neue Kennzeichnungspflicht für Elektrogeräte (Altgeräterücknahme) Betrieb / Pflege von JTL-Shop 4
Neu Freelancer für JTL-Wawi, Shop & Prozessautomatisierung Dienstleistung, Jobs und Ähnliches 2
Neu Exportgenehmigung / Ausfuhrgenehmigung automatisch für Auslandskunden als Aufpreis Allgemeine Fragen zu JTL-Shop 2
Für Ihren SQL-Server wurde ein Service Pack zur Verfügung gestellt - nö, gelogen, wie kriege ich die Meldung weg? JTL-Wawi 1.11 15
Neu Ab welcher JTL Wawi Version ist der OnPremise REST API Endpoint POST /v2/returns oder POST /v1/returns für Create Return verfügbar? Schnittstellen Import / Export 0
Neu Seller2Go – Mobile App & JTL-Plugin für Bestellungen, Support und Produktmanagement Plugins für JTL-Shop 0
Neu Neues Plugin: Erweiterter Widerrufsbutton für JTL-Shop Plugins für JTL-Shop 9
JTL-Worker 2.0 - Einrichtung als Dienst - Auffälligkeiten und Problemlösungen für manche JTL-Wawi 2.0 3
Neu Muss man für DHL Versenden 4.0 einen neuen Benutzer bei DHL anlegen? JTL-ShippingLabels - Ideen, Lob und Kritik 2
Neu Retourenetikett für Briefe kann unter Internetmarke 2.0 nicht erstellt werden JTL-ShippingLabels - Fehler und Bugs 5
Neu Neue Tracking-URL für DPD JTL-ShippingLabels - Fehler und Bugs 4
AboutYou keine Felder für GPSR Daten SCX-(Ninepoint)-Anbindungen 0
globale Angebotsvorlage anpassen für eBay Angebote "Artikelspezifisch" JTL-Wawi 1.11 0
Neu Connectorupdates für Shopware 6.7.7 bzw 6.7.8? Shopware-Connector 39
Neu Streichpreise oder Rabatte für Staffelpreise von einem Artikel einrichten? Wie am Besten? JTL-Wawi 1.6 0
Neu DRIGEND HILFE!!! Ebay Abgleich endet mit Arithmetischer Überlauffehler für tinyint-Datentyp, Wert = -1. Die Anweisung wurde beendet. eBay-Anbindung - Fehler und Bugs 4
Neu Stornobeleg für Verkauf ohne Rechnung User helfen Usern - Fragen zu JTL-Wawi 9
Neu Neuentwicklung - Helpdesk für JTL Wawi - Eure Ideen und Wünsche? User helfen Usern - Fragen zu JTL-Wawi 4
Kein changelog für 1.11.8 JTL-Wawi 1.11 29
Text Vorbereitung für WAWI import JTL-Wawi 1.11 3

Ähnliche Themen