PS PrestaShop Intermédiaire

Import Fournisseurs & Dropshipping pour PrestaShop 8 & 9

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

Mis à jour Version du module 1.0.0

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 pour calculer les prix de vente à partir du coût d’achat, synchronise le stock toutes les heures via 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 et synchronisation de stock 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

La page de configuration est organisée en onglets :

  • Dashboard — compteurs (fournisseurs, flux, produits liés, règles) et rappel du fonctionnement.
  • Suppliers — création des fournisseurs et de leur priorité.
  • Feeds — définition des flux et de leur mapping.
  • Margin rules — règles de calcul des prix de vente.
  • Logs — historique des imports.
  • Settings & Cron — réglages généraux et URLs de cron prêtes à copier.

Étape 1 — Créer vos fournisseurs

Dans l’onglet Suppliers, ajoutez un fournisseur avec :

  • Nom — libellé du fournisseur.
  • Priorité — entier, 1 étant la priorité la plus forte. Elle sert à trancher les doublons EAN13 (voir plus bas).
  • Actif — un fournisseur inactif est ignoré par le cron.
  • Créer le fournisseur natif PrestaShop — recommandé : associe un fournisseur PrestaShop standard, ce qui 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 — Configurer un flux

Dans l’onglet Feeds, chaque flux est rattaché à un fournisseur et comporte :

  • Type de sourceURL distante ou fichier local (chemin relatif à la racine de la boutique, restreint à ce répertoire pour des raisons de sécurité).
  • Source — l’URL ou le chemin du fichier. Les réponses compressées gzip sont décodées automatiquement.
  • Format — CSV, XML ou JSON.
  • Prix TTC ? et Taux de taxe — si le flux fournit des coûts TTC, le module les convertit en HT avec ce taux.
  • Catégorie par défaut — catégorie des produits créés sans catégorie explicite.
  • Créer les produits manquants, Importer les images, Inclure dans la sync horaire, Actif.

Le mapping des champs

Le mapping est un objet JSON qui relie les colonnes/nœuds de votre flux aux champs produit normalisés. Les 13 champs canoniques disponibles sont : name, reference, ean13, cost, quantity, description, description_short, category, manufacturer, weight, tax_rate, image, mpn.

Mapping CSV

Reliez chaque champ à un en-tête de colonne (ou à un index de colonne à partir de 0). Le délimiteur est détecté automatiquement (;, ,, tabulation ou |) et les virgules décimales sont acceptées.

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

Mapping XML

Renseignez items_path, le chemin des nœuds répétés (ex. products/product), puis mappez chaque champ à un chemin relatif. Un préfixe @ lit un attribut, et les sous-éléments se séparent par des barres obliques.

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

Mapping JSON

Renseignez items_path, le chemin du tableau d’articles en notation pointée (ex. data.products), puis mappez chaque champ. Les index de tableau s’écrivent comme des segments numériques (ex. images.0).

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

Une ligne est ignorée si elle n’a ni EAN13 ni référence fournisseur : ce sont les deux clés de rapprochement. Les EAN sont validés puis normalisés sur 13 chiffres.

Étape 3 — 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). Ex. valeur 35 → +35 %.
  • Coefficientcoût × valeur. Ex. valeur 1,8 → ×1,8.
  • 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 des règles

Une règle peut viser un fournisseur, une catégorie, les deux, ou être globale. Lorsqu’un produit correspond à plusieurs règles, la plus spécifique gagne, selon cet ordre :

  1. fournisseur + catégorie
  2. fournisseur seul
  3. catégorie seule
  4. règle globale

Les règles de catégorie s’appliquent aussi aux sous-catégories : une règle sur la catégorie exacte du produit l’emporte sur une règle placée sur une catégorie parente. En l’absence de toute règle, la marge par défaut (onglet Settings) est utilisée.

La priorité EAN entre sources

C’est le cœur du module en multi-fournisseurs. Quand le même ean13 apparaît dans plusieurs flux :

  • Le fournisseur dont la priorité est la meilleure (chiffre le plus bas) possède le produit ; les prix, stock et coût proviennent de son flux.
  • Les autres sources sont ignorées pour cette référence (statut « skipped » dans les logs).
  • Si un fournisseur mieux priorisé apporte ensuite cet EAN, il reprend automatiquement la propriété du produit.

Vous décidez qui fait autorité en jouant sur les priorités : commander la même référence chez plusieurs grossistes devient sûr, sans que les flux se contredisent.

Lancer un import manuellement

Depuis l’onglet Feeds, chaque flux dispose de deux boutons :

  • Import complet (icône lecture) — met à jour les produits liés et crée les produits 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.

Automatiser avec le cron

L’onglet Settings & Cron affiche deux URLs prêtes à copier, protégées par un jeton. Configurez-les dans le planificateur de tâches de votre serveur :

# Synchro stock toutes les heures (prix + quantités des produits liés)
0 * * * * curl -s "https://votreboutique.tld/index.php?fc=module&module=dfsupplierfeed&controller=cron&token=VOTRE_TOKEN&mode=stock" > /dev/null

# Import complet chaque nuit (créations + mises à jour)
30 3 * * * curl -s "https://votreboutique.tld/index.php?fc=module&module=dfsupplierfeed&controller=cron&token=VOTRE_TOKEN&mode=full" > /dev/null

Ajoutez &id_feed=N pour ne traiter qu’un flux précis. L’endpoint renvoie un rapport JSON (créés, mis à jour, ignorés, erreurs par flux).

Si vous régénérez le jeton dans les réglages, pensez à mettre à 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 : les produits créés par les flux sont en brouillon pour que vous les validiez avant publication.
  • Marge par défaut — appliquée quand aucune règle ne correspond.
  • Rétention des logs — nombre de jours avant purge automatique.
  • Régénérer le jeton de cron.

Suivi et journaux

L’onglet Logs liste chaque exécution avec le flux concerné, le mode, les compteurs (créés / mis à jour / ignorés / erreurs), le temps d’exécution et le détail des premières erreurs rencontrées. Les journaux sont purgés automatiquement selon la rétention configurée.

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.

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 « Produits créés actifs immédiatement » dans les réglages.

Un fournisseur n’écrase jamais un produit partagé

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

Les prix semblent trop élevés/bas

Vérifiez si le flux fournit des coûts TTC (option « Prix TTC ? » + taux de taxe) et contrôlez la règle de marge qui s’applique réellement via l’ordre de résolution.

Compatibilité

  • PrestaShop 8.0 à 9.x, PHP 7.4 à 8.3.
  • Sans override du cœur PrestaShop.
  • Module traduit en FR, EN, ES, DE, IT.
Cette page vous a-t-elle été utile ?

Toujours bloqué ? Contactez le support