PS PrestaShop Intermédiaire

Import Fournisseurs & Dropshipping pour PrestaShop 8 & 9

Installer, configurer et automatiser l'import multi-fournisseurs (CSV, XML, JSON), les marges, les déclinaisons et la synchronisation du stock.

Mis à jour Version du module 1.2.1

Présentation

Le module Import Fournisseurs & Dropshipping (nom technique dfsupplierfeed) importe et synchronise automatiquement les catalogues de vos fournisseurs dans PrestaShop 8 et 9. Il gère plusieurs fournisseurs et plusieurs flux aux formats CSV, XML et JSON, applique vos règles de marge, construit les déclinaisons, synchronise le stock par cron, et arbitre les doublons EAN13 entre sources grâce à une priorité par fournisseur.

Le module ne remplace pas l’import CSV natif de PrestaShop (fait pour un chargement manuel unique) : il industrialise des imports récurrents depuis plusieurs sources, avec marges, déclinaisons et synchronisation automatiques.

Installation

  1. Depuis le back-office, allez dans Modules > Gestionnaire de modules, puis Téléverser un module.
  2. Sélectionnez le fichier dfsupplierfeed.zip et validez.
  3. Une fois installé, cliquez sur Configurer.

À l’installation, le module crée cinq tables (dfsf_supplier, dfsf_feed, dfsf_rule, dfsf_product, dfsf_log) et génère un jeton de cron unique.

Vue d’ensemble de l’interface

  • Dashboard — compteurs et alerte sur les flux dont l’import est en cours.
  • Suppliers — fournisseurs et priorités.
  • Feeds — flux, analyse, correspondance des champs et options.
  • Margin rules — règles de calcul des prix de vente.
  • Logs — historique détaillé des imports.
  • Settings & Cron — réglages généraux, gros catalogues, URLs de cron.

Étape 1 — Créer vos fournisseurs

Dans l’onglet Suppliers, ajoutez un fournisseur avec :

  • Nom du fournisseur.
  • Priorité — entier, 1 étant la priorité la plus forte. Elle tranche les doublons EAN13.
  • Actif — un fournisseur inactif est ignoré par le cron.
  • Créer le fournisseur natif PrestaShop — recommandé : remplit aussi le coût d’achat dans product_supplier.

Attribuez les meilleures priorités (chiffres les plus bas) aux fournisseurs les plus fiables ou les moins chers : ce sont eux qui « posséderont » les produits partagés.

Étape 2 — Créer le flux et laisser le module analyser

Dans l’onglet Feeds, créez le flux avec son fournisseur, son type de source (URL distante ou fichier local situé dans le répertoire de la boutique) et son format. Enregistrez, puis cliquez sur le bouton loupe de la ligne du flux.

Le module télécharge un échantillon et affiche :

  • le items_path détecté pour les flux XML et JSON ;
  • la liste de tous les champs réellement présents, avec des valeurs d’exemple ;
  • une correspondance complète pré-remplie, modifiable avant application.

Les noms de colonnes sont reconnus en français, anglais, espagnol, allemand et italien, avec un contrôle de cohérence sur les valeurs : un champ nommé « prix » mais contenant du texte ne sera pas proposé comme coût.

Vérifiez toujours la proposition avant de l’appliquer. Beaucoup de fournisseurs livrent un prix de vente conseillé là où le module attend un coût d’achat : la marge serait alors appliquée par-dessus un prix déjà marginé.

Étape 3 — La correspondance des champs

La correspondance est un objet JSON reliant les colonnes ou nœuds du flux à des champs normalisés. Les 16 champs canoniques sont :

name reference ean13 mpn cost quantity description description_short category manufacturer weight tax_rate image images group_reference attributes

Seul reference ou ean13 est obligatoire : ce sont les deux clés de rapprochement. Une ligne sans l’un ni l’autre est rejetée.

CSV

Reliez chaque champ à un en-tête de colonne, ou à un index de colonne à partir de 0 lorsque les en-têtes sont inexploitables. Le délimiteur est détecté automatiquement, les champs multilignes entre guillemets sont gérés, et les formats 1 234,56 comme 1,234.75 sont acceptés.

{
  "fields": {
    "name": "product_name",
    "reference": "sku",
    "ean13": "ean",
    "cost": "price",
    "quantity": "stock",
    "category": "category",
    "image": "image_url"
  }
}

Correspondance par index, pour un fichier sans en-tête exploitable :

{
  "fields": { "reference": "0", "ean13": "1", "name": "2", "cost": "3", "quantity": "4" }
}

XML

items_path désigne le nœud répété, à n’importe quelle profondeur. Les chemins des champs sont relatifs à ce nœud, et @nom lit un attribut.

{
  "items_path": "products/product",
  "fields": {
    "reference": "@sku",
    "name": "title",
    "ean13": "ean",
    "cost": "pricing/wholesale",
    "quantity": "stock/quantity",
    "image": "images/image"
  }
}

Les chemins étant relatifs à l’article, une valeur présente uniquement sur un nœud ancêtre ne peut pas être lue : la navigation .. n’existe pas. Si votre flux XML place la référence parent au-dessus des variantes, demandez au fournisseur un export à plat.

JSON

items_path utilise la notation pointée jusqu’au tableau d’articles. Un segment numérique lit une entrée de tableau : images.0 est la première image. Laissez items_path vide si le fichier commence directement par [.

{
  "items_path": "data.products",
  "fields": {
    "reference": "sku",
    "name": "name",
    "ean13": "barcode",
    "cost": "prices.cost",
    "quantity": "inventory.available",
    "image": "images.0"
  }
}

L’onglet Feeds contient treize exemples commentés couvrant les structures les plus courantes.

Étape 4 — Définir vos marges

Dans l’onglet Margin rules, chaque règle calcule le prix de vente HT à partir du coût d’achat HT :

  • Pourcentagecoût × (1 + valeur/100).
  • Coefficientcoût × valeur.
  • Addition fixecoût + valeur.

Un arrondi psychologique optionnel s’applique ensuite : x.99, x.95, x.90 ou arrondi à l’entier supérieur.

Portée et résolution

Une règle peut viser un fournisseur, une catégorie, les deux, ou être globale. La plus spécifique gagne, dans cet ordre : fournisseur + catégorie, puis fournisseur seul, puis catégorie seule, puis règle globale. Les règles de catégorie s’appliquent aussi aux sous-catégories, la plus proche du produit l’emportant. Sans aucune règle, la marge par défaut des réglages est utilisée.

La priorité EAN entre sources

Quand le même ean13 apparaît dans plusieurs flux :

  • le fournisseur dont la priorité est la meilleure possède le produit ; prix, stock et coût viennent de son flux ;
  • les autres sources sont ignorées pour cette référence ;
  • si un fournisseur mieux priorisé apporte ensuite cet EAN, il reprend automatiquement la propriété du produit.

Les déclinaisons

Activez Construire les déclinaisons sur le flux, et mappez deux champs supplémentaires :

  • group_reference — identique pour toutes les variantes d’un même produit ;
  • attributes — les options de la variante, par exemple Taille:M|Couleur:Rouge.

Les séparateurs |, , et ; sont acceptés entre les paires, : et = entre le nom et la valeur. Le module crée le produit parent à partir de la première variante rencontrée, puis une combinaison par variante avec sa référence, son EAN, son coût et son stock. Les groupes d’attributs et les attributs manquants sont créés automatiquement.

Le flux doit livrer une ligne par variante. Le prix du parent sert de référence et chaque combinaison porte l’écart de prix calculé depuis son propre coût.

Ce que le flux a le droit d’écraser

Cinq cases par flux déterminent les champs synchronisés : prix, stock, nom, descriptions, images. Par défaut seuls les prix et le stock sont cochés.

Si vous ajustez vos tarifs à la main, décochez les prix : le flux ne synchronisera plus que le stock, tout en continuant à suivre le coût d’achat fournisseur.

Les images ne sont réimportées que lorsque les URL du flux ont réellement changé, ce qui évite de retélécharger tout le catalogue à chaque passage.

Produits retirés du catalogue fournisseur

Chaque flux choisit son comportement : ne rien faire, mettre le stock à zéro, désactiver, ou les deux. L’action s’applique à la fin d’un import complet terminé, et uniquement aux produits que ce flux avait créés ou reliés.

Catégories et devises

Le champ category accepte un nom simple ou un chemin complet, par exemple Maison > Bureau > Chaises. Le séparateur est configurable par flux, et l’option Créer les catégories manquantes crée les niveaux absents.

Si le fournisseur facture dans une autre devise, sélectionnez-la sur le flux : les coûts sont convertis vers la devise par défaut de la boutique avant application des marges.

Gros catalogues

Les flux sont lus en streaming : la mémoire consommée ne dépend pas de la taille du fichier. Le traitement est de plus découpé en lots reprenables. Deux réglages, dans l’onglet Settings & Cron :

  • Point de reprise tous les N articles (2000 par défaut) — la position est enregistrée régulièrement, donc un process interrompu par l’hébergeur repart du dernier point, pas du début.
  • Budget de temps par passe (120 s par défaut) — une passe s’arrête après ce délai et enregistre sa position ; l’appel cron suivant reprend exactement au même article.

Un très gros catalogue demande simplement plusieurs passages de cron et se termine tout seul. La liste des flux affiche la progression, et le rapport JSON du cron indique le pic mémoire et l’article de reprise.

Le fichier téléchargé est mis en cache tant que l’import n’est pas terminé : une reprise ne retélécharge rien et l’ordre des articles reste stable.

Lancer un import manuellement

  • Import complet (icône lecture) — met à jour les produits liés et crée les manquants si le flux l’autorise.
  • Sync stock (icône rafraîchir) — met à jour uniquement prix et quantités des produits déjà liés.

Depuis le back-office, une passe est volontairement limitée à 45 secondes pour ne pas dépasser le délai du serveur web. Si le flux est volumineux, un message indique l’article atteint : relancez, ou laissez le cron terminer.

Automatiser avec le cron

# Synchro stock toutes les heures
0 * * * * curl -sL "https://votreboutique.tld/index.php?fc=module&module=dfsupplierfeed&controller=cron&token=VOTRE_TOKEN&mode=stock" > /dev/null

# Import complet chaque nuit
30 3 * * * curl -sL "https://votreboutique.tld/index.php?fc=module&module=dfsupplierfeed&controller=cron&token=VOTRE_TOKEN&mode=full" > /dev/null

Paramètres optionnels : &id_feed=N pour ne traiter qu’un flux, &budget=600 pour autoriser une exécution plus longue.

Si vous régénérez le jeton dans les réglages, mettez à jour vos tâches cron : l’ancienne URL renverra une erreur 403.

Réglages généraux

  • Produits créés actifs immédiatement — désactivé par défaut, pour vérifier avant publication.
  • Désactiver les produits en rupture chez le fournisseur, avec réactivation au retour du stock.
  • Marge par défaut quand aucune règle ne correspond.
  • Rétention des journaux et purge automatique.
  • À la désinstallation — supprimer les données ou tout conserver pour une réinstallation.
  • Vider le cache des flux et les curseurs dans le panneau Maintenance.

Suivi et journaux

L’onglet Logs liste chaque exécution : flux, mode, articles traités, créés, mis à jour, ignorés, en erreur, disparus, indicateur de complétude avec point de reprise, temps d’exécution et détail des premières erreurs.

Dépannage

« Feed file not found or outside shop directory »

Pour une source fichier, le chemin doit pointer vers un fichier lisible situé dans le répertoire de la boutique. Utilisez un chemin relatif à la racine ou une URL.

L’analyse ne trouve pas d’articles

Renseignez items_path manuellement dans la correspondance, puis relancez l’analyse : elle repartira de ce chemin.

Les produits sont créés mais invisibles en front

C’est le comportement par défaut : les produits créés sont désactivés. Vérifiez-les puis activez-les, ou activez la publication automatique dans les réglages.

Un fournisseur n’écrase jamais un produit partagé

Sa priorité est probablement moins bonne que celle du fournisseur propriétaire. Ajustez les priorités dans l’onglet Suppliers.

Les prix semblent trop élevés ou trop bas

Vérifiez si le flux fournit des coûts TTC (option et taux de taxe), si la devise du flux est correcte, et quelle règle de marge s’applique réellement via l’ordre de résolution. Vérifiez aussi que le champ mappé sur cost est bien un coût d’achat et non un prix de vente conseillé.

Les déclinaisons ne sont pas créées

Vérifiez que l’option est activée sur le flux, que group_reference et attributes sont mappés, et que le flux livre bien une ligne par variante.

L’import ne va jamais au bout

C’est normal sur un très gros flux : il progresse par passes. La colonne Statut indique l’article de reprise. Si la progression est trop lente, augmentez le budget de temps par passe.

Compatibilité

  • PrestaShop 8.0 à 9.x, PHP 7.4 à 8.3.
  • Sans override du cœur PrestaShop.
  • Multiboutique : les produits créés sont associés aux boutiques du contexte.
  • Interface traduite en français et en anglais.
Cette page vous a-t-elle été utile ?

Toujours bloqué ? Contactez le support