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.
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
- Dans le back-office, ouvrez Modules > Gestionnaire de modules, cliquez sur Téléverser un module et déposez le fichier zip du module.
- 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
- Connectez-vous à Odoo avec l’utilisateur dédié à la synchronisation.
- Cliquez sur votre avatar, puis Mon profil (ou Préférences), onglet Sécurité du compte, et Nouvelle clé API.
- 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://(ouhttp://), par exemplehttps://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.

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.

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.

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.


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 exemplestripe_official=7.
Sans journal configuré, le paiement n’est pas enregistré : le journal l’indique par un avertissement mentionnant le module de paiement concerné.


Synchronisation initiale
Sur une boutique existante, peuplez Odoo depuis l’onglet Outils, dans cet ordre :
- Envoyer les clients.
- Envoyer les produits.
- Importer le stock depuis Odoo si Odoo est maître du stock.
- 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é.

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.






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.

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.

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.