Hallo Shopware Community,
Problembeschreibung / Eindeutige Anleitung zur Reproduktion:
Wir haben am vorletzten Wochenende das Mollie Plugin von 4.9.3 auf 4.10.1 migriert
in der SW Version 6.5.7. Danach haben wir ihn auf SW 6.6.6.1 hochgezogen.
Seitdem wirft der Shop einen Fehler, sobald ein Kunde versucht zu bezahlen, egal mit welcher Zahlart und welchem Zahlungsplugin (auch andere als Mollie).
Meldung aus SW 6.5.7:
request - CRITICAL
Uncaught PHP Exception TypeError: „Shopware\Core\Checkout\Payment\Cart\Token\TokenStruct::__construct(): Argument #6 ($expires) must be of type ?int, float given, called in vendor/shopware/core/Checkout/Payment/Cart/PaymentTransactionChainProcessor.php on line 115“ at TokenStruct.php line 51 {„exception“:„[object] (TypeError(code: 0): Shopware\Core\Checkout\Payment\Cart\Token\TokenStruct::__construct(): Argument #6 ($expires) must be of type ?int, float given, called in vendor/shopware/core/Checkout/Payment/Cart/PaymentTransactionChainProcessor.php on line 115 at vendor/shopware/core/Checkout/Payment/Cart/Token/TokenStruct.php:51)“}
Bisherige Analysen / Geprüfte Punkte:
-
Wir haben das Mollie Plugin komplett deinstalliert und wieder auf die Version 4.9.3 gewechselt, der Fehler kam immer noch.
-
Wir haben das Mollie Plugin komplett deinstalliert und Paypal direkt angebunden,
der Fehler kam immer noch.
- Wir haben das Mollie Plugin komplett deinstalliert und Payrexx angebunden,
der Fehler kam immer noch.
- Wir hatten die PHP Dateien in der Fehlermeldung geprüft, diese sind unverändert.
Meldung in SW 6.6.6.1:
php - CRITICAL
Uncaught Error: Shopware\Core\Checkout\Payment\Cart\Token\TokenStruct::__construct(): Argument #6 ($expires) must be of type ?int, float given, called in /vendor/shopware/core/Checkout/Payment/PaymentProcessor.php on line 218 {„exception“:„[object] (TypeError(code: 0): Shopware\Core\Checkout\Payment\Cart\Token\TokenStruct::__construct(): Argument #6 ($expires) must be of type ?int, float given, called in /vendor/shopware/core/Checkout/Payment/PaymentProcessor.php on line 218 at /vendor/shopware/core/Checkout/Payment/Cart/Token/TokenStruct.php:53)“}
Das Mollie Update hat bei uns einen grundlegenden Fehler verursacht, welcher
auch durch eine Deinstallation nicht zu beheben war.
Der Mollie Support ist informiert, antwortet aber äußerst langsam.
Der Vorschlag ein Downgrade von 4.10.1 auf 4.9.3 durchzuführen brachte auch nix.
Wir haben uns durch unsere Fehlerlogs gewühlt und 2 Fehlerquellen heraus analysiert. Beides mal steht in der log Datei, dass der Zeitstempel einer Bestellung nicht als Int sondern fälschlicherweise als float übergeben wird. Nachdem wir die betroffenen 2 php Standard-SW Dateien ausfindig gemacht hatten und uns die genannten Zeilen angeschaut haben, waren wir umso mehr verwirrt. Dort stand:
PaymentProcessor.php (zeile 214-216):
$paymentFinalizeTransactionTime = \is_numeric($paymentFinalizeTransactionTime)
? (int) $paymentFinalizeTransactionTime * 60
: null;
PaymentTransactionChainProcessor.php (Zeile 215-217):
if (\is_numeric($paymentFinalizeTransactionTime)) {
$paymentFinalizeTransactionTime = (int) $paymentFinalizeTransactionTime * 60;
} else {
Jeweils haben wir Klammern hinzugefügt um die Typ-Umwandlung für das Ergebnis der Umrechnung in Sekunden zu einem Integer zu konvertieren. Anscheinend war dies andernfalls nicht gewährleistet:
($paymentFinalizeTransactionTime * 60)
Mittlerweile funktionieren die Zahlungsarten Vorkasse und auf Rechnung (Diese funktionieren ohne Plugin) wieder.
Sobald man über das Mollie oder Payrexx, … -plugin zahlen möchte wirft dies einen Fehler sobald man auf Bestellung abschließen klickt. Lässt man die 4 markierten Klammern weg, so kommt man gar nicht erst soweit.
Hat jemand eine Idee, wie man das ganze wieder in Ordnung bekommt?
Vielen Dank.
Schöne Grüße,
Matthias