Intégration Odoo Shopify : données synchronisées et limites
Guide de l’intégration Odoo Shopify : gestion des stocks et commandes, limites de l’API, webhooks et critères à vérifier avant de choisir un prestataire.
Long Nguyen
Développeur fullstack · Ingénieur IA · Chercheur
Ce que couvre réellement un service d’intégration Odoo Shopify
Un service d’intégration Odoo Shopify relie votre boutique Shopify à Odoo afin que les commandes, les stocks, les clients, les expéditions et les remboursements circulent automatiquement entre les deux systèmes, sans saisie manuelle. La synchronisation en elle-même est la partie la plus simple. Le véritable enjeu consiste à déterminer quel système est responsable de chaque donnée et ce qui se passe lorsque les deux systèmes ne sont pas d’accord.
Voici la cartographie des données sur laquelle nous partons pour chaque projet. Les flux et les systèmes responsables varient selon l’entreprise, mais chaque ligne doit faire l’objet d’une réponse claire avant d’écrire la moindre ligne de code.
| Donnée | Flux habituel | Système responsable | Premier point de rupture |
|---|---|---|---|
| Produits et prix | Odoo vers Shopify (ou l’inverse si le merchandising est géré dans Shopify) | Un seul système | Variantes, SKU manquants ou dupliqués |
| Stocks | Odoo vers Shopify | Odoo | Réservations, emplacements multiples |
| Commandes | Shopify vers Odoo | Shopify jusqu’à la préparation | Modifications et annulations après l’import |
| Clients | Shopify vers Odoo | Shopify pour les comptes en ligne | Création de fiches partenaires en double lors des commandes invité |
| Préparation et suivi des livraisons | Odoo vers Shopify | Entrepôt Odoo | Expéditions partielles |
| Remboursements et retours | Shopify vers Odoo (avoirs) | Shopify | Décisions de remise en stock, annulation de la taxe |
| Paiements et versements | Passerelle de paiement vers la comptabilité Odoo | Passerelle de paiement | Frais et versements groupés qui ne correspondent pas aux commandes |
Définissez d’abord la source de vérité
La synchronisation bidirectionnelle d’un même champ est à l’origine de la plupart des intégrations qui finissent par dysfonctionner. Si Odoo et Shopify peuvent tous deux modifier le titre d’un produit, l’un des deux finira par écraser l’autre au mauvais moment. La règle qui tient dans la durée est simple : chaque champ doit avoir un seul système rédacteur, l’autre le traitant en lecture seule.
Pour la plupart des boutiques, cela signifie qu’Odoo gère les stocks, les coûts et le statut de préparation, tandis que Shopify gère la commande en ligne, le client issu du parcours de paiement et la capture du paiement. Le contenu produit demande en revanche un vrai arbitrage : si votre équipe rédige les descriptions et choisit les images dans Shopify, laissez Shopify en être responsable et n’importez dans Odoo que les informations nécessaires aux opérations (SKU, code-barres, poids et coût).
Connecteur prêt à l’emploi ou intégration sur mesure ?
Odoo documente son propre connecteur Shopify pour les versions récentes, et les marketplaces en proposent plusieurs autres développés par des tiers. Avant de partir du principe que l’un d’eux convient, vérifiez sa couverture par rapport à votre édition et à votre version d’Odoo, car les fonctionnalités diffèrent selon les connecteurs et les versions. Un connecteur préconfiguré est généralement le bon choix lorsque vos flux sont standards. Le développement sur mesure devient rentable lorsqu’ils ne le sont pas.
| Situation | Connecteur préconfiguré | Intégration sur mesure |
|---|---|---|
| Une boutique Shopify, un entrepôt et des taxes standards | Généralement suffisant | Disproportionné |
| Plusieurs boutiques ou plusieurs emplacements de stock | Vérifiez attentivement les limites de mapping | Souvent nécessaire |
| Lots, kits ou produits fabriqués à la commande | Rarement gérés proprement | Souvent nécessaire |
| Tarification B2B, vente en gros ou règles fiscales personnalisées | Dépend du module | Souvent nécessaire |
| Odoo Community auto-hébergé | Vérifiez que le connecteur prend en charge votre édition | Convient bien, avec l’API externe d’Odoo |
| Volume important de commandes ou catalogue volumineux | Testez d’abord les limites de Shopify | Conçue en fonction de ces limites |
Si votre situation se trouve dans la colonne de droite, un développement cadré vous coûtera moins cher que de lutter contre un connecteur. C’est précisément le travail réalisé dans le cadre de notre service de développement et d’intégration Odoo : une synchronisation conçue autour de vos produits, de vos entrepôts et de vos règles comptables, plutôt qu’un mapping générique.
Les limites de l’API Shopify qui influencent la conception
Shopify limite le débit des appels API, et ces limites déterminent la manière de concevoir la synchronisation du catalogue et des commandes. Pour l’Admin API GraphQL, la documentation de Shopify sur les limites de débit définit un taux de restauration selon le forfait et plafonne le coût d’une requête unique à 1 000 points.
| Forfait Shopify | Taux de restauration GraphQL |
|---|---|
| Standard | 100 points par seconde |
| Advanced | 200 points par seconde |
| Shopify Plus | 1 000 points par seconde |
| Commerce Components | 2 000 points par seconde |
Deux conséquences se dégagent pour la conception. Premièrement, l’envoi d’un catalogue complet avec un forfait Standard est une opération lente et cadencée, pas un traitement instantané : les imports initiaux doivent donc être découpés en lots et utiliser des curseurs permettant la reprise. Deuxièmement, cette même page présente l’Admin API REST comme un compartiment de requêtes qui se vide à raison de deux requêtes par seconde, et Shopify classe REST parmi les technologies historiques. Les nouvelles intégrations doivent être développées avec GraphQL.
Les webhooks ne suffisent pas : ajoutez une réconciliation
Les webhooks informent Odoo presque en temps réel lorsqu’une commande est créée ou payée. Les recommandations de Shopify sur les webhooks indiquent qu’une application ne doit pas s’appuyer uniquement sur eux : la livraison n’est pas garantie, les événements peuvent arriver dans le désordre et les doublons sont possibles. Les correctifs documentés consistent à dédupliquer à partir de l’en-tête contenant l’identifiant du webhook, à classer les événements selon leur horodatage et à exécuter une tâche en arrière-plan qui relit les objets récemment mis à jour.
En pratique, cela donne trois niveaux de contrôle : vérifier la signature, traiter chaque identifiant de webhook une seule fois et exécuter une réconciliation planifiée qui demande à Shopify les commandes modifiées depuis la dernière exécution réussie. Voici les deux premières étapes :
import base64, hashlib, hmac
def verify_shopify_webhook(raw_body: bytes, hmac_header: str, app_secret: str) -> bool:
digest = hmac.new(app_secret.encode('utf-8'), raw_body, hashlib.sha256).digest()
expected = base64.b64encode(digest).decode('utf-8')
return hmac.compare_digest(expected, hmac_header)
def should_process(webhook_id: str, seen_ids: set) -> bool:
# In production keep ids in a database table with a unique constraint.
if webhook_id in seen_ids:
return False
seen_ids.add(webhook_id)
return True
Vérifiez la signature à partir du corps brut de la requête, et non d’un objet JSON sérialisé à nouveau, sinon elle ne correspondra pas. La réconciliation transforme une synchronisation qui fonctionne en démonstration en une synchronisation capable de résister à un week-end d’événements manqués.
Synchronisation des stocks : l’origine des ventes en excès
Les ventes en excès proviennent rarement d’une synchronisation défectueuse. Elles résultent plutôt de la publication d’une mauvaise quantité. Odoo distingue le stock disponible en magasin du stock réservé pour d’autres commandes. La quantité publiée dans Shopify doit donc correspondre à la quantité réellement disponible à la vente, diminuée d’une marge de sécurité si votre préparation est lente.
- Associez explicitement les emplacements. Chaque entrepôt ou emplacement de stock Odoo qui vend en ligne doit correspondre à un emplacement Shopify. Les emplacements non associés disparaissent silencieusement des disponibilités.
- Privilégiez les quantités absolues aux écarts. L’envoi de la quantité totale disponible permet de corriger automatiquement une absence d’événement. L’envoi des seules différences entraîne une dérive permanente lorsqu’une mise à jour est perdue.
- Déclenchez la mise à jour lors des mouvements de stock, pas uniquement selon un calendrier. Mettez à jour les quantités lorsqu’un mouvement est validé, puis laissez une tâche périodique corriger les éventuels écarts.
- Gérez les problèmes de concurrence. Une commande peut arriver entre le moment où vous lisez le stock et celui où vous l’écrivez. Une courte marge de sécurité sur les articles qui se vendent vite coûte moins cher qu’une commande annulée.
Commandes, taxes, paiements et remboursements dans Odoo
Importer une commande comme commande client est simple. C’est sa réconciliation comptable qui justifie le coût de l’intégration.
- Les frais de livraison et les remises doivent avoir leurs propres produits ou lignes dans Odoo, sinon les totaux des factures ne correspondront pas à ce que le client a payé.
- Les taxes doivent être associées aux enregistrements de taxes et aux positions fiscales Odoo en fonction de la destination, et non recalculées séparément. Deux systèmes qui calculent chacun les taxes produiront des écarts de quelques centimes, que les comptables ne manqueront pas de remarquer.
- Les versements de votre passerelle de paiement arrivent regroupés et nets de frais. Effectuez le rapprochement avec le versement, et non avec chaque commande.
- Les remboursements doivent créer des avoirs et faire l’objet d’une décision explicite de remise en stock, car un remboursement ne signifie pas toujours que l’article a été retourné.
- Les modifications de commande après l’import (changement d’adresse, annulation ou ajout d’articles) nécessitent une règle définie : mettre à jour la commande Odoo jusqu’à sa livraison, puis imposer une modification manuelle.
- Une préparation partielle dans Odoo devient plusieurs livraisons, et chacune doit transmettre son propre numéro de suivi à Shopify.
Association des SKU et des variantes
Les variantes Shopify correspondent aux variantes de produits dans Odoo, et le SKU, souvent accompagné du code-barres, sert de clé de rapprochement. Si les SKU sont absents ou dupliqués dans Shopify, aucune intégration ne peut associer les enregistrements de manière fiable. Nettoyez les SKU avant la première synchronisation, et non après. Les lots et les kits nécessitent une décision en amont : les vendre comme un produit Shopify unique qui est décomposé en composants dans Odoo, ou les gérer comme un produit de type kit. Modifier ce choix ultérieurement implique de retravailler les commandes historiques.
Questions à poser à un prestataire d’intégration Odoo Shopify
- Quel système est responsable de chaque champ, et où cette décision est-elle consignée ?
- Que se passe-t-il lorsqu’un webhook est manqué, dupliqué ou reçu dans le désordre ?
- Comment l’import initial du catalogue et de l’historique des commandes est-il cadencé en fonction des limites de Shopify ?
- Comment les taxes, les frais de livraison, les remises et les versements de la passerelle sont-ils associés à la comptabilité ?
- Comment les remboursements, les annulations et les expéditions partielles sont-ils répercutés ?
- Qui voit les erreurs ? Existe-t-il une file d’erreurs visible avec relance, et pas seulement des journaux techniques ?
- La solution fonctionne-t-elle avec votre édition et votre hébergement Odoo, et qui en assure la maintenance après une mise à niveau d’Odoo ?
Un prestataire qui répond précisément à ces questions a déjà réalisé ce type de projet. Celui qui répond avec une simple liste de fonctionnalités ne l’a probablement pas fait.
Les facteurs qui déterminent le périmètre et le calendrier
Le coût et la durée dépendent moins du nombre de champs que des cas particuliers. Les facteurs qui influencent le plus un projet, par ordre approximatif d’importance, sont les suivants : plusieurs boutiques ou emplacements de stock, les lots et les articles fabriqués à la commande, la tarification B2B, les règles fiscales ou de facturation personnalisées, les données historiques à migrer, ainsi que votre version et votre hébergement Odoo. Le prix est établi après définition du périmètre : décrivez donc ces exceptions plutôt que de demander un tarif forfaitaire.
Si vous souhaitez faire évaluer vos flux, présentez-nous votre configuration Shopify et Odoo et nous définirons le périmètre de la synchronisation en fonction de celle-ci.
FAQ
Questions fréquentes
Que comprend un service d’intégration Odoo Shopify ?
Il relie Shopify et Odoo afin que les commandes, les clients, les stocks, les expéditions et les remboursements circulent automatiquement. Un service correctement conçu définit également quel système est responsable de chaque champ, gère les webhooks manqués ou dupliqués et associe les taxes, les frais de livraison et les versements à la comptabilité Odoo.
Faut-il utiliser un connecteur Odoo Shopify prêt à l’emploi ou une intégration sur mesure ?
Utilisez un connecteur préconfiguré si vous avez une boutique, un entrepôt et des taxes standards, à condition qu’il prenne en charge votre édition et votre version d’Odoo. Choisissez une solution sur mesure pour plusieurs boutiques ou emplacements, les lots, la tarification B2B, les règles fiscales personnalisées ou un volume élevé de commandes.
Quel système doit gérer les stocks : Odoo ou Shopify ?
Odoo, dans la plupart des configurations. Il connaît les réservations, les entrepôts et les stocks entrants. Publiez dans Shopify la quantité disponible à la vente, idéalement sous forme de valeur absolue avec une éventuelle marge de sécurité, afin qu’une mise à jour manquée soit corrigée lors de l’envoi suivant.
Les webhooks Shopify sont-ils assez fiables pour synchroniser les commandes avec Odoo ?
Pas à eux seuls. La documentation de Shopify indique que la livraison n’est pas garantie et que les événements peuvent arriver dans le désordre ou en double. Vérifiez la signature, traitez chaque identifiant de webhook une seule fois et exécutez une tâche planifiée qui récupère à nouveau les commandes récemment modifiées.
Une nouvelle intégration Odoo Shopify doit-elle utiliser l’Admin API REST ou GraphQL ?
GraphQL. Shopify classe l’Admin API REST parmi les technologies historiques, tandis que GraphQL fournit des limites fondées sur le coût et propres à chaque forfait, autour desquelles vous pouvez concevoir l’intégration. Le plafond de 1 000 points par requête impose toutefois de découper les requêtes volumineuses.