# Une extension e-commerce santé : vendre des produits réglementés sans faute

> Ajouter à un tunnel WooCommerce les contrôles de conformité qu'exige la vente de produits parapharmaceutiques réglementés, sans toucher au paiement.

- Auteur : Clément Hadrot
- Publié le : 2024-09-12
- Mis à jour le : 2024-09-12
- Catégorie : Extensions
- URL : https://wpmoderne.dev.wordpress-developpement.fr/extensions/extension-ecommerce-sante-produits-reglementes/

## L’essentiel

- Le contrôle d'âge se vérifie côté serveur, jamais côté client seul
- Une déclaration d'ordonnance n'est pas une prescription médicale
- Chaque validation doit laisser une trace horodatée

Vendre en ligne un dispositif médical de classe I ou un produit contenant une substance à usage réglementé n'a rien à voir, du point de vue de la conformité, avec vendre un tube de crème solaire. Sur un projet WooCommerce pour un acteur de la parapharmacie en ligne, le tunnel d'achat standard fonctionnait très bien jusqu'au jour où le catalogue s'est enrichi de produits nécessitant une déclaration d'âge et, pour certains, une déclaration d'usage sous suivi médical déclaratif.

Le paiement lui-même — Stripe, en l'occurrence — ne posait aucune difficulté particulière et n'est pas le sujet de ce qui suit. Le vrai chantier a consisté à insérer, avant la validation de commande, une série de contrôles de conformité qui ne doivent jamais pouvoir être contournés en modifiant une requête côté client, un risque classique dès qu'un contrôle réglementaire n'existe que dans l'interface visuelle.

## Le contrôle d'âge, vérifié où il compte

La première tentation, la plus fragile, consiste à ajouter une case à cocher « J'ai plus de 18 ans » dans le formulaire de commande, sans aucune vérification derrière. Une case à cocher HTML n'empêche rien : un utilisateur technique peut soumettre la commande sans elle en modifiant la requête. Le contrôle doit être répété côté serveur, au moment de la validation de la commande, via le hook `woocommerce_checkout_process` :

```
add_action( 'woocommerce_checkout_process', function() {
    if ( ! cart_contains_age_restricted_product() ) {
        return;
    }
    if ( empty( $_POST['age_confirmation'] ) ) {
        wc_add_notice(
            __( 'Confirmez que vous avez au moins 18 ans pour finaliser cette commande.', 'monagence' ),
            'error'
        );
    }
} );
```

## Une déclaration, pas une vérification médicale

> L'essentiel à retenir : Le contrôle d'âge se vérifie côté serveur, jamais côté client seul ; Une déclaration d'ordonnance n'est pas une prescription médicale ; Chaque validation doit laisser une trace horodatée

Pour certains produits, la réglementation impose une déclaration d'usage — par exemple confirmer disposer d'une ordonnance en cours de validité pour un dispositif médical remboursable, ou déclarer l'absence de contre-indication connue. Il est essentiel de ne jamais présenter cette déclaration comme une vérification médicale réelle : l'extension enregistre une déclaration sur l'honneur horodatée, elle ne valide en aucun cas une prescription. Toute formulation dans l'interface qui laisserait penser à une vérification pharmaceutique automatisée exposerait le e-commerçant à une responsabilité qu'aucune extension ne peut assumer techniquement.

Concrètement, chaque déclaration est enregistrée comme une métadonnée de commande, avec la version exacte du texte de déclaration affiché au moment de l'achat :

- `update_post_meta( $order_id, '_health_declaration_version', '2024-09-v3' )` pour tracer la version du texte accepté.
- `update_post_meta( $order_id, '_health_declaration_timestamp', current_time( 'mysql' ) )` pour l'horodatage.
- Un export possible de ces métadonnées en cas de contrôle par les autorités sanitaires ou par un organisme de certification pharmaceutique.

## Restreindre l'affichage, pas seulement l'achat

Un contrôle de conformité complet ne se limite pas au moment du paiement : certaines catégories de produits réglementés ne doivent pas apparaître dans les résultats de recherche pour les visiteurs non connectés, ou doivent afficher un bandeau d'avertissement dès la fiche produit. Un filtre sur `woocommerce_product_is_visible`, combiné à une taxonomie personnalisée `categorie_reglementee`, permet de masquer ces produits des flux publics (sitemap, flux RSS, export vers un comparateur de prix) sans les retirer du catalogue interne.

### Ce que la conformité n'inclut pas ici

Ce chantier ne touche volontairement pas à la configuration du paiement Stripe, déjà stable et traité séparément sur ce projet : la conformité produit et le tunnel de paiement sont deux responsabilités distinctes, et les mélanger dans une seule extension aurait rendu chacune plus difficile à faire évoluer indépendamment.

> La règle retenue sur ce projet : tout contrôle réglementaire qui ne peut être vérifié à nouveau côté serveur au moment décisif n'est pas un contrôle, c'est une suggestion visuelle. Les deux ne se substituent jamais l'une à l'autre.

## En résumé

Vendre des produits parapharmaceutiques réglementés via WooCommerce est tout à fait possible avec une extension métier ciblée, à condition de traiter chaque contrôle de conformité comme une vérification serveur horodatée et non comme une simple case à cocher décorative. Le paiement, la conformité produit et l'affichage restreint sont trois responsabilités qui gagnent à rester séparées dans le code, même quand elles cohabitent dans le même tunnel d'achat vu par le client final.
