# 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.

- Auteur : WordPress Développement
- Publié le : 2021-12-19
- Mis à jour le : 2021-12-19
- Catégorie : Thèmes
- URL : https://www.wpmoderne.fr/themes/theme-salle-sport-stripe-billing-abonnements/

## L’essentiel

- 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

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.
