Module psimport FR

From Dolibarr ERP CRM Wiki
Jump to navigation Jump to search


Module psimport

Présentation

Le module psimport est une extension pour Dolibarr ERP/CRM éditée par Atoo-Net.

Il regroupe des outils en ligne de commande permettant de migrer une boutique PrestaShop vers Dolibarr : catégories, tiers/adresses, produits (avec TVA résolue et image de couverture), fichiers téléchargeables des produits virtuels, galerie d'images et commandes. La migration s'appuie sur l'API Webservice REST de PrestaShop, avec des tables de staging intermédiaires (llx_psimport_*) qui permettent d'inspecter et de corriger les données avant l'import définitif dans Dolibarr, et de rejouer un import sans re-solliciter l'API.

Tous les produits sont importés en tant que service (Product::TYPE_SERVICE), car il s'agit de modules dématérialisés, indépendamment du type saisi côté PrestaShop.

Propriété Valeur
Auteur Philippe Grand — Atoo-Net
Version 1.0
Licence GNU GPL v3+
Dolibarr minimum v24.0
PHP minimum v8.1
PrestaShop pris en charge v1.6 à 9.x (API Webservice)

Pourquoi utiliser psimport ?

psimport permet de rapatrier dans Dolibarr l'ensemble des données d'une boutique PrestaShop existante, sans connexion directe à la base MySQL de PrestaShop (hormis une étape ponctuelle et optionnelle pour les fichiers téléchargeables). Chaque étape passe par une table de staging que vous pouvez contrôler avant l'import définitif.

Cas d'utilisation

Migration complète d'une boutique PrestaShop

Récupérez catégories, tiers/adresses, produits (avec résolution de la TVA via les groupes de règles de taxes de PrestaShop) et commandes, via l'API Webservice REST, sans installation supplémentaire côté PrestaShop hormis l'activation du Webservice.

Contrôle avant import définitif

Chaque ressource est d'abord récupérée dans une table de staging (llx_psimport_*) où les données peuvent être inspectées, corrigées, avant l'import réel dans Dolibarr. Ceci évite de resolliciter l'API PrestaShop en cas d'erreur.

Réimport ciblé après correction d'erreurs

Chaque ligne de staging porte un statut (import_status). Les lignes en erreur peuvent être remises à "à importer" (bouton "Réinitialiser les erreurs" ou requête SQL) puis rejouées, sans tout réimporter depuis le début.

Récupération des fichiers téléchargeables de modules

L'API Webservice de PrestaShop n'expose pas les fichiers attachés aux "Produits virtuels/téléchargeables" (limitation confirmée par le ticket officiel PrestaShop/PrestaShop#27834). Un module PrestaShop "bridge" fourni avec psimport contourne cette limitation en lecture seule.

Galerie complète des images produits

Au-delà de l'image de couverture (récupérée avec le produit), psimport peut aussi rapatrier la galerie complète de chaque produit via le sous-endpoint products/{id}/images de l'API.

Installation

Prérequis côté PrestaShop :

  1. Activer le Webservice : Paramètres avancés > Webservice > Activer le service web PrestaShop → Oui
  2. Créer une clé API ("Ajouter une nouvelle clé de webservice") avec les permissions GET sur : categories, customers, addresses, countries, products, images, tax_rule_groups, tax_rules, taxes, orders, order_details
  3. Noter l'URL du site et la clé API générée

Prérequis côté Dolibarr :

  1. Modules activés : Tiers, Produits, Services, Catégories, Commandes, Factures
  2. Activer le module psimport dans Accueil → Configuration → Modules/Applications (famille "Autres")

L'activation du module crée automatiquement les tables de staging llx_psimport_* par le mécanisme standard d'activation de module Dolibarr — aucun import SQL manuel n'est nécessaire.

Le module psimport n'a ni menu, ni permission. Son seul écran est la page de configuration (Configuration > Modules/Applications > psimport > icône clé à molette), qui permet de saisir l'URL de la boutique PrestaShop et la clé du Webservice API (constantes PSIMPORT_API_URL et PSIMPORT_API_KEY), utilisées par défaut par les scripts CLI lorsqu'aucun paramètre n'est fourni en ligne de commande. Toute la migration se pilote ensuite depuis la ligne de commande via les scripts du dossier scripts/.

Configuration

Connexion API PrestaShop

Constante Description
PSIMPORT_API_URL URL de base de l'API Webservice PrestaShop (ex. https://www.monsite.com/api)
PSIMPORT_API_KEY Clé du Webservice API PrestaShop

Dépannage : HTTP 403 sur l'API (hébergement derrière Cloudflare)

Si le test de connexion (ou n'importe quel script fetch-*/import-*) échoue avec une erreur du type HTTP 403 Forbidden avec un corps de réponse vide et sans redirection détectée, alors que le même appel fonctionne dans un navigateur, le blocage n'est probablement pas dû à PrestaShop mais à un pare-feu applicatif en amont (Cloudflare, ModSecurity, etc.) qui rejette la requête avant qu'elle n'atteigne le site.

Cas rencontré et confirmé sur un hébergement Cloudflare (plan Free) : le Bot Fight Mode gratuit de Cloudflare détecte les appels cURL du module (pas de navigateur, pas de JS, User-Agent non standard) comme du trafic de bot et répond par un "Managed Challenge" — ce qui se traduit côté module par un 403 à corps vide.

Pour confirmer : dans le dashboard Cloudflare, Security > Analytics > Events, filtrer sur les dernières minutes après un nouveau test. Si l'entrée bloquée indique Service = "Bot fight mode" et Action = "Managed Challenge", c'est ce cas de figure.

Sur le plan Free, ce Bot Fight Mode ne peut pas être contourné sélectivement par chemin d'URL. La seule solution est de désactiver le toggle globalement : Security > Settings > "Bot fight mode" → Off le temps de faire tourner les scripts d'import, puis réactivation ensuite si besoin.

Sur un plan Cloudflare payant (Pro et plus), le Super Bot Fight Mode permet un contournement plus fin via une Security Rule "Skip" ciblée sur /api*.

Utilisation

gestion de l'import

Ordre d'exécution

# 1. Catégories
php scripts/fetch-categories.php https://www.monsite.com/api ABCDEF... 0 0
php scripts/import-categories.php 0

# 2. Clients + adresses
php scripts/fetch-customers.php https://www.monsite.com/api ABCDEF... 0 0
php scripts/import-customers.php 0

# 3. Produits (TVA résolue via tax_rules_groups, image de couverture téléchargée)
php scripts/fetch-products.php https://www.monsite.com/api ABCDEF... 0 0
php scripts/import-products.php https://www.monsite.com/api ABCDEF... 0

# 4. Fichiers téléchargeables des modules (nécessite le module PrestaShop "Psimport Bridge")
php scripts/fetch-product-files.php https://www.monsite.com/api ABCDEF... 0 0
php scripts/import-product-files.php https://www.monsite.com/api ABCDEF... 0

# 4b. Galerie complète des images produits
php scripts/fetch-product-images.php https://www.monsite.com/api ABCDEF... 0 0
php scripts/import-product-images.php https://www.monsite.com/api ABCDEF... 0

# 5. Commandes (configurer $importable_state_ids et $payment_module_map en tête du script avant le premier lancement)
php scripts/fetch-orders.php https://www.monsite.com/api ABCDEF... 0 0
php scripts/import-orders.php 0

Paramètres communs :

  • limit = 0 pour tout récupérer/importer, ou un nombre pour un test sur un échantillon
  • clean_all_before_fetch = 1 pour vider la table de staging avant un nouveau fetch (0 par défaut = on accumule/met à jour)

Rejouer un import après correction d'erreurs

Chaque table de staging a une colonne import_status :

  • 0 = à importer
  • 1 = importé avec succès (fk_dolibarr contient l'id de l'objet Dolibarr créé)
  • 2 = en erreur (le détail est dans import_error)

Pour rejouer uniquement les lignes en erreur après correction, utilisez le bouton "Réinitialiser les erreurs" de l'onglet Gestion de l'import, ou :

UPDATE llx_psimport_product SET import_status = 0 WHERE import_status = 2;

puis relancer le script d'import correspondant.

Fichiers téléchargeables des modules

L'API Webservice de PrestaShop n'expose pas les fichiers de "Produit virtuel/téléchargeable" (confirmé par le ticket GitHub officiel PrestaShop/PrestaShop#27834 et plusieurs fils du forum PrestaShop). Cette limitation est contournée par un module PrestaShop "bridge" à installer une seule fois sur la boutique.

Solution recommandée : module Psimport Bridge (1 clic, comme les autres imports) :

  1. Installez le module fourni dans bridge/psimportbridge/ sur votre boutique PrestaShop (import du zip depuis le back-office, ou copie FTP/SFTP dans modules/ puis installation)
  2. Aucune configuration supplémentaire : le module réutilise la même clé Webservice API déjà renseignée (PSIMPORT_API_KEY)
  3. Dans l'onglet Gestion de l'import, utilisez les boutons ↓ Fetch puis → Importer sur la ligne « Fichiers produits », comme pour les autres ressources
  4. Une fois la migration terminée, le module peut être désinstallé sans risque (lecture seule, aucune écriture en base ni sur le disque de PrestaShop)

Ce module n'autorise le téléchargement que des fichiers déjà référencés dans ps_product_download (protection contre la lecture de fichiers arbitraires).

Solution alternative (si le module bridge ne peut pas être installé) : export CSV manuel de ps_product_download depuis phpMyAdmin/Adminer, plus une copie locale du dossier download/ de PrestaShop, puis php scripts/import-product-files.php /chemin/export.csv /chemin/download/.

Galerie complète des images produits

fetch-product-images.php / import-product-images.php récupèrent toutes les images de chaque produit PrestaShop (pas seulement la couverture), via le sous-endpoint products/{id}/images de l'API Webservice, dans une table de staging dédiée llx_psimport_productimage.

Points à vérifier lors du premier lancement :

  • La position de chaque image dans la galerie Dolibarr est déduite de l'ordre renvoyé par l'API — vérifiez visuellement l'ordre après import et réordonnez manuellement si besoin
  • Pour éviter d'afficher deux fois la même photo (couverture + galerie), les doublons exacts sont détectés et ignorés silencieusement
  • La forme exacte de la réponse JSON peut varier selon les versions de PrestaShop : testez d'abord avec limit=5 sur un échantillon

Vérifications après chaque étape

  1. Inspecter le contenu des tables llx_psimport_* (cohérence des données, TVA résolue correctement)
  2. Dans l'UI Dolibarr, vérifier : arborescence des catégories, fiches tiers (adresse, contact), fiches produits (prix HT/TTC, TVA, image, fichier joint), commandes (lignes, totaux, statut)
  3. Comparer les comptages (nombre de catégories/clients/produits/commandes) entre PrestaShop, la table de staging, et Dolibarr

FAQ

Faut-il un accès direct à la base MySQL de PrestaShop ?

Non. Toute la migration passe par l'API Webservice REST de PrestaShop, à l'exception d'une étape ponctuelle et optionnelle (export CSV manuel) si le module bridge ne peut pas être installé pour les fichiers téléchargeables.

Quelles versions de PrestaShop sont compatibles ?

De PrestaShop 1.6 à 9.x, via l'API Webservice standard. Le module bridge (côté PrestaShop) déclare lui-même cette plage de compatibilité.

Que faire si une ressource échoue partiellement à l'import ?

Corriger la donnée en cause (dans la table de staging ou côté PrestaShop), remettre les lignes en erreur à import_status = 0 (bouton "Réinitialiser les erreurs" ou requête SQL), puis relancer uniquement le script d'import concerné.

Le test de connexion échoue avec un 403 alors que l'URL fonctionne dans un navigateur

Voir la section Dépannage HTTP 403 : c'est généralement un pare-feu applicatif (Cloudflare Bot Fight Mode) qui bloque les appels cURL, pas PrestaShop lui-même.

Le module Psimport Bridge modifie-t-il des données sur PrestaShop ?

Non, il est en lecture seule : aucune écriture en base ni sur le disque de PrestaShop, et il n'autorise le téléchargement que des fichiers déjà référencés dans ps_product_download.

Voir aussi

Autres langues