Pourquoi synchroniser ?
Si vous gérez un e-commerce avec un ERP, vous connaissez le problème : la double saisie. Une commande arrive sur WooCommerce, quelqu'un la ressaisit dans Dolibarr. Un stock est mis à jour dans l'ERP, quelqu'un pense à le reporter sur le site. Un nouveau produit est créé... dans un seul des deux systèmes.
Le résultat ? Des erreurs. Des stocks qui ne correspondent pas. Des commandes perdues. Du temps gaspillé sur des tâches qu'une machine fait mieux qu'un humain.
Chez VOGLIO BENE, avec ~1400 références et 50+ commandes B2B par jour, la saisie manuelle n'était tout simplement plus tenable. C'est ce qui m'a poussé à développer B2Sync, un module Dolibarr de synchronisation bidirectionnelle avec WooCommerce.
Les options sur le marché
Avant de développer un module custom, j'ai évalué les alternatives :
- Saisie manuelle : On en venait. Non merci.
- Export/import CSV : Fonctionne pour du ponctuel, mais ingérable au quotidien sur 1400 produits.
- Plugins existants (Zapier, WP ERP Bridge, etc.) : Trop génériques, pas de gestion fine des conflits, et souvent unidirectionnels.
- Développement sur mesure : Plus d'investissement initial, mais adapté exactement aux besoins.
La complexité du catalogue (variantes, catégories spécifiques, prix B2B) rendait les solutions génériques insuffisantes. J'ai opté pour le custom.
Les pièges classiques de la synchronisation
Trois ans de sync WooCommerce/Dolibarr m'ont appris que les problèmes ne viennent presque jamais d'où on les attend. Voici les pièges les plus vicieux :
Conflits de stock
Le piège n°1. Un client commande sur le site pendant qu'un commercial modifie le stock dans Dolibarr. Qui a raison ? Sans gestion de conflits, c'est la dernière écriture qui gagne — et on se retrouve à vendre un produit qui n'est plus en stock.
Ma solution : un système de timestamps et de priorité par source. La commande web a toujours priorité sur la modification manuelle pour les décréments. Pour les incréments (réception de marchandise), c'est l'ERP qui prime.
Doublons produits
Quand deux systèmes créent des produits, les doublons sont inévitables si le matching n'est pas robuste. La référence produit (SKU) ne suffit pas toujours — il faut gérer les cas où elle a été saisie différemment, avec des espaces en trop ou une casse différente.
Ma solution : normalisation des SKU à l'import (trim, lowercase), et un système de mapping persistant qui lie les IDs des deux systèmes une fois le premier match établi.
Mapping de catégories
WooCommerce et Dolibarr n'ont pas la même structure de catégories. Une catégorie WooCommerce peut correspondre à plusieurs tags Dolibarr, ou l'inverse. Et les catégories évoluent.
Ma solution : une table de correspondance administrable dans Dolibarr, avec une interface dédiée pour créer et modifier les mappings.
Gestion des variantes
WooCommerce gère les variations (taille, couleur) de manière native. Dolibarr... beaucoup moins. Le mapping des variantes est un casse-tête, surtout quand les attributs ne correspondent pas 1:1.
Ma solution : chaque variante WooCommerce est mappée à un produit distinct dans Dolibarr, avec une convention de nommage qui permet de retrouver le produit parent.
Encodage des caractères
Ça semble anodin, mais l'encodage UTF-8 entre une API REST, une base MySQL WooCommerce et une base PostgreSQL Dolibarr peut causer des bugs subtils. Des accents qui disparaissent, des caractères spéciaux qui cassent le JSON.
Ma solution : validation et nettoyage systématique de l'encodage à chaque point d'entrée/sortie.
L'architecture de B2Sync
B2Sync repose sur trois principes :
1. File d'attente (queue)
Chaque modification (produit, stock, commande) est ajoutée à une file d'attente plutôt que synchronisée immédiatement. Ça permet de gérer les pics de charge, de retry en cas d'erreur, et de ne pas surcharger les APIs.
2. Sync bidirectionnelle avec source de vérité
Selon le type de donnée, la source de vérité change :
- Produits : Dolibarr est maître (l'ERP détient les données produit de référence)
- Commandes : WooCommerce est maître (c'est là que les commandes sont créées)
- Stocks : règles de priorité selon le contexte (cf. conflits ci-dessus)
3. Logs et traçabilité
Chaque opération de sync est loggée avec : timestamp, direction, données avant/après, résultat (succès/échec/conflit). Quand un problème survient, je peux retracer exactement ce qui s'est passé.
La sync des images : le problème sous-estimé
Personne ne pense aux images quand on parle de sync ERP/e-commerce. Et pourtant, c'est un des problèmes les plus pénibles.
Les images sont lourdes. Les transférer via API à chaque sync est lent et coûteux en bande passante. Il faut détecter si l'image a changé (hash), gérer les différents formats et tailles entre les deux systèmes, et s'assurer que les URLs restent valides après la sync.
J'ai mis en place un système de sync différentielle : seules les images modifiées sont transférées, avec un cache de hash côté Dolibarr. Ça a réduit le temps de sync des images de 90%.
Monitoring et alertes

Une sync qui tourne en cron, c'est invisible — et c'est le problème. Quand ça casse, personne ne s'en aperçoit avant qu'un client signale un bug.
B2Sync intègre :
- Un dashboard dans Dolibarr montrant l'état de la queue, les dernières syncs, et les erreurs
- Des alertes email quand la queue dépasse un seuil ou quand un conflit non résolu est détecté
- Des métriques : temps moyen de sync, taux d'erreur, volume traité
C'est ce monitoring qui fait la différence entre un module qui "fonctionne" et un module fiable en production.
Conclusion
Synchroniser WooCommerce et Dolibarr, ce n'est pas un problème technique simple — c'est un problème de logique métier. Les APIs sont documentées, le code n'est pas particulièrement complexe. Ce qui est complexe, ce sont les cas limites, les conflits, et la fiabilité sur la durée.
Une bonne synchronisation, c'est un ROI immédiat : plus de double saisie, moins d'erreurs, des stocks fiables, et une équipe qui peut se concentrer sur des tâches à valeur ajoutée plutôt que de la saisie. Chez VOGLIO BENE, B2Sync traite 50+ commandes par jour sans intervention humaine. Le temps gagné se chiffre en heures chaque semaine.
