Module 3 · 3.3
Français
Produits numériques et virtuels
Module 3: Produits · Temps de lecture : 11 minutes
Objectif pédagogique : À l’issue de cette leçon, vous saurez vendre des produits numériques et virtuels en toute sécurité : vous choisissez une méthode de téléchargement sûre, vous protégez le dossier des téléchargements, vous définissez des limites et vous gérez correctement le droit de rétractation pour les contenus numériques.
Notions clés : produit virtuel, produit téléchargeable, lien de téléchargement, limite de téléchargement, date d’expiration, méthode de téléchargement (Forcer le téléchargement, X-Accel-Redirect/X-Sendfile, Redirection uniquement), woocommerce_uploads, .htaccess, nginx, dossiers de téléchargement approuvés (Approved download directories), accès après paiement, contenu numérique, consentement exprès, renonciation au droit de rétractation
Virtuel et téléchargeable : deux cases différentes
Pour un produit simple ou une variation, vous voyez deux cases à cocher. Elles se ressemblent, mais ne font pas la même chose :
- Virtuel (Virtual) signifie : rien n’est expédié. WooCommerce ne calcule pas de frais de livraison et ne demande pas d’adresse de livraison lors de la commande (si tout le contenu du panier est virtuel). Pensez à une dégustation de thé sur place, à une carte cadeau envoyée par e-mail ou à un atelier en ligne.
- Téléchargeable (Downloadable) signifie : après le paiement, le client reçoit un ou plusieurs fichiers. WooCommerce crée un lien de téléchargement par client et l’affiche dans l’e-mail de confirmation et dans Mon compte > Téléchargements.
Un livre de recettes numérique au format PDF est généralement les deux : rien ne part par la poste, et il y a un fichier. Un livre de recettes imprimé accompagné d’un PDF gratuit est téléchargeable mais pas virtuel : le livre, lui, est envoyé par la poste.
Theehuis Example vend le « Livre de recettes Thé et Gâteaux » au format PDF pour 9,95 €. Cases cochées : virtuel et téléchargeable.
Comment fonctionne un téléchargement, et pourquoi la méthode compte
Lorsque vous téléversez un fichier pour un produit téléchargeable, WooCommerce le place dans le dossier wp-content/uploads/woocommerce_uploads/. Par défaut, il ajoute une suite aléatoire de caractères au nom du fichier (réglage « Append a unique string to filename for security », activé par défaut). Le client ne reçoit jamais cette adresse, mais un lien vers votre boutique contenant une clé de commande et un code de téléchargement. À chaque clic, WooCommerce vérifie : ce téléchargement appartient-il à une commande payée, la limite n’est-elle pas atteinte, le lien n’a-t-il pas expiré ? Ce n’est qu’ensuite que le client obtient le fichier.
La façon dont le fichier est ensuite transmis au client se choisit dans WooCommerce > Réglages > Produits > Produits téléchargeables, sous la méthode de téléchargement (File download method) :
| Méthode | Fonctionnement | Sécurité |
|---|---|---|
| Forcer le téléchargement (Force downloads, par défaut) | PHP lit le fichier et le transmet lui-même | L’adresse réelle reste cachée. Sur certains serveurs, les gros fichiers peuvent bloquer ou atteindre la limite de temps de PHP |
| X-Accel-Redirect/X-Sendfile | PHP vérifie, le serveur web envoie le fichier | Tout aussi sûr et mieux adapté aux gros fichiers ; le serveur web doit le prendre en charge (avec Apache, il faut le module mod_xsendfile, nginx connaît X-Accel-Redirect). Renseignez-vous auprès de votre hébergeur |
| Redirection uniquement (Redirect only) | WooCommerce redirige le client vers l’adresse réelle du fichier | Non sécurisé : quiconque possède l’adresse peut la partager, et le fichier peut être récupéré sans achat. WooCommerce le qualifie lui-même de « Insecure » |
Choisissez donc Forcer le téléchargement ou X-Sendfile. La redirection n’est qu’une solution de dépannage, et le réglage « Allow using redirect mode (insecure) as a last resort » permet à WooCommerce de revenir à la redirection si l’autre méthode échoue ; laissez-le désactivé, sauf si vous savez pourquoi vous l’activez.
Protéger le dossier
Avec Forcer le téléchargement ou X-Sendfile, le dossier woocommerce_uploads doit être fermé aux visiteurs ordinaires. Sinon, une personne qui devine le nom du fichier ou le récupère dans un lien divulgué peut télécharger le fichier directement. C’est pourquoi WooCommerce place deux fichiers dans ce dossier lors de l’installation :
- un fichier
index.htmlvide, pour que le dossier n’affiche pas de liste de fichiers ; - un fichier
.htaccesscontenantdeny from all(avec la méthode Redirection uniquement :Options -Indexes).
Ce fichier .htaccess fonctionne sur Apache et LiteSpeed (comme chez WebOké et de nombreux autres hébergements mutualisés). Sur nginx, le serveur web ne lit pas les fichiers .htaccess. Il faut alors une règle dans la configuration du serveur qui bloque le dossier. Sur un hébergement nginx infogéré, l’hébergeur s’en charge parfois ; sur votre propre VPS, vous devez le faire vous-même. WooCommerce effectue lui-même cette vérification et affiche un avertissement dans l’administration (et dans Santé du site) si le dossier ne semble pas protégé.
Quelques points d’attention :
- Une réponse 200 vide n’est pas une preuve. Si vous demandez le dossier et voyez une page vide, il peut s’agir du fichier
index.htmlvide, alors que les fichiers eux-mêmes restent accessibles. Testez donc aussi un fichier (c’est ce que fait l’exercice). - Fichiers externes. Pour un produit, vous pouvez aussi indiquer un lien vers un fichier situé ailleurs. Pour cela, WooCommerce dispose de la liste des dossiers de téléchargement approuvés (Approved download directories) : seuls les fichiers provenant de ces dossiers ou de ces adresses peuvent servir de téléchargement. Ainsi, personne disposant de droits d’administration sur un produit ne peut, par erreur ou délibérément, proposer n’importe quel fichier du serveur en téléchargement. Gardez cette liste courte.
- Sauvegardes et préproduction. Le dossier est inclus dans votre sauvegarde. Un environnement de préproduction (staging) contient donc aussi vos fichiers payants : protégez-le (leçon 7.3).
Limites et accès
Pour chaque produit téléchargeable ou chaque variation, vous définissez :
- Limite de téléchargement (Download limit) : le nombre de fois que le client peut télécharger. Vide signifie illimité. Une limite de 5, par exemple, freine le partage, mais provoque des réclamations lorsqu’un client achète un nouvel ordinateur portable. Choisissez une valeur raisonnable et aidez les clients qui vous le demandent.
- Date d’expiration (Download expiry) : le nombre de jours après lequel le lien cesse de fonctionner.
Réglages généraux dans Produits téléchargeables :
- Les téléchargements nécessitent une connexion (Downloads require login), désactivé par défaut. Activé, les clients invités ne peuvent rien télécharger ; ne l’activez que si vous rendez aussi les comptes obligatoires.
- Accès après paiement (Grant access to downloadable products after payment), activé par défaut : le client peut télécharger dès que la commande a le statut En cours, donc juste après un paiement réussi. S’il est désactivé, l’accès n’est accordé qu’au statut Terminée.
La rétractation pour les contenus numériques
Pour une théière ordinaire, le client dispose d’un délai de réflexion de 14 jours (leçon 5.2). Pour un téléchargement, c’est délicat : celui qui a le PDF le garde, même après une rétractation. Il existe donc une exception, mais uniquement sous conditions. Dans l’UE, elle figure à l’article 16 de la directive 2011/83/UE ; aux Pays-Bas, à l’article 6:230p, point g, du Code civil néerlandais (BW). Il n’y a pas de droit de rétractation pour les contenus numériques non fournis sur un support matériel si :
- l’exécution a commencé avec le consentement préalable exprès du consommateur ;
- le consommateur a reconnu qu’il renonçait ainsi à son droit de rétractation ; et
- vous lui avez remis une confirmation de cet accord (dans la confirmation du contrat, sur un support durable comme l’e-mail de commande).
Si l’une de ces trois conditions manque, le client conserve son droit de rétractation, même s’il a déjà téléchargé. En Belgique et en Allemagne, la même règle européenne s’applique via la loi nationale (voir la leçon 5.2). En France, elle figure dans le Code de la consommation, qui prévoit le droit de rétractation de 14 jours (article L221-18).
WooCommerce ne gère pas cela automatiquement. Il vous faut :
- une case à cocher obligatoire lors de la commande, uniquement si le panier contient un contenu numérique, avec un texte du type « J’accepte que la fourniture commence immédiatement et je reconnais perdre ainsi mon droit de rétractation » ;
- le même texte en confirmation dans l’e-mail de commande pour ces produits ;
- la bonne phrase dans vos informations sur la rétractation, indiquant que cela s’applique aux téléchargements.
Il existe des extensions qui ajoutent une telle case ; le bloc de validation de commande offre aussi des possibilités de champs supplémentaires. Évaluez-les comme n’importe quelle extension. Une case précochée ne vaut pas consentement exprès (leçon 5.4).
Attention à la différence avec les services virtuels, comme un atelier à une date donnée. Ce sont les règles applicables aux services qui s’appliquent, avec d’autres exceptions. Lisez la leçon 5.2.
Résumé
- Virtuel = rien à expédier ; téléchargeable = fichiers après paiement. Un PDF est généralement les deux.
- Choisissez Forcer le téléchargement ou X-Accel-Redirect/X-Sendfile ; Redirection uniquement n’est pas sécurisé.
- Le dossier
woocommerce_uploadsdoit être fermé :.htaccesssur Apache et LiteSpeed, une règle serveur sur nginx. Testez un vrai fichier, pas seulement le dossier. - Gardez courte la liste des dossiers de téléchargement approuvés et définissez des limites raisonnables.
- Pas de droit de rétractation pour les téléchargements uniquement avec consentement exprès, renonciation au droit et confirmation ; WooCommerce ne le fait pas automatiquement. En France, cette règle figure dans le Code de la consommation.
Quiz
Exercice
Exercice A3.3 : Vos téléchargements sont-ils protégés ? Cet exercice interroge des chemins qui ne sont pas liés publiquement et ne fonctionne donc que pour votre propre boutique. Vous prouvez d’abord que le domaine vous appartient : vous créez un enregistrement TXT _weboke-cursus.<votre domaine> avec le code que vous recevez, ou vous placez un fichier /.well-known/weboke-cursus-<code>.txt contenant ce code. Indiquez ensuite l’adresse de votre boutique et, si vous le souhaitez, le chemin d’un fichier téléchargeable tel que WooCommerce l’affiche pour le produit (il commence par /wp-content/uploads/woocommerce_uploads/). Le programme interroge le dossier (sans suivre de redirection, uniquement le début) et, si vous avez indiqué un chemin, une seule fois les en-têtes de ce fichier. Vert si le dossier renvoie 401, 403 ou 404, ou une page sans liste de fichiers, et si le fichier renvoie 401, 403 ou 404. Orange si vous n’avez pas indiqué de fichier : seul le dossier a alors été vérifié, et une page vide ne suffit pas. Rouge si le dossier affiche une liste de fichiers, ou si le fichier se télécharge normalement (200) : toute personne disposant de l’adresse peut alors le récupérer sans l’acheter. Le programme ne conserve que les codes de statut, jamais le fichier.
Question pour vous-même (non corrigée) : quelle méthode de téléchargement est configurée dans votre boutique, et comment avez-vous géré la rétractation pour vos produits numériques ?
Pour aller plus loin
- Digital and downloadable product handling (woocommerce.com, en anglais) : https://woocommerce.com/document/digital-downloadable-product-handling/
- Formation WordPress gratuite 7.4: Renforcer la sécurité du site : permissions, en-têtes et extensions de sécurité
- Interdit (403) : vous n'avez pas l'autorisation d'accéder à / sur ce serveur
- Code civil néerlandais (Burgerlijk Wetboek), livre 6, article 6:230p (wetten.overheid.nl, en néerlandais) : https://wetten.overheid.nl/BWBR0005289/
La base de connaissances décrit la situation chez WebOké (LiteSpeed, .htaccess fonctionne) ; chez d’autres hébergeurs, le fonctionnement est comparable, sauf sur nginx.
