Connecter Odoo à PrestaShop ou Shopify : architecture d'un connecteur fiable
Synchronisation bi-directionnelle produits, stocks et commandes entre Odoo et votre boutique : les patterns qui fonctionnent vraiment en production.
Vous avez Odoo pour piloter votre activité, PrestaShop ou Shopify pour vendre en ligne, et deux équipes qui se renvoient les fichiers Excel. Bienvenue dans l'enfer des catalogues désynchronisés, des surventes, des prix qui divergent et des commandes qui n'arrivent jamais dans la comptabilité. Un connecteur Odoo ⇄ e-commerce bien conçu règle ces problèmes une fois pour toutes — à condition de ne pas tomber dans les pièges classiques.
Pourquoi un connecteur natif ne suffit jamais
Les modules « officiels » Odoo-PrestaShop ou Odoo-Shopify couvrent le cas d'usage standard : un catalogue simple, un entrepôt, une langue, des attributs basiques. Dès qu'on sort de ce périmètre — configurations multi-attributs, prix différenciés par segment, stock éclaté sur plusieurs sites, traductions, promotions complexes — il faut écrire son propre connecteur ou fortement étendre l'existant.
Les signes qu'un connecteur générique ne tiendra pas la route :
- Plus de 5 000 références actives avec variantes
- Plusieurs entrepôts ou drop-shippers contribuant au stock
- Grilles tarifaires multi-devises ou segmentées (B2B/B2C)
- Gestion des kits, bundles ou composés
- Besoins temps réel (< 5 min de latence sur le stock)
Les 4 flux critiques à orchestrer
1. Catalogue : Odoo → e-commerce (descendant)
Odoo est la source de vérité produit. Les attributs, descriptions, images, prix et catégories partent d'Odoo et descendent vers la boutique. Le connecteur doit gérer :
- Mapping des attributs : les attributs Odoo (couleur, taille, matière) deviennent les combinaisons/variants côté boutique.
- Les médias : upload optimisé (WebP, redimensionnement) avec cache d'empreinte pour ne pas renvoyer une image inchangée.
- Les traductions : si vous gérez plusieurs langues dans Odoo, il faut pousser les champs traduits vers les bonnes boutiques multi-shop/multi-locale.
- Les catégories : arbre Odoo → catégories boutique, avec conservation des SEO slugs.
2. Stock : Odoo → e-commerce (temps quasi-réel)
C'est le flux le plus critique. Une désynchronisation de 10 minutes sur un produit populaire peut générer des surventes coûteuses. Deux approches :
- Push événementiel : Odoo déclenche un hook (via automation rules) sur chaque mouvement de stock qui modifie la quantité vendable. Le connecteur appelle l'API boutique dans les secondes qui suivent. Idéal pour les catalogues < 50k refs.
- Polling incrémental : toutes les 2-5 minutes, le connecteur lit les mouvements de stock depuis la dernière synchro (champ
write_date) et pousse les deltas. Plus robuste pour les très gros catalogues.
Dans les deux cas, il faut un réservoir tampon : on ne publie pas la quantité physique brute, mais quantité disponible - quantité en commandes en cours - buffer de sécurité. Ce buffer absorbe la latence inévitable entre Odoo et la boutique.
3. Commandes : e-commerce → Odoo (montant)
Chaque commande validée côté boutique doit créer dans Odoo : un bon de commande de vente, un contact client (ou rattachement à un existant), un bon de livraison et une facture proforma. Points de vigilance :
- Idempotence : utiliser la référence commande boutique comme clé d'unicité côté Odoo pour éviter les doublons en cas de retry.
- Taxes : mapping explicite des taux TVA boutique vers les positions fiscales Odoo (attention aux ventes UE / hors UE / reverse charge).
- Remises : reporter remise produit ET remise commande séparément, pas d'amalgame.
- Frais de port : ligne de commande dédiée avec le compte comptable approprié.
4. Statuts : Odoo → e-commerce (feedback)
Quand une commande est expédiée dans Odoo, la boutique doit afficher le statut et le numéro de tracking au client. Le connecteur écoute les changements d'état sur les bons de livraison Odoo et pousse vers la boutique (via l'API dédiée : orders/fulfillments sur Shopify, order_carriers sur PrestaShop).
Architecture recommandée
Un connecteur robuste se construit autour de 3 briques découplées :
- Une file de messages (Redis Queue, Celery, RabbitMQ) qui absorbe les pics et garantit le traitement asynchrone. Pas d'appel API synchrone depuis Odoo — ça casse dès que la boutique rame.
- Un worker dédié (Python, Node) qui consomme la file, gère les retry exponentiels, le rate limiting API boutique et persiste les erreurs dans une table de monitoring.
- Un dashboard de supervision affichant les items en attente, les erreurs, les temps de synchronisation moyens, et permettant le rejeu manuel d'un item.
Les erreurs à ne pas commettre
- Pas de webhook côté boutique : sans webhook commandes, vous ratez les commandes créées offline (TPV) ou via API tierce. Toujours doubler webhook + polling de rattrapage.
- Ignorer le rate limiting : Shopify limite à 2 req/s (bucket), PrestaShop dépend du serveur. Le connecteur doit respecter ces limites sinon vos synchros massives vont être bloquées en milieu de journée.
- Absence de mode dry-run : impossible de faire évoluer le connecteur en confiance sans pouvoir rejouer les flux sur un staging sans impact production.
- Pas de réconciliation : même avec un bon connecteur, des écarts de stock arrivent. Un job nocturne de réconciliation (Odoo ↔ boutique) et un rapport écart quotidien est indispensable.
PrestaShop vs Shopify : ce qui change côté intégration
PrestaShop : API REST relativement bien documentée, accès direct à la base MySQL en dernier recours, webhooks limités historiquement (améliorés depuis la 8.x). Les modules tiers peuvent modifier les données de façon imprévisible → gérer les collisions.
Shopify : API GraphQL moderne, webhooks fiables, mais rate limiting strict et impossibilité d'accéder à la DB. Les Metafields et Metaobjects sont vos amis pour stocker les attributs custom Odoo sans polluer les produits. Avec Shopify Plus, les scripts Functions et Flow ouvrent plus de flexibilité.
ROI d'un connecteur bien construit
Sur un retailer avec 15 000 références et 200 commandes/jour :
- -80 % de saisie manuelle dans les équipes admin et logistique
- -95 % de surventes liées aux stocks désynchronisés
- Délai commande → expédition divisé par 2 (plus de transfert manuel de commandes)
- Comptabilité à jour en temps réel sans import CSV mensuel
L'investissement initial (4 à 10 semaines selon complexité) se rentabilise en général en 6 à 12 mois.
Notre approche chez Pixee Play
Nous construisons des connecteurs Odoo ⇄ PrestaShop/Shopify sur mesure, avec un socle commun éprouvé (file async, monitoring, réconciliation) et des adapters spécifiques par boutique. Chaque projet démarre par un audit des flux métier pour identifier les vrais cas limites — c'est là que se gagne ou se perd la fiabilité. Contactez-nous pour un audit gratuit de votre intégration actuelle.