Plugin d'abonnements Discourse

[Guide] Comment configurer les abonnements Discourse avec les tables de prix Stripe (et les pièges courants)

Bonjour à tous,

Après un long processus de dépannage, je voulais partager un guide définitif pour configurer le plugin officiel discourse-subscriptions en utilisant la méthode moderne Stripe Pricing Table. Cette approche est puissante mais comporte quelques étapes critiques qui ne sont pas immédiatement évidentes et peuvent entraîner des erreurs telles que des webhooks défaillants (404 Not Found) ou des utilisateurs non ajoutés aux groupes après un paiement réussi.

Voici le processus étape par étape qui a été confirmé comme fonctionnel.


Partie 1 : Configuration Stripe

Ce processus utilise Stripe comme « source de vérité » pour tous les produits et prix.

1. Créez vos produits et prix

  • Dans votre tableau de bord Stripe, assurez-vous d’être en Mode Live.
  • Accédez à Produits > Catalogue de produits.
  • Créez d’abord vos produits principaux (par exemple, « Adhésion Premium », « Accès VIP »).
  • Sous chaque produit, créez tous les prix associés (par exemple, XX / mois, XXX / an).

2. L’étape CRUCIALE des métadonnées Pour que le plugin ajoute automatiquement les utilisateurs à un groupe, vous devez ajouter des métadonnées spécifiques à chaque objet Prix que vous créez. L’interface utilisateur du tableau de bord Stripe peut rendre cela difficile à trouver.

  • Lors de la création d’un nouveau prix (ou si vous trouvez l’option « Modifier le prix »), vous devez ajouter des métadonnées. Vous devrez peut-être cliquer sur « Options supplémentaires » lors de la création du prix pour afficher les champs de métadonnées.
  • Cliquez sur + Ajouter des métadonnées et entrez les éléments suivants :
    • CLÉ : group_name
    • VALEUR : Le slug/identifiant unique et compatible avec les URL du groupe dans Discourse, pas son nom complet.

Exemple :

  • Si le nom complet de votre groupe Discourse est « Enclave Plus », son slug est probablement EnclavePlus.
  • Vous devez utiliser EnclavePlus comme valeur. Utiliser « Enclave Plus » avec un espace échouera.
  • Vous devez répéter cela pour chaque plan de prix que vous souhaitez lier à un groupe.

3. Créez votre table de prix Stripe

  • Accédez à Produits > Tables de prix.
  • Créez une nouvelle table et ajoutez les prix que vous venez de configurer.
  • Après avoir publié la table, cliquez sur le bouton « Copier le code » pour obtenir votre ID de table de prix (il commence par prctbl_...).

4. Configurez le point de terminaison du webhook (Correction de l’erreur 404) C’est le point de défaillance le plus courant.

  • Accédez à Développeurs > Webhooks et cliquez sur + Ajouter un point de terminaison.
  • L’URL du point de terminaison doit être au format suivant : https://votre-site-discourse.com/s/hooks
    • Note : Le chemin correct est /s/hooks, pas /s/stripe/webhook.
  • Pour les Événements à envoyer, ajoutez au minimum :
    • checkout.session.completed
    • customer.subscription.deleted
  • Créez le point de terminaison et copiez le Secret de signature (il commence par whsec_...).

Partie 2 : Configuration Discourse

Configurons maintenant le plugin pour utiliser tout ce que vous avez configuré dans Stripe.

1. Entrez les clés API et l’ID de la table de prix

  • Accédez à Admin > Paramètres et recherchez discourse subscriptions.
  • Entrez vos clés Stripe en mode live :
    • discourse subscriptions public key (pk_live_...)
    • discourse subscriptions secret key (sk_live_...)
    • discourse subscriptions webhook secret (whsec_...)
  • Activez le mode table de prix :
    • Cochez la case discourse subscriptions pricing table enabled.
    • Collez votre ID prctbl_... dans le champ discourse subscriptions pricing table id.

2. Liez les produits Stripe aux groupes Discourse Même avec une table de prix, vous devez indiquer à Discourse quel groupe appartient à quel produit.

  • Accédez à Admin > Plugins > Subscriptions et cliquez sur l’onglet Produits.
  • Cliquez sur Créer un nouveau produit.
  • Entrez un Nom du produit qui correspond exactement au nom du produit dans Stripe (par exemple, Enclave Plus).
  • Enregistrez le produit. Sur la page du produit, faites défiler vers le bas et cliquez sur Ajouter un nouveau plan.
  • Ce plan est juste un « pont ». Le seul champ critique est Groupe d’utilisateurs.
    • Surnom du plan : Lien groupe Enclave Plus (ou tout autre nom pour votre référence).
    • Groupe d’utilisateurs : Sélectionnez le groupe Discourse correct dans le menu déroulant.
    • Les autres champs (Montant, Intervalle) peuvent être laissés par défaut, car ils seront ignorés.
  • Enregistrez le plan. Répétez cette opération pour tous vos différents produits.

Résumé du dépannage

  • Problème : Les webhooks échouent avec une erreur 404 Not Found.
    • Solution : L’URL du point de terminaison dans Stripe est incorrecte. Elle doit être https://votre-site-discourse.com/s/hooks.
  • Problème : Le webhook est réussi (200 OK) et le paiement apparaît dans le profil de facturation de l’utilisateur, mais il n’est pas ajouté au groupe.
    • Solution : Vos métadonnées sont incorrectes. Vérifiez trois choses :
      1. Les métadonnées doivent être sur l’objet Prix Stripe, pas sur l’objet Produit.
      2. La CLÉ des métadonnées doit être exactement group_name.
      3. La VALEUR des métadonnées doit être le slug/identifiant unique du groupe (par exemple, EnclavePlus), pas son nom complet avec des espaces.

J’espère que ce guide fera gagner du temps et évitera la frustration à d’autres pour cette configuration complexe mais très puissante.

5 « J'aime »