Tous les articles

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.

FluxSensDéclencheurFréquence
Commande crééeWooCommerce → XanoWebhook order.createdTemps réel
Commande annulée ou rembourséeWooCommerce → XanoWebhook order.updatedTemps réel
Réception fournisseurFournisseur → XanoImport fichier ou APIÀ chaque réception
Quantités à afficherXano → WooCommerceAPI REST par lotAprès chaque changement
RéconciliationXano ↔ WooCommerceTâche planifiéeChaque 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.

Xano au centre : chaque canal envoie ses mouvements et reçoit les quantités à jour.

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 :

  • sku et quantité signée (+ réception, - vente)
  • source : woocommerce, fournisseur, correction manuelle
  • reference : 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.

À prévoir à partLa réservation de stock pendant un paiement en cours et la gestion multi-entrepôts ne sont pas couvertes par cette architecture de base. Ce sont des chantiers spécifiques, à chiffrer séparément.

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