Odoo-Konnektor — Vollständiges Handbuch
Die Echtzeit-Synchronisation PrestaShop ⇄ Odoo (Produkte und Varianten, Bestand, Kunden, Bestellungen, Rechnungen, Lieferungen) für PrestaShop 8 und 9 und Odoo 14 bis 20 installieren, konfigurieren und betreiben.
Der Odoo-Konnektor synchronisiert Ihre Produkte und Varianten, Ihren Bestand, Ihre Kunden, Bestellungen, Rechnungen und Lieferungen zwischen PrestaShop und Odoo in Echtzeit und in beide Richtungen. Dieses Handbuch behandelt Installation, Verbindung, jeden Einstellungsreiter, Erstsynchronisation, Cron, Odoo-Webhooks und Fehlerbehebung.
Voraussetzungen
- PrestaShop 8.0 bis 9.x.
- PHP 7.4 bis 8.5 mit der cURL-Erweiterung.
- Odoo 14 bis 20, selbst gehostet, Odoo.sh oder Odoo Online, erreichbar von Ihrem PrestaShop-Server. Bei Odoo Online muss Ihr Tarif den Zugriff auf die externe API umfassen.
- Die Odoo-Apps Verkauf und Lager, dazu Rechnungsstellung, wenn Sie Rechnungen erstellen. Die App Lieferung wird benötigt, um die Sendungsnummer an PrestaShop zurückzusenden.
- Ein dedizierter Odoo-Benutzer mit Rechten für Verkauf, Lager und Rechnungsstellung sowie ein API-Schlüssel.
Das Modul kommuniziert mit Odoo über JSON-RPC. Die PHP-Erweiterung xmlrpc, die in PHP 8 entfernt wurde, ist nicht erforderlich.
Installieren Sie die App Lager in Odoo, bevor Sie Ihre Produkte senden. Seit Odoo 18 hängt die Bestandsverfolgung eines Produkts von dieser App ab: Ohne sie angelegte Produkte würden nicht im Bestand verfolgt.
Installation und Update
- Öffnen Sie im Back-Office Module > Modul-Manager, klicken Sie auf Ein Modul hochladen und legen Sie die ZIP-Datei des Moduls ab.
- Öffnen Sie anschließend die Konfiguration über die Schaltfläche Konfigurieren oder das Menü Odoo Connector.
Für ein Update laden Sie die neue Version auf dieselbe Weise hoch: PrestaShop führt das Update aus, und Ihre Einstellungen, Ihr API-Schlüssel und Ihre Zuordnungen bleiben erhalten.
Einen API-Schlüssel in Odoo erzeugen
- Melden Sie sich bei Odoo mit dem für die Synchronisation vorgesehenen Benutzer an.
- Klicken Sie auf Ihren Avatar, dann auf Mein Profil (oder Präferenzen), Reiter Kontosicherheit, und auf Neuer API-Schlüssel.
- Kopieren Sie den Schlüssel: Er wird nur ein einziges Mal angezeigt.
Ein dedizierter Benutzer (zum Beispiel „PrestaShop Sync“) statt eines persönlichen Administratorkontos sorgt für einen klaren Verlauf in Odoo und ermöglicht es, den Zugriff jederzeit zu widerrufen.
Reiter Verbindung
- Odoo-URL: die Adresse Ihrer Instanz, beginnend mit
https://(oderhttp://), zum Beispielhttps://meine-firma.odoo.com. - Datenbank: der genaue Name der Odoo-Datenbank.
- Login: der Login (oft die E-Mail) des dedizierten Benutzers.
- API-Schlüssel: wird verschlüsselt gespeichert. Lassen Sie das Feld leer, um den aktuellen Schlüssel zu behalten.
Klicken Sie auf Verbindung testen: Das Modul zeigt die Odoo-Version, den Benutzer und das Unternehmen an. Klicken Sie dann auf Listen aus Odoo laden, um Unternehmen, Lager, Lagerort, Verkaufsteam, Verkäufer und Zahlungsjournal aus Listen auszuwählen. Speichern Sie und aktivieren Sie dann Synchronisierung aktivieren.
Aus Sicherheitsgründen wird der gespeicherte API-Schlüssel nie an eine andere Adresse, Datenbank oder einen anderen Login als die gespeicherten gesendet: Um einen anderen Server zu testen, geben Sie dessen API-Schlüssel ein.
Derselbe Reiter bietet außerdem die Echtzeitverarbeitung (Änderungen werden direkt nach der Auslieferung der Seite an den Besucher gesendet; ist sie deaktiviert, sendet der Cron sie), den Testmodus, das detaillierte Protokoll, die Liste zulässiger IPs für den Webhook sowie die Aktivierung jedes Datenflusses: Kunden, Produkte, Bestand, Bestellungen.
Reiter Produkte
- Produktrichtung: PrestaShop nach Odoo, Odoo nach PrestaShop oder in beide Richtungen.
- Titelbild senden, Kategoriebaum in Odoo anlegen (mit der übergeordneten Odoo-Kategorie) und Einkaufspreis als Kosten senden (deaktivieren, wenn Odoo die Kosten nach Durchschnitts- oder FIFO-Bewertung berechnet).
- Odoo-Varianten archivieren, die in PrestaShop fehlen.
- Zusätzliche Feldzuordnung: eine Zeile pro Feld, im Format
odoo_field=prestashop_field. - Odoo nach PrestaShop: Preis, Name, Referenz und EAN13, Aktivierungsstatus, nach Wahl.
- Neue Odoo-Produkte importieren: In Odoo angelegte verkaufbare Produkte werden in PrestaShop angelegt, ihre Odoo-Varianten als Varianten, in der gewählten Kategorie und mit der gewählten Steuerregel, aktiviert oder nicht.
Reiter Bestand
- Bestandsführendes System: Odoo (empfohlen), PrestaShop oder beide. Bestellbewegungen werden nie doppelt gezählt.
- An PrestaShop gesendete Menge: die verfügbare Menge (abzüglich Reservierungen, empfohlen, um Überverkäufe zu vermeiden) oder die vorrätige Menge.
- Odoo-Lager, das auch für die Bestellungen gilt, und optional ein bestimmter Lagerort.
Reiter Bestellungen
- Bestellungen an Odoo senden: sofort bei ihrer Erstellung oder erst nach Zahlung, mit einem Datum, vor dem aufgegebene Bestellungen ignoriert werden.
- Odoo-Angebot bestätigen bei Bestellung oder bei Zahlung: Die Bestätigung erstellt den Lieferschein in Odoo.
- Steuern: PrestaShop-Sätze (Odoo-Steuern mit gleichem Satz werden verwendet und die Summen stimmen überein) oder von Odoo berechnen lassen (Produktsteuern und Steuerzuordnungen von Odoo).
- PrestaShop-Status, die den Odoo-Auftrag stornieren, Verkaufsteam und Verkäufer.
- Lieferungen in Odoo aktualisieren PrestaShop: Bei der Validierung der Lieferung erhält die Bestellung den gewählten Status (standardmäßig Versandt) mit der Sendungsnummer, und der Kunde erhält die Versand-E-Mail.
- Stornierungen in Odoo aktualisieren PrestaShop.
Jede Bestellposition verweist auf die Odoo-Variante der PrestaShop-Variante. Versand, Geschenkverpackung und Rabatte werden als eigene Positionen hinzugefügt, wobei die Rabatte nach Steuersatz aufgeteilt werden. Das Modul vergleicht die Summe in Odoo mit der in PrestaShop und meldet jede Abweichung im Protokoll.
Reiter Rechnungsstellung
- Odoo-Rechnungen: nicht erstellen, als Entwurf erstellen oder erstellen und buchen. Die Rechnung wird aus dem bestätigten Auftrag erstellt, bei Bestellung oder bei Zahlung.
- Zahlung in Odoo erfassen: Die gebuchte Rechnung einer bezahlten Bestellung wird im passenden Journal als bezahlt markiert.
- Standard-Zahlungsjournal und Journal pro Zahlungsmodul: eine Zeile pro Modul, im Format
module_name=journal_id, zum Beispielstripe_official=7.
Ohne konfiguriertes Journal wird die Zahlung nicht erfasst: Das Protokoll weist mit einer Warnung darauf hin, die das betreffende Zahlungsmodul nennt.
Erstsynchronisation
Befüllen Sie Odoo in einem bestehenden Shop über den Reiter Werkzeuge, in dieser Reihenfolge:
- Alle Kunden senden.
- Alle Produkte senden.
- Gesamten Odoo-Bestand importieren, wenn Odoo das bestandsführende System ist.
- Bestellungen senden, aufgegeben seit einem Datum.
Die Aufträge werden vom Cron stapelweise gesendet. Wenn Ihr Katalog oder Ihre Kunden bereits in Odoo existieren, werden sie wiedergefunden, statt neu angelegt zu werden: Kunden über ihre E-Mail, Adressen über ihre Referenz, einfache Produkte über ihre Referenz (oder PS-<id> ohne Referenz), Produkte mit Varianten über die Referenzen ihrer Varianten und Bestellungen über ihre Herkunft.
Beginnen Sie mit aktiviertem Testmodus: Jeder Vorgang wird im Protokoll erfasst, ohne etwas in Odoo zu schreiben. Deaktivieren Sie ihn, sobald Sie das Ergebnis geprüft haben.
Cron
Der Cron verarbeitet die Warteschlange und liest die in Odoo vorgenommenen Änderungen (Bestand, Produkte, Lieferungen, Stornierungen). Planen Sie ihn alle 1 bis 5 Minuten mit der im Dashboard angezeigten URL ein:
curl -s "https://ihr-shop.com/module/dfodooconnect/cron?token=IHR_TOKEN"
oder, ohne HTTP-Zeitlimit, über die Kommandozeile des Servers:
php /pfad/zu/prestashop/modules/dfodooconnect/cron.php
Zwei Läufe finden nie gleichzeitig statt. Die Schaltfläche Jetzt synchronisieren im Dashboard startet einen sofortigen Lauf.
Odoo-Webhooks (Echtzeit aus Odoo)
Ohne Webhook liest der Cron die Änderungen in Odoo bei jedem Lauf. Für eine sofortige Rückmeldung legen Sie ab Odoo 17 ohne Code eine Regel pro Modell unter Einstellungen > Technisch > Automatisierungsregeln an:
- Modelle: Produkt, Produktvariante, Quanten oder Lagerbuchung, Transfer, Verkaufsauftrag.
- Auslöser: Bei Speicherung.
- Aktion: Webhook-Benachrichtigung versenden an die im Dashboard angezeigte Webhook-URL.
Das Token ist obligatorisch: Die im Dashboard angezeigte Webhook-URL enthält es bereits (?token=). Für Ihre eigenen Skripte kann es auch im Header X-DF-Token gesendet werden. Der empfangene Inhalt wird nie unverändert übernommen: Er gibt nur an, welcher Datensatz sich geändert hat, und das Modul liest ihn über die API erneut aus Odoo.
Eine Anfrage ohne gültiges Token wird mit dem Code 403 abgewiesen. Zusätzlich können Sie die zulässigen IP-Adressen im Reiter Verbindung einschränken.
Dashboard und Überwachung
Das Dashboard zeigt den Systemzustand (letzter Cron-Lauf, letzter erfolgreicher Odoo-Aufruf, ältester wartender Job, Fehler und Warnungen der letzten 24 h), die Zähler der Warteschlange (Ausstehend, Wird wiederholt, In Quarantäne, Erledigt) und die Anzahl der verknüpften Datensätze. Die Reiter Warteschlange, Zuordnungen und Protokoll sind filterbar, und eine Odoo-Infobox auf den Bestell-, Produkt- und Kundenseiten bietet eine Schaltfläche Jetzt synchronisieren.
Die ausfallsichere Warteschlange
Jede Änderung wird in eine Warteschlange gestellt, die erst nach der Auslieferung der Seite an den Kunden verarbeitet wird: Der Bestellprozess wartet nie auf Odoo. Bei einem Fehler wird der Job mit wachsendem Abstand (von 1 Minute bis 24 Stunden) erneut ausgeführt; nach der konfigurierten Anzahl an Versuchen (standardmäßig 8) geht er in Quarantäne und lässt sich mit einem Klick neu starten. Antwortet Odoo nicht mehr, setzt ein Schutzschalter die Aufrufe aus und bewahrt die Jobs auf, ohne ihre Versuche zu verbrauchen; die Synchronisation läuft automatisch weiter, sobald Odoo wieder erreichbar ist.
Odoo-Datenbank wechseln
Wechseln Sie von einer Odoo-Datenbank zu einer anderen (Testdatenbank zu Produktion, Migration), erkennt das Modul dies anhand der eindeutigen Kennung der Datenbank. Es verwirft dann die Zuordnungen und die Einstellungen der alten Datenbank (Unternehmen, Lager, Lagerort, Team, Verkäufer, Journal) und weist mit einer Meldung darauf hin: Laden Sie die Listen erneut aus Odoo und prüfen Sie die Einstellungen. Bei der nächsten Synchronisation werden die Datensätze der neuen Datenbank über ihre Referenzen wiedergefunden.
Synchronisierte Felder
Kunden
Odoo-Kontakt mit Name (oder Firma), E-Mail, USt-IdNr., SIRET, Land, Region, Sprache und Telefon. Die Rechnungs- und Lieferadressen werden beim Senden der Bestellungen zu untergeordneten Kontakten. Eine von Odoo abgelehnte USt-IdNr. verhindert das Senden nicht: Der Kontakt wird ohne USt-IdNr. angelegt und eine Warnung wird im Protokoll vermerkt.
Produkte und Varianten
Name, Nettopreis, Kosten, in kg umgerechnetes Gewicht, Referenz, Barcode, Steuer zum gleichen Satz (Dienstleistungssteuer für virtuelle Produkte), Kategorie und Bild. Jede Variante ist mit einer Odoo-Variante verknüpft; Attribute und ihre Werte werden bei Bedarf angelegt. Ein unverändertes Produkt wird in Odoo nicht neu geschrieben.
Bestand
Pro Variante, im gewählten Lager oder Lagerort.
Bestellungen
Kunde, Rechnungs- und Lieferadresse, Positionen pro Variante, Versand, Geschenkverpackung, Rabatte, Währung über die Preisliste, Lager, Team und Verkäufer.
Fehlerbehebung
- „Authentication refused by Odoo“: Login oder API-Schlüssel ist falsch, oder der Schlüssel wurde widerrufen. Erzeugen Sie einen neuen Schlüssel.
- „Odoo closed the connection: check the database name“: Die angegebene Datenbank existiert auf diesem Server nicht.
- „Odoo redirects this URL“: Verwenden Sie die in der Meldung angegebene Adresse (oft die
https://-Version). - „No Odoo sale tax at 20%“: Legen Sie in Odoo eine Verkaufssteuer mit dem angegebenen Satz an, als Prozentsatz und ohne Steuer im Preis.
- „No Odoo payment journal for payment module…“: Wählen Sie im Reiter Rechnungsstellung ein Standard-Zahlungsjournal oder ein Journal pro Modul.
- Die Sendungsnummer kommt nicht zurück: Installieren Sie die App Lieferung in Odoo. Der Status Versandt funktioniert auch ohne sie.
- „Total mismatch“: Die Summe in Odoo weicht von der in PrestaShop ab; prüfen Sie die Odoo-Steuern, die den Steuersätzen der Bestellung entsprechen.
- Bestand oder Lieferungen kommen nicht zurück: Prüfen Sie, ob der Cron läuft (Datum des letzten Cron-Laufs im Dashboard) und welche Richtung konfiguriert ist.
- Ein Job ist in Quarantäne: Lesen Sie seine Meldung im Reiter Warteschlange, beheben Sie die Ursache und starten Sie ihn dann erneut.
Deinstallation
Die Deinstallation entfernt die Zuordnungs-, Warteschlangen- und Protokolltabellen sowie die Einstellungen des Moduls. Ihre Daten in Odoo werden nicht verändert. Bei einer Neuinstallation werden die vorhandenen Datensätze in Odoo über ihre Referenzen wiedergefunden, ohne Duplikate.