WooCommerce
Synchroniser ses stocks WooCommerce via une API Xano
Quand le stock vit à plusieurs endroits, WooCommerce finit par vendre ce qui n'existe plus. Une base Xano comme source de vérité règle le problème, à condition de maîtriser trois points : le sens des flux, l'idempotence et la réconciliation.
Le problème : plusieurs sources de stock
Une boutique WooCommerce qui grandit ajoute vite d'autres canaux : un fournisseur qui envoie ses quantités, un point de vente physique, parfois une marketplace. Chacun modifie le stock de son côté, et les écarts apparaissent :
- des commandes sur des produits en rupture ;
- des produits affichés épuisés alors qu'ils sont en réserve ;
- des corrections manuelles quotidiennes dans l'administration WordPress.
Le principe : une seule source de vérité
Je place le stock de référence dans Xano. WooCommerce devient un canal de vente parmi d'autres : il signale les ventes et reçoit les quantités à afficher. Les autres canaux suivent la même règle.
| Flux | Sens | Déclencheur | Fréquence |
|---|---|---|---|
| Commande créée | WooCommerce → Xano | Webhook order.created | Temps réel |
| Commande annulée ou remboursée | WooCommerce → Xano | Webhook order.updated | Temps réel |
| Réception fournisseur | Fournisseur → Xano | Import fichier ou API | À chaque réception |
| Quantités à afficher | Xano → WooCommerce | API REST par lot | Après chaque changement |
| Réconciliation | Xano ↔ WooCommerce | Tâche planifiée | Chaque nuit |
Côté WooCommerce : webhooks et API REST
Les webhooks se créent dans WooCommerce → Réglages → Avancé → Webhooks. Chaque appel contient l'en-tête X-WC-Webhook-Signature : Xano doit la vérifier avec la clé secrète avant de traiter quoi que ce soit.
Pour pousser les quantités, j'utilise l'endpoint de mise à jour par lot, qui accepte jusqu'à 100 éléments par requête :
POST /wp-json/wc/v3/products/batch
{
"update": [
{ "id": 812, "manage_stock": true, "stock_quantity": 14 },
{ "id": 815, "manage_stock": true, "stock_quantity": 0 }
]
}
Pour les produits variables, le stock se gère au niveau de chaque variation, via /products/{id}/variations/batch.
Côté Xano : idempotence et mouvements
Un webhook peut arriver deux fois, ou dans le désordre. Si chaque appel décrémente le stock, les écarts reviennent. Deux règles évitent ce piège.
Mémoriser les événements traités
Chaque événement reçu est enregistré avec une clé unique, par exemple l'identifiant de commande et son statut. Si la clé existe déjà, Xano répond 200 et ne fait rien.
Calculer le stock à partir des mouvements
Je n'écrase jamais une quantité. Chaque changement crée une ligne dans une table de mouvements, et le stock disponible est la somme de ces lignes :
skuet quantité signée (+ réception, - vente)source: woocommerce, fournisseur, correction manuellereference: numéro de commande ou de bon de livraison- date de l'événement
En cas de litige, on retrouve en quelques secondes qui a modifié quoi, et quand.
La réconciliation nocturne
Chaque nuit, une tâche planifiée Xano parcourt le catalogue WooCommerce page par page (per_page=100), compare chaque quantité au stock de référence et corrige les écarts par lot. Elle envoie ensuite un court rapport : nombre de produits vérifiés, écarts corrigés, SKU introuvables.
Les pièges fréquents
- SKU absents ou en double : c'est la clé de toute la synchronisation, à nettoyer avant de commencer.
- Produits variables : le stock du parent n'a pas de sens, seules les variations comptent.
- Cache : certains plugins de cache affichent encore l'ancien stock, il faut purger les pages produit concernées.
- Timeouts d'hébergement : sur un hébergement mutualisé, des lots de 50 sont plus sûrs que 100.
Checklist
- Chaque produit et variation a un SKU unique
- Les signatures des webhooks sont vérifiées
- Les événements déjà traités sont ignorés
- Le stock est calculé à partir d'une table de mouvements
- Les mises à jour vers WooCommerce passent par lot
- Une réconciliation tourne chaque nuit avec un rapport
Travaillons ensemble
Un projet similaire à mettre en place ?
Décrivez-moi votre contexte en quelques lignes. Je vous réponds sous 24 h avec une première analyse et les prochaines étapes.
Me contacter