继续讨论 Discourse 订阅 中的话题
随着 Discourse 订阅插件逐渐成熟,我计划开始将我的现有会员从 WooCommerce 订阅迁移到 Discourse 订阅。以下流程同样适用于其他 WordPress 会员/订阅插件,而不仅限于 WooCommerce。
此次迁移需要解决三个关键环节:
- 在 Stripe 中创建订阅
- 将 Stripe 订阅与 Discourse 中的用户关联
- 反转 SSO 流程,使 Discourse 成为 SSO 提供商,WordPress 作为客户端
(1) 在 Stripe 中创建订阅
目前看来,为现有用户在 Stripe 中创建订阅是一个手动过程。我的会员信息已经存在于 Stripe 中,因此工作流程大致如下:
- 从 WooCommerce 订阅导出所有订阅者及其数据
- 在 Stripe 客户仪表板中为用户创建订阅,并将首次付款时间安排为与现有 WooCommerce 订阅的到期日一致
- 取消用户在 WooCommerce 中的订阅
- 完成所有用户迁移后,禁用 WooCommerce 订阅插件
更多相关信息请参阅 Stripe 关于数据迁移的说明。
(2) 将 Stripe 订阅与 Discourse 中的用户关联
一旦用户在 Stripe 中设置了订阅,我们该如何将该现有用户添加到 Discourse 的订阅计划中?这是必要的,以便用户能够取消订阅,并在 Stripe 付款失败时将用户从相关群组中移除。
(3) 反转 SSO 流程,使用 Discourse 作为提供商,WordPress 作为客户端
这部分内容在 此处 有详细描述。
\u003chr\u003e
我目前卡在了如何确定第 2 步是否可行,非常希望能听到有人已经成功完成过此类迁移的经验分享。
rake subscriptions:import 这个 rake 任务能否被扩展,或者是否可以添加一个新任务,以便同时导入并关联用户的订阅?
4 个赞
justin
(Justin DiRose)
4
很高兴看到你们在推进这项工作。
没错,这不是该插件目前能直接帮助解决的问题。不过,如果你具备编程能力,或许可以利用 Stripe API 来自动化部分流程。如果没有,手动操作可能是目前唯一可行的方法。
为了确认我是否理解正确你的问题:你已经在 Stripe 中创建了订阅,现在想要在 Discourse 中补全相应的访问权限,对吗?
我认为通过 rake 任务应该可以实现这一点,但不幸的是,我近期无法着手处理这个问题。不过,非常欢迎社区贡献(pr-welcome):)你需要创建一个包含所有必要信息的 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 任务加入我的待办事项,但正如我之前提到的,我还有很长的 backlog 需要处理!
是的,完全可以。Ruby 可以读取 CSV 文件并遍历其内容,因此这在技术上是完全可行的。
2 个赞
完美——谢谢 Justin。我理解了,并期待未来的发展。我计划将其作为一个冬季项目,因为无论如何都需要大量手动步骤。
2 个赞
pfaffman
(Jay Pfaffman)
8
恭喜,Justin!这是一项巨大的成就!我昨天就开始尝试了,迫不及待想开始使用它。我也会着手研究如何帮助那些从 WooCommerce 等平台迁移过来的用户。目前还不清楚这是否会是一个“简单”(哈哈!)的 Rake 任务,还是会更像论坛迁移那样,每个任务都独一无二(我预计会是后者)。
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
我想知道这是否奏效了。我正在帮助一位客户从 MemberPress 迁移,看来我需要做类似的事情。我很想向任何尝试过类似事情的人学习。
1 个赞
我的项目仍处于“待办”模式。其他项目似乎会插入并优先处理。@pfaffman 可能会有一些指导。
2 个赞