Survente WooCommerce : 3 réglages qui vous font vendre plus que votre stock (testé)

Il vous reste un seul exemplaire d’un produit. Deux clients le mettent dans leur panier à quelques secondes d’écart, passent tous les deux commande, paient tous les deux. Vous avez deux commandes payées et un seul produit à expédier : il faudra rembourser l’un des deux, s’excuser, et espérer qu’il ne laisse pas un avis à une étoile.

WooCommerce a pourtant une protection contre ça depuis la version 4.3 (2020) : la réservation de stock. Mais elle se désactive sans prévenir si l’un de trois réglages n’est pas comme il faut, et elle ne couvre pas toute la durée de l’achat.

Nous avons reproduit la survente sur une boutique de test (WooCommerce 11.2.2, WordPress 7.1.4, en français), avec deux navigateurs et un paiement par carte avec validation 3-D Secure simulé, puis vérifié chaque réglage dans le code de WooCommerce. Ce qui en ressort :

  • la réservation fonctionne bien, mais seulement entre le clic sur « Commander » et la fin du paiement : le panier ne réserve rien ;
  • il suffit d’un champ laissé vide ou d’une case cochée pour la couper, et WooCommerce ne l’affiche nulle part ;
  • avec une durée trop courte, c’est pire : la commande du premier client est annulée pendant qu’il valide son paiement.

Comment WooCommerce protège (en théorie) le dernier exemplaire

Le mécanisme est simple, encore faut-il savoir où il commence et où il s’arrête.

Le panier ne réserve rien. Ajouter un produit au panier ne bloque aucune unité. Dix personnes peuvent avoir votre dernier exemplaire dans leur panier en même temps.

La réservation commence au clic sur « Commander ». WooCommerce crée alors la commande au statut « En attente de paiement » et bloque les unités pendant la durée du réglage « Maintenir le stock » (60 minutes par défaut). Une note le confirme dans la commande : « Maintien du stock de 60 minutes appliqué à… ».

Le stock baisse vraiment au paiement. Quand le paiement est confirmé, la commande passe « En cours », le stock est déduit et la réservation n’a plus d’objet.

Dans notre test, le client A a validé sa commande puis s’est retrouvé sur la page de validation de sa banque. Pendant ce temps, le client B a ajouté le même produit à son panier. WooCommerce l’a laissé faire (« a été ajouté à votre panier »), mais le panier a aussitôt affiché un refus :

Panier du second client : « Désolé, nous n'avons pas assez de Mug édition limitée en stock pour satisfaire votre commande (disponibilité : 0) »
Panier du second client : « Désolé, nous n’avons pas assez de Mug édition limitée en stock pour satisfaire votre commande (disponibilité : 0) »

C’est le comportement voulu. Deux détails à connaître quand même : pendant la réservation, la fiche produit affiche toujours « 1 en stock » et le bouton d’ajout au panier reste actif. Le client B ne découvre le problème qu’au panier.

Qui est concerné ? Les moyens de paiement qui envoient le client sur une autre page avant de confirmer : PayPal, carte bancaire avec validation 3-D Secure, paiements en plusieurs fois qui ouvrent leur propre page. Le chèque et le virement ne le sont pas : la commande passe directement « En attente » et le stock est déduit tout de suite (nous l’avons vérifié dans le code de WooCommerce).

Ce qui se passe sans la réservation : deux commandes payées, stock à -1

Nous avons ensuite coupé la réservation (premier réglage ci-dessous) et refait le même parcours. Cette fois, le client B a pu commander pendant que le client A était sur la page de sa banque. Les deux ont confirmé leur paiement. Résultat dans l’administration :

Liste des commandes WooCommerce : deux commandes « En cours » de 24,80 € pour le même produit en exemplaire unique
Liste des commandes WooCommerce : deux commandes « En cours » de 24,80 € pour le même produit en exemplaire unique

Le produit est passé à -1 :

Liste des produits : Mug édition limitée « En rupture de stock (-1) »
Liste des produits : Mug édition limitée « En rupture de stock (-1) »

Aucun message d’erreur, aucune alerte. Le seul indice est la note de la seconde commande, « Réduction des niveaux de stock : (0→-1) », et un e-mail que WooCommerce envoie à l’administrateur : « Produit en réapprovisionnement : 1 unités de Mug édition limitée ont été réservées dans la commande n°17 ». Un e-mail de réapprovisionnement sur un produit qui n’accepte pas les réapprovisionnements, c’est le signe que vous avez survendu.

Notes de la commande n°17 : « Réduction des niveaux de stock : Mug édition limitée (0→-1) »
Notes de la commande n°17 : « Réduction des niveaux de stock : Mug édition limitée (0→-1) »

Les 3 réglages qui coupent la réservation

Nous les avons tous les trois testés sur la boutique, et retrouvés dans le code de WooCommerce 11.2.2 (fonction wc_reserve_stock_for_order et classe ReserveStock).

1. La case « Activer la gestion du stock » décochée

Dans WooCommerce > Réglages > Produits > Inventaire. Si elle est décochée, WooCommerce ne suit plus aucune quantité : plus de stock, donc plus rien à réserver. C’est le réglage le plus évident, mais il arrive qu’il soit décoché sur une boutique qui gère son stock dans un autre outil.

2. Le champ « Maintenir le stock (minutes) » vide ou à 0

Juste en dessous, sur la même page. C’est la durée de la réservation, 60 minutes par défaut :

Réglages WooCommerce, onglet Produits, Inventaire : « Activer la gestion du stock » cochée et « Maintenir le stock (minutes) » à 60
Réglages WooCommerce, onglet Produits, Inventaire : « Activer la gestion du stock » cochée et « Maintenir le stock (minutes) » à 60

Ce champ a deux rôles : il réserve le stock et il annule les commandes restées « En attente de paiement » au bout de ce délai. La description l’indique (« Quand ce délai sera atteint, la commande en attente sera annulée »). Certains marchands le vident pour ne plus voir leurs commandes annulées toutes seules, et coupent du même coup la réservation. C’est ce que nous avons fait pour le test des deux commandes ci-dessus.

Bon à savoir : l’annulation automatique ne touche que les commandes « En attente de paiement » passées par la boutique. Une commande payée par virement (statut « En attente ») ou créée à la main dans l’administration n’est pas annulée. Inutile donc de vider ce champ pour protéger vos virements.

3. Le produit qui accepte les commandes en réapprovisionnement

Dans la fiche de chaque produit, onglet Inventaire, la question « Autoriser les commandes en réapprovisionnement ? ». Si la réponse est « Autoriser » ou « Autoriser, mais avec notification client », WooCommerce ne réserve pas ce produit, même avec 60 minutes dans le réglage général.

Onglet Inventaire d'un produit : quantité 1, « Autoriser, mais avec notification client » sélectionné
Onglet Inventaire d’un produit : quantité 1, « Autoriser, mais avec notification client » sélectionné

C’est logique pour un produit que vous pouvez recommander chez le fournisseur : vendre en négatif est alors voulu. C’est un piège pour une pièce unique, une série limitée ou un produit en fin de série, où la notification client donne une fausse impression de sécurité. Nous avons testé : avec ce choix, la commande du client A ne porte aucune note « Maintien du stock » et le client B a pu commander sans problème.

Le piège en plus : une durée trop courte

On pourrait se dire qu’une réservation courte libère plus vite le stock des paniers abandonnés. Nous avons essayé avec 1 minute. Le client A a validé sa commande, puis a mis un peu plus d’une minute à confirmer sur la page de sa banque, ce qui arrive tous les jours avec la validation dans l’application bancaire.

Pendant ce temps :

  • la réservation a expiré et le client B a pu commander le même exemplaire ;
  • WooCommerce a annulé automatiquement la commande du client A (« Commande impayée annulée – temps limite atteint »), alors qu’il était en train de payer ;
  • le client A n’a reçu aucun e-mail : l’avis d’annulation part seulement à l’administrateur.
Notes de la commande du client A : maintien du stock de 1 minute, puis « Commande impayée annulée – temps limite atteint »
Notes de la commande du client A : maintien du stock de 1 minute, puis « Commande impayée annulée – temps limite atteint »

Ce qui se passe ensuite si la banque confirme le paiement d’une commande déjà annulée dépend de l’extension de paiement : nous ne l’avons pas testé avec une vraie passerelle. Dans tous les cas, c’est un client qui a payé et un remboursement ou une explication à gérer.

Notre conseil : gardez les 60 minutes par défaut. Si vous n’acceptez que la carte bancaire et que vos stocks sont très tendus, 15 à 30 minutes restent raisonnables. En dessous de 10 minutes, vous risquez d’annuler des clients en train de payer.

Deux prérequis techniques

Des tables de base de données en InnoDB. La réservation repose sur un verrouillage des lignes de la base que seul le moteur InnoDB sait faire (le code de WooCommerce le précise). C’est le cas de presque toutes les installations récentes, mais une vieille boutique peut encore avoir des tables en MyISAM. Pour vérifier : dans phpMyAdmin, ouvrez la base du site, la colonne « Type » de l’onglet Structure doit afficher InnoDB pour toutes les tables du site.

Une page de paiement classique ou en blocs, peu importe. Les deux déclenchent la même réservation (vérifié dans le code). Notre test a été fait sur la page de paiement classique.

Vérifier votre boutique en 10 minutes

À faire avant le Black Friday du 27 novembre, et après chaque changement d’extension de paiement ou de stock :

  1. WooCommerce > Réglages > Produits > Inventaire : « Activer la gestion du stock » cochée, « Maintenir le stock (minutes) » à 60 (ou au moins 15).
  2. Vos produits en exemplaire unique ou en série limitée : « Ne pas autoriser » les commandes en réapprovisionnement. La modification groupée de la liste des produits propose ce champ, pratique pour en régler plusieurs d’un coup.
  3. Ouvrez une commande récente payée par carte ou PayPal et regardez ses notes : vous devez y trouver « Maintien du stock de 60 minutes appliqué à… ». Si la note est absente sur un produit qui gère son stock, la réservation ne fonctionne pas chez vous. Une extension peut aussi la couper par du code (filtres woocommerce_hold_stock_for_checkout et woocommerce_order_hold_stock_minutes).
  4. Faites le test à deux navigateurs sur une copie du site (préproduction) : un produit à quantité 1, deux navigateurs différents (ou une fenêtre privée), le premier valide sa commande et s’arrête sur la page de paiement, le second doit voir le message « pas assez […] en stock » dans son panier.
  5. Pendant les soldes, surveillez les e-mails « Produit en réapprovisionnement » sur des produits qui n’en acceptent pas, et filtrez la liste des produits sur « En rupture de stock » : une quantité négative entre parenthèses, comme « (-1) », signale une survente à traiter tout de suite.

Pour le reste de la préparation (prix barrés, e-mails, gel des mises à jour), voir notre checklist Black Friday WooCommerce.

En résumé

  • La réservation de stock de WooCommerce bloque le dernier exemplaire entre le clic sur « Commander » et la fin du paiement, pas avant.
  • Elle se coupe sans avertissement si la gestion du stock est désactivée, si « Maintenir le stock » est vide ou à 0, ou si le produit accepte les commandes en réapprovisionnement.
  • Sans elle, nous avons obtenu deux commandes payées pour un seul produit, et un stock à -1.
  • Une durée trop courte est un autre piège : la commande du premier client est annulée pendant qu’il paie.
  • La vérification prend dix minutes : trois réglages, une note de commande et un test à deux navigateurs.
Partagez cet article

Newsletter

Inscrivez-vous à notre newsletter pour profiter de toutes nos astuces !

Laissez une réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *