Le WordPress d'aujourd'hui, décodé pour les développeurs

Thèmes

Thème pour salle de sport : abonnements récurrents Stripe sans WooCommerce

Un club sportif voulait vendre des abonnements mensuels en ligne sans ouvrir une boutique complète. Retour sur une intégration de Stripe Billing directement dans un template dédié du thème.

Par WordPress Développement • 19 décembre 2021 • 4 min de lecture • Aucun commentaire
Thème pour salle de sport : abonnements récurrents Stripe sans WooCommerce

Un club de sport proposant trois formules — accès libre, accès avec cours collectifs, accès famille — voulait permettre à ses adhérents de souscrire et payer leur abonnement mensuel directement en ligne, sans passage par le secrétariat. La question s’est immédiatement posée : fallait-il installer WooCommerce avec l’extension payante WooCommerce Subscriptions pour gérer ces trois formules, ou existait-il une voie plus légère ?

Le choix écarté : WooCommerce Subscriptions

WooCommerce Subscriptions aurait apporté une gestion complète des abonnements récurrents (essais, changements de formule, remboursements au prorata), mais au prix d’une extension payante supplémentaire, d’un catalogue de produits à maintenir dans WooCommerce en plus de la configuration Stripe elle-même, et d’une complexité d’administration disproportionnée pour un catalogue de seulement trois formules qui ne changent quasiment jamais.

La solution retenue : Stripe Billing directement dans le thème

Stripe propose nativement la gestion d’abonnements récurrents via son objet Price en mode recurring, sans nécessiter de plugin e-commerce. Les trois formules ont été créées une bonne fois pour toutes dans le tableau de bord Stripe, chacune associée à un identifiant de prix stable :

price_1JlAccesLibreMensuel
price_1JlAccesCoursMensuel
price_1JlAccesFamilleMensuel

Le template page-abonnement.php du thème affiche les trois formules sous forme de cartes, chacune reliée à son identifiant de prix Stripe stocké dans une constante du thème plutôt que ressaisi à chaque appel :

define( 'FORMULES_CLUB', array(
    'libre'   => array( 'label' => 'Accès libre', 'price_id' => 'price_1JlAccesLibreMensuel' ),
    'cours'   => array( 'label' => 'Accès + cours collectifs', 'price_id' => 'price_1JlAccesCoursMensuel' ),
    'famille' => array( 'label' => 'Accès famille', 'price_id' => 'price_1JlAccesFamilleMensuel' ),
) );
L'essentiel à retenir : Trois formules d'abonnement gérées comme des Prices Stripe ; Le portail client Stripe évite de coder la gestion d'abonnement ; WooCommerce Subscriptions écarté pour un catalogue aussi restreint

Créer la session d’abonnement

Le clic sur une formule déclenche la création d’une session Stripe Checkout en mode subscription plutôt qu’en mode payment unique :

add_action( 'template_redirect', function() {
    if ( ! isset( $_POST['formule'] ) || ! is_page( 'abonnement' ) ) {
        return;
    }
    $formules = FORMULES_CLUB;
    $choix    = sanitize_key( $_POST['formule'] );
    if ( ! isset( $formules[ $choix ] ) ) {
        wp_die( 'Formule inconnue.' );
    }

    $session = \Stripe\Checkout\Session::create( array(
        'mode' => 'subscription',
        'line_items' => array( array(
            'price'    => $formules[ $choix ]['price_id'],
            'quantity' => 1,
        ) ),
        'success_url' => home_url( '/bienvenue-au-club/' ),
        'cancel_url'  => home_url( '/abonnement/' ),
    ) );

    wp_redirect( $session->url, 303 );
    exit;
} );

Laisser Stripe gérer le cycle de vie de l’abonnement

Le point le plus déterminant de ce choix technique : Stripe propose un portail client en libre-service (Billing Portal), permettant à chaque adhérent de mettre à jour sa carte, changer de formule ou résilier son abonnement, sans qu’aucune de ces fonctionnalités n’ait dû être recodée côté site :

$session_portail = \Stripe\BillingPortal\Session::create( array(
    'customer'   => $id_client_stripe,
    'return_url' => home_url( '/mon-compte/' ),
) );
wp_redirect( $session_portail->url, 303 );
exit;

Un lien « Gérer mon abonnement » dans l’espace adhérent du site redirige simplement vers cette session de portail, déportant ainsi toute la complexité de la gestion d’abonnement vers l’infrastructure de Stripe.

Synchroniser le statut d’accès via les webhooks

Un point d’entrée dédié reçoit les événements customer.subscription.deleted et invoice.payment_failed envoyés par Stripe, pour mettre à jour un simple champ de métadonnée sur le compte utilisateur WordPress correspondant (accès actif ou suspendu), sans dupliquer toute la logique de facturation côté site.

Ce que ce choix n’a pas géré

Cette intégration ne couvre ni les plannings de cours collectifs ni le contrôle d’accès physique aux locaux du club (badge, contrôle à l’entrée), qui relèvent d’un système distinct, déjà en place chez le client avant ce projet.

En résumé

Pour un catalogue de trois formules stables, Stripe Billing intégré directement dans un template de thème a apporté l’essentiel d’une gestion d’abonnement professionnelle — paiement récurrent, portail client, gestion des échecs de paiement — sans la lourdeur d’une extension WooCommerce Subscriptions dimensionnée pour des catalogues bien plus larges.

Laisser un commentaire

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

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi