Hallo zusammen,
wir verkaufen eine App, die eine Art Forenfunktion bietet. Das bedeutet, dass unsere Kunden sich Accounts angelegt haben und dann die App normal nutzen. Diese App hat ganz gewöhnliche Android/iPhone Cients und kommunziert mit einem REST-Server, der Nutzerdaten, Forenposts etc. verwaltet. Sprich - bis jetzt hatte das ganze nichts mit Shopware zu tun und unsere Architektur/Infrastruktur ist nicht sehr flexibel.
Jetzt möchten wir zu diesem Forum noch einen Shopware-Shop ergänzen, der mit den Daten der App integriert sein sollte. Das bedeutet, dass ein Teil der Daten (z.B. Passwort, E-Mail) nicht nur in Shopware hinterlegt werden müssen, sondern auch direkt aus dem Server angefragt werden sollten. Ich schildere mal ein paar Situationen, damit ihr besser versteht, was ich meine.
Situation 1: Kunden-Login im Shop
Der Kunde möchte sich einloggen und besucht /account. Hier findet sich das Standard Shopware Login Formular. Der Kunde gibt die Daten an, mit denen er sich schon in der App registriert hat. Sein Request landet bei engine/Shopware/Controllers/Frontend/Account.php::Shopware_Controllers_Frontend_Account->loginAction() und damit ultimativ bei engine/Shopware/Core/sAdmin.php::sAdmin->sLogin(). An dieser Stelle würde ich gerne hooken/irgendwie eingreifen und statt der SQL-Query einen HTTP-Request an den App-Server schicken, um zu prüfen, ob die Credentials gültig sind. Außerdem würde ich dann (falls noch nicht vorhanden) einen Shopware-Customer für diesen Nutzer aus bereits vorhandenen Daten generieren. Damit wäre der Kunde eingeloggt, sowohl in Shopware, als auch in dem App-Server.
Situation 2: Kunden-Registrierung im Shop
Der Kunde möchte sich registrieren und nutzt wieder das Standard Shopware Formular. Hier sollte dann nicht nur ein Shopware-Customer angelegt werden, sondern auch ein Request an den App-Server gehen, der dort den Kunden ebenfalls hinterlegt.
Situation 3: Datenänderung im Shop
Wenn der Kunde seine Daten (Password, Addresse…) ändert, dann sollte auch das gehookt werden und ein Request an den App-Server rausgehen, um die Daten auf beiden Datenbanken synchron zu halten.
Situation 4: Datenänderung auf App-Server
Natürlich kann der Kunde auch in der App seine Daten ändern. Dann würde aber der App-Server einfach über die Shopware REST Schnittstelle auch die Daten in Shopware ändern können, oder? Diese Richtung sollte also kein Problem sein.
Konkrete Fragen:
- Wie kann ich den Login hooken? Die einzige Überlegung, die ich bis jetzt habe, war das Event ‚Shopware_Modules_Admin_Login_Start‘ aus sLogin() zu hooken und da irgendwas zu zaubern.
- Wie hooke ich die Datenänderung, wenn ein Nutzer seine Adresse o.ä. in Shopware verändert? Da müsste ich ja auch wieder einen Request an den App-Server mit den Änderungen stellen.
- Hat jemand einen insgesamt einen besseren Vorschlag? Ich bin offen für jeden Ansatz.
System-Infos:
- Shopware 5.5.4
- App-Server frei über das Internet erreichbar.
- App-Datenbanken und Shopware können nicht auf den gleichen Server, eine reine Integration über die Datenbank ist also nicht möglich. Es muss ein HTTP-Request an den App-Server rausgehen.
Ich danke euch für jegliche Anstöße. Falls jemand ein Plugin kennt, das bereits diese oder eine ähnliche Funktionalität abbildet, dann wäre ich sehr daran interessiert mal den Source Code des Plugins zu lesen.
Grüße!