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

ウェブフックは正しく設定されていますか? 設定がかなり厄介だったのを覚えていますし、その設定方法の説明はもう少し分かりやすくなるはずです。

はい、ウェブフックはうまく設定できました。それでレスポンスが流れてきていました。

問題がわかりました。Stripeの価格設定ページで、昇格させるグループ名をカスタムタグとして設定する必要がある点が、手順書に抜けていました。

今は私の環境では問題なく動作しています。プラグインは素晴らしいのですが、ドキュメントが詳細ではありません。

「いいね!」 1

ドキュメントを更新できるように、もう少し詳しく説明していただけますか?どのカスタムタグを追加し、どこに追加しましたか?

[ガイド] 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

これをテストしたところ、完璧でした!元のドキュメントを更新して、これを含めることにします!

「いいね!」 4

ドキュメントで欠けている重要な部分はこれです。別の部分を引用したので指摘しておきます。

「いいね!」 2

これを使ってアンカー日を自動設定する方法はありますか?誰かが支払う場合、ユーザーごとにサブスクリプション期間を手動で調整して月初めにリセットする必要があります。

Stripeのドキュメントによると、チェックアウト時にAPIで実行できるとありますが、現在のところプラグインで調整する方法がありません。

更新を投稿すると長くなる可能性があるため、これを新しいスレッドに移動します。

「いいね!」 3

:partying_face: このプラグインは、Bundling more popular plugins with Discourse core の一部として、Discourse コアにバンドルされるようになりました。セルフホストでこのプラグインを使用している場合は、次回のアップグレード前に app.yml から削除する必要があります。

「いいね!」 2

コアから削除するにはどうすればよいですか?プラグインフォークを強化して使用するためです。

「いいね!」 3

rm - rf discourse-subscroptions のようなものを git clone の前に行ってください。

「いいね!」 3

すみません、理解できませんでした。再構築中に、この統合されたプラグインコードを取得してビルドするとのことですが、すべて1つのステップで行われるということでしょうか?

これはテストしていませんが、おそらく機能するはずです。

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

これはプラグインディレクトリから実行されるため、コアに含まれている discourse-subscriptions を削除し、これまで使用していたものに置き換えます。したがって、app.ymlrm -rf を追加し、その後に git clone (これまたは置き換えたい他のプラグイン) を追加するだけで、目的どおりにコアプラグインをフォークに置き換えることができます。

「いいね!」 6

なるほど、Xプラグインがコアの一部になったというのは、プラグインがプラグインディレクトリのコアリポジトリにプリパッケージされ、コードをオプションでプルする必要がなくなるという意味なのですね。わかりました。構造的には何も変わりません。

「いいね!」 1

もしそれがプリパックされたものなら、プラグインバージョンのすべてのデータを失うことになりますか?すべてを再度設定する必要がありますか、それとも引き継がれますか?

データは失われません。app.yml からその行を削除するだけで、プラグインは以前と同様に機能し続けます。

「いいね!」 1

クーポンコードを入力した後、サブスクリプションの合計金額がすぐに更新されないのは予期された動作ですか?

Discourse 3.5.0.beta8-dev でテスト済み

ユーザーがサインアップしようとして支払いが失敗した場合、discourse_subscriptions_customer テーブルにある、そのユーザーを Stripe の顧客 ID に関連付けるエントリが削除されることを発見しました。この動作が意図的なものかどうかわかりませんが、いずれにしても、Stripe にオ��ァン顧客が残ってしまうため、手動で削除する必要があり、良い動作だとは思いません。また、再試行した場合に重複顧客が作成される可能性があり、レポートに影響を与える可能性があります。

「いいね!」 3

キャンペーンをリセットする方法はありますか?月次寄付目標を希望していましたが、新しい月の始まりで、新しい月次目標のためにゼロにリセットする方法が見つかりません。

「いいね!」 1

このプラグインが実際にサイトで動作しているのを見てみたいです。Subscriptions Pluginを使用しているフォーラムのリンクを共有していただける方はいらっしゃいますか?よろしくお願いします!