Module psimport DE

From Dolibarr ERP CRM Wiki
Jump to navigation Jump to search


Modul psimport

Übersicht

psimport ist ein Modul für Dolibarr ERP/CRM, veröffentlicht von Atoo-Net.

Es enthält Kommandozeilen-Werkzeuge, um einen PrestaShop-Shop nach Dolibarr zu migrieren: Kategorien, Kunden/Adressen, Produkte (mit aufgelöster MwSt. und Titelbild), herunterladbare Dateien virtueller Produkte, Bildergalerien und Bestellungen. Die Migration nutzt die REST-Webservice-API von PrestaShop, mit Zwischentabellen (llx_psimport_*), in denen die Daten vor dem endgültigen Import in Dolibarr geprüft und korrigiert werden können, sowie einem erneuten Import ohne erneuten API-Zugriff.

Alle Produkte werden als Dienstleistung importiert (Product::TYPE_SERVICE), da es sich um dematerialisierte Module handelt, unabhängig vom auf PrestaShop-Seite eingestellten Typ.

Eigenschaft Wert
Autor Philippe Grand — Atoo-Net
Version 1.0
Lizenz GNU GPL v3+
Dolibarr minimum v24.0
PHP minimum v8.1
Unterstütztes PrestaShop v1.6 bis 9.x (Webservice-API)

Warum psimport verwenden?

Mit psimport können Sie alle Daten eines bestehenden PrestaShop-Shops nach Dolibarr übernehmen, ohne direkte Verbindung zur MySQL-Datenbank von PrestaShop (mit Ausnahme eines optionalen, einmaligen Schritts für herunterladbare Dateien). Jeder Schritt läuft über eine Zwischentabelle, die vor dem endgültigen Import überprüft werden kann.

Anwendungsfälle

Vollständige Migration eines PrestaShop-Shops

Abruf von Kategorien, Kunden/Adressen, Produkten (mit über die Steuerregelgruppen von PrestaShop aufgelöster MwSt.) und Bestellungen über die REST-Webservice-API, ohne zusätzliche Installation auf PrestaShop-Seite außer der Aktivierung des Webservice.

Prüfung vor dem endgültigen Import

Jede Ressource wird zunächst in eine Zwischentabelle (llx_psimport_*) abgerufen, in der die Daten vor dem eigentlichen Import in Dolibarr geprüft und korrigiert werden können. Das vermeidet einen erneuten Zugriff auf die PrestaShop-API im Fehlerfall.

Gezielte Wiederholung nach Fehlerkorrektur

Jede Zeile der Zwischentabelle trägt einen Status (import_status). Fehlerhafte Zeilen können auf "zu importieren" zurückgesetzt (Schaltfläche "Fehler zurücksetzen" oder eine SQL-Abfrage) und erneut verarbeitet werden, ohne alles von vorn zu importieren.

Abruf herunterladbarer Moduldateien

Die Webservice-API von PrestaShop stellt die an "virtuelle/herunterladbare Produkte" angehängten Dateien nicht bereit (eine durch das offizielle GitHub-Ticket PrestaShop/PrestaShop#27834 bestätigte Einschränkung). Ein mit psimport geliefertes "Bridge"-PrestaShop-Modul umgeht dies, rein lesend.

Vollständige Produktbildergalerie

Über das Titelbild hinaus (das zusammen mit dem Produkt abgerufen wird) kann psimport auch die vollständige Bildergalerie jedes Produkts über den API-Unterendpunkt products/{id}/images abrufen.

Installation

Anforderungen auf PrestaShop-Seite:

  1. Webservice aktivieren: Erweiterte Parameter > Webservice > Webservice von PrestaShop aktivieren → Ja
  2. Einen API-Schlüssel erstellen ("Neuen Webservice-Schlüssel hinzufügen") mit GET-Berechtigungen für: categories, customers, addresses, countries, products, images, tax_rule_groups, tax_rules, taxes, orders, order_details
  3. Die Shop-URL und den erzeugten API-Schlüssel notieren

Anforderungen auf Dolibarr-Seite:

  1. Aktivierte Module: Kunden/Lieferanten (Third parties), Produkte, Dienstleistungen, Kategorien, Bestellungen, Rechnungen
  2. Das Modul psimport in Startseite → Setup → Module/Anwendungen (Familie "Andere") aktivieren

Beim Aktivieren des Moduls werden die Zwischentabellen llx_psimport_* automatisch über den Standard-Aktivierungsmechanismus von Dolibarr angelegt — kein manueller SQL-Import nötig.

Das Modul psimport hat kein Menü und keine eigenen Berechtigungen. Die einzige Bildschirmseite ist die Konfigurationsseite (Setup > Module/Anwendungen > psimport > Schraubenschlüssel-Symbol), auf der die PrestaShop-Shop-URL und der Webservice-API-Schlüssel (Konstanten PSIMPORT_API_URL und PSIMPORT_API_KEY) eingetragen werden. Diese werden standardmäßig von den CLI-Skripten verwendet, wenn kein Parameter auf der Kommandozeile übergeben wird. Die gesamte Migration wird anschließend über die Skripte im Ordner scripts/ von der Kommandozeile aus gesteuert.

Konfiguration

Verbindung zur PrestaShop-API

Konstante Beschreibung
PSIMPORT_API_URL Basis-URL der PrestaShop-Webservice-API (z. B. https://www.yourshop.com/api)
PSIMPORT_API_KEY API-Schlüssel des PrestaShop-Webservice

Fehlerbehebung: HTTP 403 bei der API (Hosting hinter Cloudflare)

Wenn der Verbindungstest (oder ein fetch-*/import-*-Skript) mit einem Fehler wie HTTP 403 Forbidden mit leerem Antwortkörper und ohne erkannte Weiterleitung fehlschlägt, während derselbe Aufruf im Browser funktioniert, kommt die Sperre wahrscheinlich nicht von PrestaShop selbst, sondern von einer vorgelagerten Anwendungs-Firewall (Cloudflare, ModSecurity usw.), die die Anfrage abweist, bevor sie die Seite überhaupt erreicht.

Ein bestätigter Fall bei einem Cloudflare-Hosting (Free-Plan): Der kostenlose Bot Fight Mode von Cloudflare erkennt die cURL-Aufrufe des Moduls (kein Browser, kein JS, untypischer User-Agent) als Bot-Traffic und antwortet mit einer "Managed Challenge" — was auf Modulseite als leerer 403-Fehler erscheint.

Zur Bestätigung: im Cloudflare-Dashboard unter Security > Analytics > Events die letzten Minuten nach einem frischen Test filtern. Zeigt der geblockte Eintrag Service = "Bot fight mode" und Action = "Managed Challenge", liegt dieser Fall vor.

Im Free-Plan kann dieser Bot Fight Mode nicht selektiv pro URL-Pfad umgangen werden. Die einzige Option ist, den Schalter global zu deaktivieren: Security > Settings > "Bot fight mode" → Aus, während die Import-Skripte laufen, und danach bei Bedarf wieder zu aktivieren.

Bei einem kostenpflichtigen Cloudflare-Plan (Pro und höher) erlaubt Super Bot Fight Mode eine gezieltere Umgehung über eine "Skip"-Sicherheitsregel für /api*.

Verwendung

Importverwaltung

Ausführungsreihenfolge

# 1. Kategorien
php scripts/fetch-categories.php https://www.yourshop.com/api ABCDEF... 0 0
php scripts/import-categories.php 0

# 2. Kunden + Adressen
php scripts/fetch-customers.php https://www.yourshop.com/api ABCDEF... 0 0
php scripts/import-customers.php 0

# 3. Produkte (MwSt. über tax_rules_groups aufgelöst, Titelbild heruntergeladen)
php scripts/fetch-products.php https://www.yourshop.com/api ABCDEF... 0 0
php scripts/import-products.php https://www.yourshop.com/api ABCDEF... 0

# 4. Herunterladbare Moduldateien (erfordert das PrestaShop-Modul "Psimport Bridge")
php scripts/fetch-product-files.php https://www.yourshop.com/api ABCDEF... 0 0
php scripts/import-product-files.php https://www.yourshop.com/api ABCDEF... 0

# 4b. Vollständige Produktbildergalerie
php scripts/fetch-product-images.php https://www.yourshop.com/api ABCDEF... 0 0
php scripts/import-product-images.php https://www.yourshop.com/api ABCDEF... 0

# 5. Bestellungen (vor dem ersten Lauf $importable_state_ids und $payment_module_map am Skriptanfang anpassen)
php scripts/fetch-orders.php https://www.yourshop.com/api ABCDEF... 0 0
php scripts/import-orders.php 0

Gemeinsame Parameter:

  • limit = 0, um alles abzurufen/zu importieren, oder eine Zahl für einen Test mit einer Stichprobe
  • clean_all_before_fetch = 1, um die Zwischentabelle vor einem neuen Abruf zu leeren (Standard 0 = anreichern/aktualisieren)

Import nach Fehlerkorrektur wiederholen

Jede Zwischentabelle besitzt eine Spalte import_status:

  • 0 = zu importieren
  • 1 = erfolgreich importiert (fk_dolibarr enthält die ID des erzeugten Dolibarr-Objekts)
  • 2 = fehlerhaft (Details in import_error)

Um nach der Korrektur nur die fehlerhaften Zeilen erneut zu verarbeiten, die Schaltfläche "Fehler zurücksetzen" im Reiter der Importverwaltung verwenden, oder:

UPDATE llx_psimport_product SET import_status = 0 WHERE import_status = 2;

und anschließend das passende Import-Skript erneut ausführen.

Herunterladbare Moduldateien

Die Webservice-API von PrestaShop stellt die Dateien "virtueller/herunterladbarer Produkte" nicht bereit (bestätigt durch das offizielle GitHub-Ticket PrestaShop/PrestaShop#27834 sowie mehrere Themen im PrestaShop-Forum). Dies wird durch ein einmalig im Shop installiertes "Bridge"-PrestaShop-Modul umgangen.

Empfohlen: Modul Psimport Bridge (ein Klick, wie jeder andere Import):

  1. Das in bridge/psimportbridge/ mitgelieferte Modul im PrestaShop-Shop installieren (ZIP über das Backoffice hochladen oder per FTP/SFTP nach modules/ kopieren und dann installieren)
  2. Keine zusätzliche Konfiguration nötig: es verwendet denselben bereits eingerichteten Webservice-API-Schlüssel (PSIMPORT_API_KEY)
  3. Im Reiter Importverwaltung die Schaltflächen ↓ Abrufen und → Importieren bei der Zeile "Produktdateien" verwenden, genau wie bei jeder anderen Ressource
  4. Nach Abschluss der Migration kann das Modul problemlos deinstalliert werden (rein lesend, keine Datenbank- oder Dateischreibvorgänge auf PrestaShop)

Dieses Modul erlaubt nur den Download bereits in ps_product_download referenzierter Dateien (Schutz vor beliebigen Dateizugriffen).

Alternative (falls das Bridge-Modul nicht installiert werden kann): ein manueller CSV-Export von ps_product_download aus phpMyAdmin/Adminer, zusammen mit einer lokalen Kopie des download/-Ordners von PrestaShop, dann php scripts/import-product-files.php /path/to/export.csv /path/to/download/.

Vollständige Produktbildergalerie

fetch-product-images.php / import-product-images.php rufen alle Bilder jedes PrestaShop-Produkts ab (nicht nur das Titelbild), über den Webservice-Unterendpunkt products/{id}/images, in eine eigene Zwischentabelle llx_psimport_productimage.

Beim ersten Lauf zu prüfen:

  • Die Position jedes Bildes in der Dolibarr-Galerie ergibt sich aus der von der API zurückgegebenen Reihenfolge — nach dem Import die Reihenfolge visuell prüfen und bei Bedarf manuell anpassen
  • Um dasselbe Bild nicht doppelt anzuzeigen (Titelbild + Galerie), werden exakte Duplikate erkannt und stillschweigend übersprungen
  • Die genaue Form der JSON-Antwort kann je nach PrestaShop-Version variieren: zunächst mit limit=5 an einer Stichprobe testen

Prüfungen nach jedem Schritt

  1. Inhalt der Tabellen llx_psimport_* prüfen (Datenkonsistenz, korrekt aufgelöste MwSt.)
  2. In der Dolibarr-Oberfläche prüfen: Kategoriebaum, Kundendatensätze (Adresse, Kontakt), Produktblätter (Preis netto/brutto, MwSt., Bild, angehängte Datei), Bestellungen (Positionen, Summen, Status)
  3. Anzahl (Kategorien/Kunden/Produkte/Bestellungen) zwischen PrestaShop, der Zwischentabelle und Dolibarr vergleichen

FAQ

Benötige ich direkten Zugriff auf die MySQL-Datenbank von PrestaShop?

Nein. Die gesamte Migration läuft über die REST-Webservice-API von PrestaShop, mit Ausnahme eines optionalen, einmaligen Schritts (manueller CSV-Export), falls das Bridge-Modul für herunterladbare Dateien nicht installiert werden kann.

Welche PrestaShop-Versionen sind kompatibel?

Von PrestaShop 1.6 bis 9.x, über die Standard-Webservice-API. Das Bridge-Modul (auf PrestaShop-Seite) gibt diesen Kompatibilitätsbereich selbst an.

Was tun, wenn der Import einer Ressource teilweise fehlschlägt?

Die zugrunde liegenden Daten korrigieren (in der Zwischentabelle oder auf PrestaShop-Seite), die fehlerhaften Zeilen auf import_status = 0 zurücksetzen (Schaltfläche "Fehler zurücksetzen" oder eine SQL-Abfrage) und anschließend nur das passende Import-Skript erneut ausführen.

Der Verbindungstest schlägt mit 403 fehl, obwohl die URL im Browser funktioniert

Siehe den Abschnitt Fehlerbehebung HTTP 403: Dies ist meist eine Anwendungs-Firewall (Cloudflare Bot Fight Mode), die cURL-Aufrufe blockiert, nicht PrestaShop selbst.

Verändert das Modul Psimport Bridge Daten auf PrestaShop?

Nein, es arbeitet rein lesend: keine Datenbank- oder Dateischreibvorgänge auf PrestaShop, und es erlaubt nur den Download bereits in ps_product_download referenzierter Dateien.

Siehe auch

Andere Sprachen