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' ),
) );

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.