PS PrestaShop Intermédiaire

Connecteur Odoo — Guide complet

Installer, configurer et exploiter la synchronisation temps réel PrestaShop ⇄ Odoo (produits et déclinaisons, stock, clients, commandes, factures, expéditions) pour PrestaShop 8 et 9 et Odoo 14 à 20.

Mis à jour Version du module 1.1.1

Le Connecteur Odoo synchronise en temps réel et dans les deux sens vos produits et déclinaisons, votre stock, vos clients, vos commandes, vos factures et vos expéditions entre PrestaShop et Odoo. Ce guide couvre l’installation, la connexion, chaque onglet de réglages, la synchronisation initiale, le cron, les webhooks Odoo et le dépannage.

Prérequis

  • PrestaShop 8.0 à 9.x.
  • PHP 7.4 à 8.5 avec l’extension cURL.
  • Odoo 14 à 20, auto-hébergé, Odoo.sh ou Odoo Online, joignable depuis votre serveur PrestaShop. Sur Odoo Online, votre formule doit inclure l’accès à l’API externe.
  • Les applications Odoo Ventes et Inventaire, plus Facturation si vous créez les factures. L’application Livraison est nécessaire pour renvoyer le numéro de suivi à PrestaShop.
  • Un utilisateur Odoo dédié, avec les droits Ventes, Inventaire et Facturation, et une clé API.

Le module communique avec Odoo via JSON-RPC. L’extension PHP xmlrpc, retirée de PHP 8, n’est pas nécessaire.

Installez l’application Inventaire dans Odoo avant d’envoyer vos produits. Depuis Odoo 18, le suivi du stock d’un article dépend de cette application : des articles créés sans elle ne seraient pas suivis en stock.

Installation et mise à jour

  1. Dans le back-office, ouvrez Modules > Gestionnaire de modules, cliquez sur Téléverser un module et déposez le fichier zip du module.
  2. Ouvrez ensuite la configuration via le bouton Configurer ou le menu Odoo Connector.

Pour mettre à jour, téléversez la nouvelle version de la même façon : PrestaShop lance la mise à jour, et vos réglages, votre clé API et vos correspondances sont conservés.

Générer une clé API dans Odoo

  1. Connectez-vous à Odoo avec l’utilisateur dédié à la synchronisation.
  2. Cliquez sur votre avatar, puis Mon profil (ou Préférences), onglet Sécurité du compte, et Nouvelle clé API.
  3. Copiez la clé : elle ne s’affiche qu’une seule fois.

Un utilisateur dédié (par exemple « PrestaShop Sync ») plutôt qu’un compte administrateur personnel vous donne un historique clair dans Odoo et permet de révoquer l’accès à tout moment.

Onglet Connexion

  • URL Odoo : l’adresse de votre instance, commençant par https:// (ou http://), par exemple https://mon-entreprise.odoo.com.
  • Base de données : le nom exact de la base Odoo.
  • Identifiant : le login (souvent l’e-mail) de l’utilisateur dédié.
  • Clé API : stockée chiffrée. Laissez le champ vide pour conserver la clé actuelle.

Cliquez sur Tester la connexion : le module affiche la version d’Odoo, l’utilisateur et la société. Cliquez ensuite sur Charger les listes depuis Odoo pour choisir la société, l’entrepôt, l’emplacement, l’équipe commerciale, le vendeur et le journal de paiement dans des listes. Enregistrez, puis cochez Activer la synchronisation.

Par sécurité, la clé API enregistrée n’est jamais envoyée vers une autre adresse, base ou identifiant que ceux enregistrés : pour tester un autre serveur, saisissez sa clé API.

Le même onglet propose aussi le traitement temps réel (les changements partent juste après l’affichage de la page au visiteur ; désactivé, c’est le cron qui les envoie), le mode test, le journal détaillé, la liste d’IP autorisées pour le webhook, et l’activation de chaque flux : clients, produits, stock, commandes.

Connexion à Odoo par URL, base, identifiant et clé API chiffrée, avec test de connexion réussi
Connexion à Odoo par URL, base, identifiant et clé API chiffrée, avec test de connexion réussi

Onglet Produits

  • Sens des produits : PrestaShop vers Odoo, Odoo vers PrestaShop, ou les deux.
  • Image de couverture, arborescence de catégories (avec la catégorie Odoo parente) et prix d’achat envoyé comme coût (à désactiver si Odoo calcule les coûts en moyenne pondérée ou FIFO).
  • Archiver les variantes Odoo absentes de PrestaShop.
  • Correspondance de champs supplémentaires : une ligne par champ, au format champ_odoo=champ_prestashop.
  • Odoo vers PrestaShop : prix, nom, référence et EAN13, statut actif, au choix.
  • Importer les nouveaux articles Odoo : les articles vendables créés dans Odoo sont créés dans PrestaShop, avec leurs variantes en déclinaisons, dans la catégorie et la règle de taxe choisies, activés ou non.
Réglages de synchronisation des produits et déclinaisons entre PrestaShop et Odoo, dans les deux sens
Réglages de synchronisation des produits et déclinaisons entre PrestaShop et Odoo, dans les deux sens

Onglet Stock

  • Maître du stock : Odoo (recommandé), PrestaShop, ou les deux. Les mouvements liés aux commandes ne sont jamais comptés deux fois.
  • Quantité envoyée à PrestaShop : la quantité disponible (déduction faite des réservations, recommandé pour éviter la survente) ou la quantité en stock.
  • Entrepôt Odoo, également appliqué aux commandes, et emplacement spécifique facultatif.
Synchronisation du stock par déclinaison avec Odoo comme maître, quantité disponible et entrepôt
Synchronisation du stock par déclinaison avec Odoo comme maître, quantité disponible et entrepôt

Onglet Commandes

  • Envoi des commandes à Odoo : dès leur création ou seulement une fois payées, avec une date en dessous de laquelle les commandes sont ignorées.
  • Confirmer le devis Odoo à la commande ou au paiement : la confirmation crée le bon de livraison dans Odoo.
  • Taxes : taux PrestaShop (les taxes Odoo au même taux sont utilisées et les totaux correspondent) ou laisser Odoo calculer (taxes des articles et positions fiscales d’Odoo).
  • Statuts PrestaShop qui annulent la commande Odoo, équipe commerciale et vendeur.
  • Les livraisons Odoo mettent à jour PrestaShop : à la validation de la livraison, la commande prend le statut choisi (Expédié par défaut) avec le numéro de suivi, et le client reçoit l’e-mail d’expédition.
  • Les annulations Odoo mettent à jour PrestaShop.

Chaque ligne de commande pointe vers la variante Odoo de la déclinaison. Le port, l’emballage cadeau et les remises sont ajoutés en lignes distinctes, les remises étant ventilées par taux de taxe. Le module compare le total Odoo à celui de PrestaShop et signale tout écart dans le journal.

Envoi des commandes PrestaShop vers Odoo : confirmation au paiement, taxes, équipe commerciale et retour des expéditions
Envoi des commandes PrestaShop vers Odoo : confirmation au paiement, taxes, équipe commerciale et retour des expéditions
Bon de commande Odoo créé depuis PrestaShop : lignes par variante, frais de port, livré et facturé
Bon de commande Odoo créé depuis PrestaShop : lignes par variante, frais de port, livré et facturé

Onglet Facturation

  • Factures Odoo : ne pas créer, créer en brouillon, ou créer et valider. La facture est créée à partir de la commande confirmée, à la commande ou au paiement.
  • Enregistrer le paiement dans Odoo : la facture validée d’une commande payée est marquée payée dans le journal correspondant.
  • Journal de paiement par défaut, et journal par module de paiement : une ligne par module, au format nom_du_module=id_journal, par exemple stripe_official=7.

Sans journal configuré, le paiement n’est pas enregistré : le journal l’indique par un avertissement mentionnant le module de paiement concerné.

Création des factures Odoo validées et enregistrement du paiement dans le journal du module de paiement
Création des factures Odoo validées et enregistrement du paiement dans le journal du module de paiement
Facture client Odoo validée et payée automatiquement pour une commande PrestaShop
Facture client Odoo validée et payée automatiquement pour une commande PrestaShop

Synchronisation initiale

Sur une boutique existante, peuplez Odoo depuis l’onglet Outils, dans cet ordre :

  1. Envoyer les clients.
  2. Envoyer les produits.
  3. Importer le stock depuis Odoo si Odoo est maître du stock.
  4. Envoyer les commandes depuis une date.

Les tâches partent par lots via le cron. Si votre catalogue ou vos clients existent déjà dans Odoo, ils sont retrouvés au lieu d’être recréés : les clients par leur e-mail, les adresses par leur référence, les articles simples par leur référence (ou PS-<id> sans référence), les articles à déclinaisons par les références de leurs variantes et les commandes par leur origine.

Commencez avec le mode test activé : chaque opération est inscrite au journal sans rien écrire dans Odoo. Désactivez-le une fois le résultat vérifié.

Outils de synchronisation initiale : envoi des clients, des produits, import du stock Odoo et des commandes depuis une date
Outils de synchronisation initiale : envoi des clients, des produits, import du stock Odoo et des commandes depuis une date

Cron

Le cron traite la file d’attente et lit les changements faits dans Odoo (stock, produits, livraisons, annulations). Planifiez-le toutes les 1 à 5 minutes avec l’URL affichée dans le tableau de bord :

curl -s "https://votre-boutique.com/module/dfodooconnect/cron?token=VOTRE_JETON"

ou, sans limite de durée HTTP, en ligne de commande sur le serveur :

php /chemin/vers/prestashop/modules/dfodooconnect/cron.php

Deux exécutions ne tournent jamais en même temps. Le bouton Synchroniser maintenant du tableau de bord lance une exécution immédiate.

Webhooks Odoo (temps réel depuis Odoo)

Sans webhook, le cron lit les changements d’Odoo à chaque passage. Pour un retour immédiat, depuis Odoo 17, créez sans code une règle par modèle dans Paramètres > Technique > Règles d’automatisation :

  • Modèles : Produit, Variante de produit, Quantités ou Mouvement de stock, Transfert, Commande client.
  • Déclencheur : Lors de l’enregistrement.
  • Action : Envoyer une notification webhook vers l’URL du webhook affichée dans le tableau de bord.

Le jeton est obligatoire : l’URL du webhook affichée dans le tableau de bord le contient déjà (?token=). Pour vos propres scripts, il peut aussi être envoyé dans l’en-tête X-DF-Token. Le contenu reçu n’est jamais appliqué tel quel : il indique seulement quel enregistrement a changé, et le module le relit dans Odoo par l’API.

Une requête sans jeton valide est refusée avec un code 403. Vous pouvez en plus restreindre les adresses IP autorisées dans l’onglet Connexion.

Tableau de bord et suivi

Le tableau de bord indique l’état de santé (dernier cron, dernier appel Odoo réussi, plus ancienne tâche en attente, erreurs et avertissements sur 24 h), les compteurs de la file (en attente, nouvelle tentative, en quarantaine, terminées) et le nombre d’enregistrements liés. Les onglets File d’attente, Correspondances et Journal sont filtrables, et un encart Odoo sur les fiches commande, produit et client propose un bouton Synchroniser maintenant.

Tableau de bord du connecteur Odoo pour PrestaShop : file d'attente, santé de la synchronisation et enregistrements liés
Tableau de bord du connecteur Odoo pour PrestaShop : file d’attente, santé de la synchronisation et enregistrements liés
Correspondances entre fiches PrestaShop et Odoo : clients, produits, variantes et commandes avec lien vers Odoo
Correspondances entre fiches PrestaShop et Odoo : clients, produits, variantes et commandes avec lien vers Odoo
Journal de synchronisation Odoo : création des articles, du devis, facture, paiement et livraison validée
Journal de synchronisation Odoo : création des articles, du devis, facture, paiement et livraison validée
Commande PrestaShop liée au bon de commande Odoo, facture payée et statut Expédié reçu depuis Odoo
Commande PrestaShop liée au bon de commande Odoo, facture payée et statut Expédié reçu depuis Odoo
Encart Odoo sur la fiche produit PrestaShop : article lié, variantes et bouton Synchroniser maintenant
Encart Odoo sur la fiche produit PrestaShop : article lié, variantes et bouton Synchroniser maintenant
Encart Odoo sur la fiche client PrestaShop : contact Odoo lié et synchronisation à la demande
Encart Odoo sur la fiche client PrestaShop : contact Odoo lié et synchronisation à la demande

La file d’attente résiliente

Chaque changement est placé dans une file traitée après l’envoi de la page au client : le tunnel de commande n’attend jamais Odoo. En cas d’échec, la tâche est relancée avec un délai croissant (de 1 minute à 24 heures) ; après le nombre de tentatives configuré (8 par défaut), elle passe en quarantaine et se relance en un clic. Si Odoo ne répond plus, un coupe-circuit suspend les appels et conserve les tâches sans consommer leurs tentatives, puis la synchronisation reprend seule au retour d’Odoo.

File d'attente de synchronisation Odoo : tâches terminées, tentatives et relance en un clic
File d’attente de synchronisation Odoo : tâches terminées, tentatives et relance en un clic

Changer de base Odoo

Si vous passez d’une base Odoo à une autre (base de test vers production, migration), le module le détecte grâce à l’identifiant unique de la base. Il oublie alors les correspondances et les réglages propres à l’ancienne base (société, entrepôt, emplacement, équipe, vendeur, journal) et l’indique par un message : rechargez les listes depuis Odoo et vérifiez les réglages. À la synchronisation suivante, les fiches de la nouvelle base sont retrouvées par leurs références.

Champs synchronisés

Clients

Contact Odoo avec nom (ou société), e-mail, numéro de TVA, SIRET, pays, région, langue et téléphone. Les adresses de facturation et de livraison deviennent des contacts enfants au moment de l’envoi des commandes. Un numéro de TVA refusé par Odoo n’empêche pas l’envoi : le contact est créé sans TVA et un avertissement est ajouté au journal.

Produits et déclinaisons

Nom, prix hors taxe, coût, poids converti en kg, référence, code-barres, taxe au même taux (taxe de services pour les produits virtuels), catégorie et image. Chaque déclinaison est liée à une variante Odoo ; les attributs et leurs valeurs sont créés au besoin. Un produit inchangé n’est pas réécrit dans Odoo.

Article Odoo créé depuis PrestaShop avec ses attributs et variantes issus des déclinaisons
Article Odoo créé depuis PrestaShop avec ses attributs et variantes issus des déclinaisons

Stock

Par déclinaison, sur l’entrepôt ou l’emplacement choisi.

Commandes

Client, adresses de facturation et de livraison, lignes par variante, port, emballage cadeau, remises, devise via liste de prix, entrepôt, équipe et vendeur.

Dépannage

  • « Authentication refused by Odoo » : l’identifiant ou la clé API est incorrect, ou la clé a été révoquée. Générez une nouvelle clé.
  • « Odoo closed the connection: check the database name » : la base de données indiquée n’existe pas sur ce serveur.
  • « Odoo redirects this URL » : utilisez l’adresse indiquée dans le message (souvent la version https://).
  • « No Odoo sale tax at 20% » : créez dans Odoo une taxe de vente au taux indiqué, en pourcentage et hors taxe.
  • « No Odoo payment journal for payment module… » : choisissez un journal de paiement par défaut ou par module dans l’onglet Facturation.
  • Le numéro de suivi ne remonte pas : installez l’application Livraison dans Odoo. Le statut Expédié fonctionne sans elle.
  • « Total mismatch » : le total Odoo diffère de celui de PrestaShop ; vérifiez les taxes Odoo correspondant aux taux de la commande.
  • Le stock ou les livraisons ne remontent pas : vérifiez que le cron s’exécute (date du dernier cron dans le tableau de bord) et le sens configuré.
  • Une tâche est en quarantaine : lisez son message dans l’onglet File d’attente, corrigez la cause, puis relancez-la.

Désinstallation

La désinstallation supprime les tables de correspondance, de file et de journal ainsi que les réglages du module. Vos données dans Odoo ne sont pas modifiées. En cas de réinstallation, les fiches existantes dans Odoo sont retrouvées par leurs références, sans doublon.

Cette page vous a-t-elle été utile ?

Toujours bloqué ? Contactez le support