Discourse Subscriptions の議論を続けます
Discourse Subscriptions プラグインが成熟するにつれ、既存のメンバーシップを WooCommerce Subscriptions から Discourse Subscriptions へ移行する計画を立て始めたいと考えています。以下のプロセスは WooCommerce だけでなく、他の WP メンバーシップ/サブスクリプションプラグインにも適用されるはずです。
この移行には、以下の 3 つの要素に対応する必要があります:
- Stripe でのサブスクリプションの作成
- Stripe のサブスクリプションを Discourse のユーザーにリンクさせる
- SSO を逆転させ、Discourse を SSO プロバイダー、WordPress をクライアントとする
(1) Stripe でのサブスクリプションの作成
現時点では、既存のユーザーに対して Stripe でサブスクリプションを作成するのは手動プロセスのようです。私のメンバーはすでに Stripe に登録されているため、ワークフローは以下のようになります:
- WooCommerce Subscriptions からすべての購読者とデータをエクスポートする
- Stripe のカスタマーダッシュボードからユーザーに対してサブスクリプションを作成し、初回支払いのスケジュールを既存の WooCommerce サブスクリプションの満了日と一致させる
- WooCommerce でユーザーのサブスクリプションをキャンセルする
- すべてのユーザーの処理が完了したら、WooCommerce Subscriptions を無効化する
移行に関する Stripe の詳細情報はこちらをご覧ください。
(2) Stripe のサブスクリプションを Discourse のユーザーにリンクさせる
ユーザーが Stripe でサブスクリプションを設定された後、既存のユーザーを Discourse のサブスクリプションプランに追加するにはどうすればよいでしょうか?これにより、ユーザーがサブスクリプションをキャンセルできるようになり、Stripe の支払いが失敗した際にユーザーをグループから削除できるようになります。
(3) SSO を逆転させ、Discourse をプロバイダー、WP をクライアントとして使用する
この部分はこちらで説明されています。
\u003chr\u003e
#2 が可能かどうかを突き止めることに行き詰まっています。この切り替えを行った方がいれば、ぜひお聞かせください。
rake subscriptions:import という rake タスクを拡張するか、またはユーザーのサブスクリプションをインポートしてリンクさせる別のタスクを追加することは可能でしょうか?
「いいね!」 4
justin
(Justin DiRose)
4
そんなことをしてくださるとは光栄です。
はい、これはプラグインが対応できる機能ではありません。ただし、プログラミングのスキルがあれば、Stripe API を使ってこの作業の一部を自動化できるかもしれません。もしスキルがない場合は、手動での対応が唯一の方法となるでしょう。
問題の状況を明確にさせてください。Stripe でサブスクリプションを作成し、Discourse 側のアクセス権を遡って設定したい、ということでよろしいでしょうか?
rake タスクでこれを実現する方法があるとは思うのですが、残念ながらすぐに対応することはできません。ただし、プルリクエストは大歓迎です
適切な情報を含む DiscourseSubscriptions::Customer レコードを作成し、その後ユーザーをグループに追加する必要があります。
これはコンソールから手動で実行することも可能です:
DiscourseSubscriptions::Customer.create(
user_id: <user id>,
customer_id: <stripe customer id>,
product_id: <stripe product id>
)
「いいね!」 4
はい、その通りです。これは手順 (1) が完了した後、Stripe 内の顧客に新しいサブスクリプションが割り当てられた時点で発生します。
私の場合、顧客は既に Stripe に存在しています。WooCommerce Subscriptions がメンバーシップ購入時に Stripe に顧客を作成するため、クレジットカード情報を含め、必要なデータは既に存在しています。
一つずつ行うのではなく、CSV ファイルから入力させることは可能でしょうか?
これは既存のメンバーシップベースのコミュニティを持つ人々にとって大きな障壁になると思います。そのため、導入するのは新規コミュニティに限られるでしょう。
「いいね!」 2
justin
(Justin DiRose)
6
rake タスクの拡張をリストに追加しますが、前述の通り、まだ処理すべきバックログがかなり多い状況です!
はい、可能です。Ruby で CSV ファイルを読み込んでその内容をループ処理できるため、完全に実現可能です。
「いいね!」 2
完璧です、ジャスティンさん、ありがとうございます。理解しましたし、今後の進展を楽しみにしています。いずれにせよ多くの手動手順が必要になるため、これを冬のプロジェクトとして計画しています。
「いいね!」 2
pfaffman
(Jay Pfaffman)
8
おめでとうございます、ジャスティンさん!これは大きな成果ですね!昨日から触ってみて、早速使いたくてたまりません。また、WooCommerce などの既存システムからの移行を支援する方法も探ってみたいと思います。現時点では、これが「単純な」(笑)Rake タスクで済むのか、それともフォーラム移行のように各ジョブがユニークなケース(スノーflake)になるのかは明確ではありませんが(後者になるでしょうね)。
「いいね!」 4
justin
(Justin DiRose)
9
Jay、本当にありがとう 
難所は、Stripe から顧客情報をプラグイン内の Customer テーブルに取り込み、適切に紐付けることです。そこから先は、主にグループメンバーシップの追加となります。ただ、あなたが言うように、毎回ケースが異なる可能性が高いでしょう。
「いいね!」 3
pfaffman
(Jay Pfaffman)
10
一見するとStripeにはメールアドレスがあるように見えますが、トリックはDiscourseでは異なるメールアドレスが登録されているという点です。
「いいね!」 4
メールアドレスに加えて、Stripe と WooCommerce Subscriptions は、顧客 ID: cus_ABCdefxyz、カード ID: src_1234ABxyzasdf、および取引 ID: ch_0123ABCDefgh も共有します。
私の記憶が正しければ、PMPro も同様に共有しています。
私の意見では、両方のアプリからテーブルをエクスポートし、スプレッドシートで一致を確認した後、その CSV ファイルをソースとして使用するのが最善の方法です。
「いいね!」 3
jericson
(Jon Ericson)
12
これがうまくいったのかどうか気になっています。メンバープレスから顧客を移行するのを手伝おうとしており、同様のことをする必要があるようです。同様のことを試したことがある人がいれば、ぜひ教えていただきたいです。
「いいね!」 1
まだ「未完了」モードです。他のプロジェクトが割り込んで優先順位を奪っているようです。@pfaffman が何かアドバイスをくれるかもしれません。
「いいね!」 2