Eigenes Plugin - Keine Customer Informationen in Frontend Controller

Hallo zusammen,

ich habe leider folgedes Problem.

Wir betreiben ein Modul welches im Checkout auf der Bestellabschlusseite das Geburtsdatum und die Telefonnumer des Kunden erfragt.

Diese übertragen wir bei Bestellabschluss per synchronem AJAX Request an den Frontend Controller unseres Plugins zur Speicherung der Werte in der s_user_billingaddress Tbl. Anschließend läuft der Bestellprozess weiter.

In unseren Entwicklungs- und Testumgebungen und bei den meisten Händlern funktioniert dies einwandfrei.

Leider haben wir bei einzelnen Händlen das Problem, dass die Speicherung nicht funktioniert.

Der Grund scheint mir zu sein, dass in manchen Fällen kein User Objekt zur verfügung steht.

Mit folgendem Aufruf initialisierue ich eine User Instanz in der Controller Action.

 $customerModel = Shopware()-\>Models()-\>getRepository('Shopware\Models\Customer\Customer'); $userModel = $customerModel-\>findOneBy(array('id' =\> Shopware()-\>Session()-\>sUserId)); $user = $userModel-\>getBilling();

Wenn ich die Server Logs der Händler prüfe scheint mir $user = null zu sein. Aber so einen Fall kann ich selbst nicht reproduzieren.

Ein Anhaltspunkt ist, dass sich bei einem Händler das Fehlerbild zeigte nachdem er einen Providerwechsel gemacht hat.

Möglicheweise gibt es eine Shop- oder Server-Config welche den ausschlag gibt? Vielleicht mit SSL und Aufruf des FC.

 

Hat jemand schon einmal änliche Probleme gehabt oder hat einen Ansatz der mir weiter hilft?

Hi,

am besten immer die konkrete Fehlermeldung / Logs angeben, auch wenn du dir sicher bist, dass es hier am $user liegt. Wenn erst „$user“ null ist, bedeutet das ja letztlich, dass wir $customerModel und  Shopware()->Session()->sUserId als Fehlerquelle ausschließen, weil sonst vorher schon eine Exception aufgetreten wäre. 

Wenn „getBilling“ null zurück gibt, könnte es sich um einen inkonsistenten Benutzer-Datensatz handeln - halte ich für unwahrscheinlich, aber abhängig davon, wo genau du deinen Ajax-Request einbindest, vll. eine Option. Da also mal schauen, ob der betroffene Nutzer bspw. eine Rechnungsadresse etc. hinterlegt hat. Auch würde ich an deiner Stelle einmal versuchen, Doctrine ORM als Problemquelle auszuschließen und direkt mit SQL oder Doctrine DBAL zu arbeiten. Damit schließen wir aus, dass es merkwürdige Caching- oder Proxy-Probleme sind. Theoretisch könnten auch Fremdschlüssel ein Problem sein, dafür wiederum würde der Providerwechsel sprechen - ein entsprechendes Reparatur-Script gibt es im Wiki. 

Eine definitive Lösung habe ich also leider auch nicht - aber die Sachen kannst du ja mal prüfen. Ist natürlich immer aufwändig, wenn man es nicht sicher reproduzieren kann.

Daniel