Discourse サブスクリプションプラグイン

[ガイド] Stripe 価格設定テーブルを使用した Discourse サブスクリプションの設定方法(および一般的な落とし穴)

皆さん、こんにちは。

長時間のトラブルシューティングを経て、公式の discourse-subscriptions プラグインを最新の Stripe 価格設定テーブル メソッドを使用して設定するための決定的なガイドを共有したいと思います。このアプローチは強力ですが、すぐに明らかにならない、または失敗する Webhook (404 Not Found) や、支払いが成功してもユーザーがグループに追加されないといったエラーにつながる可能性のある、いくつかの重要なステップがあります。

以下に、動作が確認されているステップバイステップのプロセスを示します。


パート 1: Stripe の設定

このプロセスでは、すべての製品と価格の「信頼できる情報源」として Stripe を使用します。

1. 製品と価格の作成

  • Stripe ダッシュボードで、ライブモードになっていることを確認してください。
  • 製品 > 製品カタログ に移動します。
  • まず、メインの製品を作成します(例:「プレミアムメンバーシップ」、「VIP アクセス」)。
  • 各製品の下に、関連するすべての価格を作成します(例:XX / 月XXX / 年)。

2. 重要なメタデータの手順 プラグインがユーザーをグループに自動的に追加するには、作成するすべての価格オブジェクトに特定のメタデータを追加する必要があります。Stripe ダッシュボードの UI では、これを見つけるのが難しい場合があります。

  • 新しい価格を作成するとき(または「価格を編集」オプションが見つかる場合)は、メタデータを追加する必要があります。メタデータフィールドを表示するには、価格作成中に**「追加オプション」**をクリックする必要がある場合があります。
  • + メタデータを追加 をクリックし、以下を入力します。
    • キー: group_name
    • 値: Discourse のグループの一意の、URL セーフな スラッグ/ハンドル。完全な名前ではありません。

例:

  • Discourse グループの完全名が 「Enclave Plus」 の場合、そのスラッグはおそらく EnclavePlus です。
  • 値として EnclavePlus を使用する必要があります。スペースを含む \"Enclave Plus\" を使用すると失敗します。
  • グループにリンクしたいすべての価格プランに対して、これを繰り返す必要があります。

3. Stripe 価格設定テーブルの作成

  • 製品 > 価格設定テーブル に移動します。
  • 新しいテーブルを作成し、先ほど設定した価格を追加します。
  • テーブルを公開した後、「コードをコピー」ボタンをクリックして、価格設定テーブル IDprctbl_... で始まります)を取得します。

4. Webhook エンドポイントの設定(404 エラーの修正) これは最も一般的な障害点です。

  • 開発者 > Webhook に移動し、+ エンドポイントを追加 をクリックします。
  • エンドポイント URL は次の形式である必要があります:https://your-discourse-site.com/s/hooks 注意: 正しいパスは /s/hooks であり、/s/stripe/webhook ではありません。
  • 送信するイベント には、少なくとも以下を追加します。
    • checkout.session.completed
    • customer.subscription.deleted
  • エンドポイントを作成し、署名シークレットwhsec_... で始まります)をコピーします。

パート 2: Discourse の設定

次に、Stripe で設定したすべてを使用するようにプラグインを設定します。

1. API キーと価格設定テーブル ID の入力

  • 管理者 > 設定 に移動し、discourse subscriptions を検索します。
  • ライブ Stripe キーを入力します。
    • discourse subscriptions public key (pk_live_...)
    • discourse subscriptions secret key (sk_live_...)
    • discourse subscriptions webhook secret (whsec_...)
  • 価格設定テーブルモードを有効にします。
    • discourse subscriptions pricing table enabled のチェックボックスをオンにします。
    • discourse subscriptions pricing table id フィールドに prctbl_... ID を貼り付けます。

2. Stripe 製品と Discourse グループのリンク 価格設定テーブルを使用しても、どのグループがどの製品に属するかを Discourse に伝える必要があります。

  • 管理者 > プラグイン > サブスクリプション に移動し、製品タブをクリックします。
  • 新しい製品を作成 をクリックします。
  • Stripe の製品名と完全に一致する 製品名を入力します(例:Enclave Plus)。
  • 製品を保存します。製品ページで下にスクロールし、新しいプランを追加 をクリックします。
  • このプランは単なる「ブリッジ」です。唯一重要なフィールドは ユーザーグループ です。
    • プランのニックネーム: Enclave Plus Group Link(または参照用の任意の名前)。
    • ユーザーグループ: ドロップダウンから正しい Discourse グループを選択します。
    • その他のフィールド(金額、間隔)はデフォルトのままにしておくことができます。無視されるためです。
  • プランを保存します。これを、さまざまな製品ごとに繰り返します。

トラブルシューティングの概要

  • 問題: Webhook が 404 Not Found エラーで失敗しています。
    • 解決策: Stripe のエンドポイント URL が間違っています。https://your-discourse-site.com/s/hooks である必要があります。
  • 問題: Webhook は成功(200 OK)し、支払いはユーザーの請求プロファイルに表示されますが、グループに追加されません
    • 解決策: メタデータが正しくありません。次の 3 つを確認してください。
      1. メタデータは、製品オブジェクトではなく、Stripe 価格オブジェクトに存在する必要があります。
      2. メタデータキーは正確に group_name である必要があります。
      3. メタデータ値は、グループの完全な名前(スペースを含む)ではなく、グループの一意の スラッグ/ハンドル(例:EnclavePlus)である必要があります。

このガイドが、この複雑ですが非常に強力なセットアップに関する他の人々の時間とフラストレーションを節約できることを願っています。

「いいね!」 5