Plugin d'abonnements Discourse

Avez-vous correctement configuré les webhooks ? Je me souviens que leur configuration était assez complexe, et les instructions pour le faire pourraient être un peu plus claires.

Oui, j’ai bien configuré les webhooks, c’est comme ça que la réponse revenait.

J’ai trouvé le problème. Les instructions manquent un point où nous devons configurer les balises personnalisées avec le nom du groupe à promouvoir sur la page de configuration des prix de Stripe.

Ça fonctionne bien pour moi maintenant. Le plugin est génial mais la documentation n’est pas détaillée.

1 « J'aime »

Pouvez-vous expliquer cela un peu plus afin que nous puissions demander à quelqu’un de mettre à jour la documentation ? Quelle balise personnalisée avez-vous ajoutée et où l’avez-vous ajoutée ?

[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 »

[quote=“SubStrider, post:712, topic:140818”]
4. Configurez le point de terminaison du webhook (Correction de l’erreur 404) C’est le point de défaillance le plus courant.

  • Allez dans **Developers
4 « J'aime »

La partie manquante essentielle dans la documentation est celle-ci. Je le signale puisque vous avez cité une autre partie.

2 « J'aime »

Y a-t-il un moyen de définir automatiquement la date d’ancrage avec cela ? Si quelqu’un paie, je dois ajuster manuellement la période d’abonnement pour qu’elle soit réinitialisée le 1er du mois pour chaque utilisateur.

La documentation Stripe indique que cela peut être fait avec l’API lors du paiement, mais nous n’avons actuellement aucun moyen de l’ajuster dans le plugin.

Je déplace ceci dans le nouveau fil de discussion car il pourrait s’allonger au fur et à mesure que je publie des mises à jour.

3 « J'aime »

:partying_face: Ce plugin est désormais inclus dans le cœur de Discourse dans le cadre de Bundling more popular plugins with Discourse core. Si vous auto-hébergez et utilisez le plugin, vous devez le supprimer de votre app.yml avant votre prochaine mise à niveau.

2 « J'aime »

Comment puis-je le supprimer du cœur ? Car j’utiliserais la fork du plugin que j’ai améliorée.

3 « J'aime »

Quelque chose comme

rm - rf discourse-subscroptions

Avant le git clone.

3 « J'aime »

Désolé, je n’ai pas compris. Lors de la reconstruction, il récupérera ce code de plugin intégré et le construira, tout en une seule étape, n’est-ce pas ?

Je n’ai pas testé cela, mais je suis à peu près sûr que cela fonctionnera :

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - rm -rf discourse-subscriptions
          - git clone https://github.com/yourForkUser/discourse-subscriptions

Comme cela est exécuté à partir du répertoire des plugins, il supprimera le discourse-subscriptions qui est maintenant inclus dans le cœur et le remplacera par celui que vous avez toujours utilisé auparavant. L’ajout de ce rm -rf à votre app.yml avant votre git clone (pour ce plugin ou tout autre plugin que vous ne souhaitez pas inclure ou que vous souhaitez remplacer) devrait donc faire ce que vous voulez et remplacer le plugin de base par votre fork.

6 « J'aime »

Bien, quand ils disent que le plugin X fait maintenant partie du noyau, tout ce qu’ils veulent dire, c’est que le plugin sera pré-empaqueté dans le dépôt principal du répertoire des plugins et que nous n’aurons pas à extraire ce code de manière facultative. Compris. Structurellement, rien ne change.

1 « J'aime »

Si c’est pré-emballé maintenant. Vais-je perdre toutes les données de la version du plugin ? Devrai-je tout reconfigurer ou sera-t-il transféré ?

Vous ne perdrez aucune donnée. Supprimez simplement la ligne de app.yml et le plugin continuera de fonctionner comme avant.

1 « J'aime »

Est-il normal que le montant total de l’abonnement ne se mette pas à jour immédiatement après la saisie d’un code promotionnel ?

Testé sur Discourse 3.5.0.beta8-dev

J’ai constaté que si un utilisateur tente de s’inscrire et que son paiement échoue, l’entrée dans la table discourse_subscriptions_customer qui l’associe à son identifiant client Stripe est supprimée. Je ne suis pas sûr que ce comportement soit intentionnel, mais quoi qu’il en soit, je ne pense pas que ce soit un bon comportement car il en résulte des clients orphelins dans Stripe qui doivent être supprimés manuellement. Cela entraîne également la création de clients en double s’ils réessayent, ce qui peut avoir un impact sur nos rapports.

3 « J'aime »

Y a-t-il un moyen de réinitialiser la campagne ? J’espérais un objectif de don mensuel, mais c’est le début d’un nouveau mois et je ne vois aucun moyen de le réinitialiser à zéro pour un nouvel objectif mensuel.

1 « J'aime »

J’adorerais voir ce plugin en action sur un site. Quelqu’un serait-il prêt à partager le lien vers son forum qui utilise le plugin d’abonnement ? Merci !