Hallo zusammmen, ich bin heute auf einen interessanten Fehler gestoßen: Wurde bei der Eingabe von Daten eines Kunden, der ein Rechnungsland außer Deutschland (zB Österreich) angegeben hat, ein Pflichtfeld nicht ausgefüllt, kam es zu dem o.g. Fehler. Was ist das Problem? Shopware erstellt normalerweise einen Standarduser, dem auch eine Standardversandart (in unserem Fall: Vorkasse) zugeordnet wird. Fehlt eines der Pflichtfelder, kann dieser Standarduser nicht erstellt werden und es können keiner Zahlungsarten gezogen werden, da wir für alle Länder außer Deutschland ein paar der Zahlungsarten deaktiviert haben, sodass im Array $getPaymentMeans nach der Prüfung durch folgenden Code: foreach ($getPaymentMeans as $payKey =\> $payValue) { // Hide paymentmeans which are not active if (empty($payValue["active"]) && $payValue["id"]!=$user["additional"]["user"]["paymentpreset"]){ unset($getPaymentMeans[$payKey]); continue; } // If esd - order, hide payment-means, whih // are not accessible for esd if (empty($payValue["esdactive"]) && $sEsd){ unset($getPaymentMeans[$payKey]); continue; } // Check additional rules if ($this-\>sManageRisks($payValue["id"],$basket,$user) && $payValue["id"]!=$user["additional"]["user"]["paymentpreset"]){ unset($getPaymentMeans[$payKey]); continue; } // Get possible translation $getPaymentMeans[$payKey] = $this-\>sGetPaymentTranslation($getPaymentMeans[$payKey]); }
keine Zahlungsarten mehr verbleiben. Folgendes konnte das Problem lösen: ich habe die Standardzahlungsart händisch gesetzt, falls diese leer sein sollte. if($user["additional"]["user"]["paymentpreset"] == '') $user["additional"]["user"]["paymentpreset"] = 5;
Dabei ist die 5 im Code mit der ID eurer Standard-Zahlungsart zu ersetzen. Einzufügen ist der Code unmittelbar VOR dem o.g. Code-Teil in der Funktion sGetPaymentMeans() in der sAdmin Klasse (am Besten Funktion sauber per inherit überschreiben). Vielleicht hilft es ja dem ein oder anderen. Viele Grüße, Constantin
Hallo Constantin, wir haben z.Z. den gleichen Fehler. Kannst Du uns noch sagen, in welcher Datei die Anpassungen vorgenommen werden müssen? Grüße!
Hallo, Du musst die sAdmin-Klasse im Ordner engine/core/class/ überschreiben. Um Updatefähig zu bleiben, machst du das am Besten mit dem inherit Ordner. Weißt du, wie du eine Core-Klasse sauber überschreiben kannst? Viele Grüße, Constantin
Hallo Constantin, vielen Dank für deine Antwort. Das war tatsächlich der Fehler in unserer Problematik. Kurz zur Erläuterung. Wir nutzen PayOne als Zahlungsprovider. Dieser bietet die versch. Zahlungsarten an. Aus irgend einem Grund wurde PayOne nicht als Standardzahlart bei einem Klick auf “Registieren” ausgewählt. Grüße!