订阅插件使您能够创建一次性以及循环订阅,用户可以通过付费来访问受限内容。这不失为一种资助社区托管费用的绝佳方式。
本文由@林青枫 翻译、润色、校对、格式化为markdown文本,发布于Linux do 和 星语思源(starorigin),转载请注明作者。
功能特性
Discourse 订阅功能支持以下特性:
- 在管理面板创建新的产品和套餐
- 在管理面板取消和退款订阅
- 创建一次性购买或循环订阅套餐
- 为循环订阅添加免费试用
- 支持 SCA/3D 安全验证
- 在用户订阅/取消时,添加/移除用户到套餐组
- 从用户个人资料取消订阅
- 在订阅期结束时取消订阅
- 可选支持 Stripe Checkout
- 自动销售税计算和收取
- 用户可以更新其个人订阅的支付卡信息
位于顶部导航栏的“订阅”按钮将引导您至订阅页面 /s
,其中列出了您为站点配置的订阅选项:
当用户点击特定计划的“订阅”按钮后,将跳转至该计划的支付页面:
用户填写完付款详情和地址,并点击“订阅”后,将看到“感谢您!”的消息,并被引导至其账单页面:
同时,用户会被自动添加到您选择的用户组中,以便您轻松查看哪些用户已订阅,并为该用户组提供专属内容。
术语
- 订阅 - 订阅是一种定期付款计划,允许您控制对社区内容的访问权限。当创建或删除订阅时,用户会被添加到或移除出您与订阅计划关联的用户组。订阅由产品和订阅周期组成。
- 产品 - 在Stripe的术语中,产品是您正在销售的商品。一个产品可以包含一个或多个订阅周期。
- 要为您的产品添加描述,请添加一个名为“description”的元数据字段,并使用该字段。您可以使用Markdown格式。
- 订阅周期 - 订阅周期包含价格、循环周期,并与您的订阅者可以访问的用户组相关联。
请务必始终妥善保管您的Stripe私钥。
如果您关闭Discourse服务器、卸载此插件或您的网站离线,Stripe将继续向您的客户收取服务费用,直到订阅被取消。
配置
- 安装并启用插件
- 配置支付网关(Stripe)
- 在Stripe中配置Webhook和事件
- 在管理 > 插件 > 已安装 > 订阅 > 设置下添加您的Stripe密钥(公开密钥、私密密钥、Webhook密钥)
/admin/site_settings/category/discourse_subscriptions?filter=plugin%3Adiscourse-subscriptions
。 - 创建一个用户组,供您的订阅者通过购买加入
- 在管理 > 插件 > 订阅下创建产品和订阅周期
- 盈利!
设置您的支付网关。
首先,您需要在Stripe支付网关上拥有一个账户。为了开始使用,您可以设置一个测试模式账户,了解其工作原理,而无需进行任何实际交易或设置银行账户。插件中没有测试模式切换;请务必使用您的开发者密钥(它们以pk_test
、sk_test
开头)。
在您的Stripe账户中设置Webhook和事件
Webhook是使订阅取消功能完全正常工作所必需的。 请确保您已正确配置它们。
在Stripe上拥有账户后,您需要告知Stripe您网站的地址,以便它可以通知您有关某些交易的信息。您可以在Stripe仪表板的端点 > URL下输入此地址。
Webhook地址:[您的服务器地址]/s/hooks
– 其中[您的服务器地址]是您Discourse安装的URL。
您还需要告知Stripe它应该通过Webhook URL通知您哪些事件。
目前,Discourse订阅响应以下事件:
customer.subscription.deleted
customer.subscription.updated
checkout.session.completed
将Stripe API和Webhook密钥添加到您的插件设置中
Stripe需要被授权与您的网站通信。为此,它会发布一对私有和公开的API密钥以及一个用于您的Webhook的签名密钥。
要授权Webhook,请将Stripe的API密钥和Webhook密钥添加到您的设置页面(在开发者下)。
添加生产密钥将进行实时支付。如果您计划进行测试,请务必切换到“查看测试数据”模式,并在开发者下获取
pk_test
和sk_test
密钥。
在您的Stripe账户设置中,请参阅:
在管理 > 插件 > 已安装 > 订阅 > 设置下的相应设置中添加这些密钥/admin/site_settings/category/discourse_subscriptions?filter=plugin%3Adiscourse-subscriptions
。
在Discourse中设置用户组
当用户成功订阅您的Discourse应用程序,并且信用卡交易处理完毕后,他们将被添加到用户组中。通过将用户分配到用户组,您可以管理用户在您网站上的访问权限。用户组是Discourse的核心功能,此插件除了将用户添加到您与计划关联的组以及从中删除用户之外,不做任何其他操作。
创建一个或多个包含付费计划的产品。
在“管理”>“插件”>“订阅”下,单击“添加新产品”。保存产品后,您可以向其添加计划。请注意,价格和计费周期一旦创建就无法更改。这是为了避免订阅管理方面的混淆。
如果您查看您的Stripe仪表板,您会看到所有这些产品和计划都已列出。Discourse订阅不会在本地创建它们。它们是在Stripe中创建的。
测试
使用以下信用卡号码进行测试:
- 4242 4242 4242 4242
- 4111 1111 1111 1111(无需身份验证)
- 4000 0027 6000 3184(需要身份验证)
更多测试卡号:测试卡号 | Stripe文档
访问/s
并输入一些测试交易。
上线
准备上线后,将您的API和Webhook密钥更改为生产密钥。您需要在实时模式下创建新的产品和计划。
请注意,如果您未正确配置Stripe Webhook,并且由于任何原因(信用卡过期等)导致定期付款处理失败,用户仍然可以访问该组。要让Stripe自动取消订阅,请务必将您的管理失败付款设置配置为类似于下图,并按照上述说明配置Webhook。
更新付款信息
用户可通过访问账单页面,点击订阅旁边的编辑按钮来更新其个人订阅所用的银行卡。点击后将打开如下界面:
使用 Stripe 定价表进行 Stripe 结账
您也可以选择不使用订阅插件的产品和结账页面,而是使用 Stripe 结账 和 Stripe 定价表。
为使Stripe Checkout与订阅插件协同运作,请在Stripe内设置价格表,并将价格表嵌入代码中的
pricing-table-id
添加到discourse_subscriptions_pricing_table_id
站点设置中,同时启用该功能。在Stripe内设置价格表时,建议在结账完成后将用户链接回您的网站,否则他们将停留在Stripe确认页面,而没有返回您网站的链接。
对于订阅,重定向至
https://<your-site>/my/billing/subscriptions
是一个不错的选择。对于一次性付款,您可以直接链接至https://<your-site>/my/billing/payments
。
自动税务征收
若要启用自动税务征收,请勾选站点设置中 discourse_subscriptions_enable_automatic_tax
对应的复选框。
若您启用此功能,但尚未正确配置您的 Stripe 实例以征收税款,用户在完成结账流程后可能会看到如下弹出窗口:
更多信息请参考此指南,但由于插件现在传递了适当的automatic_tax[enabled]=true
参数(步骤5),因此无需进行过多操作。
请务必配置您的注册信息(步骤4):
以下是一个Stripe的Discourse订阅插件交易示例,展示了税款是如何被自动收取的:
配置
设置变量 | 含义 |
---|---|
discourse subscriptions enabled | 启用 Discourse 订阅插件。 |
discourse subscriptions extra nav subscribe | 在主导航中显示订阅按钮。 |
discourse subscriptions public key | Stripe Publishable Key(Stripe 可发布密钥)。 |
discourse subscriptions secret key | Stripe Secret Key(Stripe 私密密钥)。 |
discourse subscriptions webhook secret | Stripe Webhook Secret(Stripe Webhook 密钥)。 |
discourse subscriptions currency | 默认货币代码。创建订阅计划时可以覆盖此设置。 |
discourse subscriptions campaign enabled | 启用一个推广社区财务支持的活动横幅。 |
discourse subscriptions campaign goal | 你的支持活动的目标数值(订阅者数量或筹集的金额)。 |
discourse subscriptions campaign type | 选择要运行的活动类型(订阅者数量或每月筹集的金额)。 |
discourse subscriptions campaign banner location | 选择活动横幅的位置(顶部或侧边栏)。 |
discourse subscriptions campaign banner bg image | 上传自定义图片用作活动横幅的背景。 |
discourse subscriptions campaign banner shadow color | 选择活动横幅的阴影颜色。 |
discourse subscriptions campaign show contributors | 显示最近购买订阅产品的用户的头像。 |
discourse subscriptions campaign product | 当支持者点击活动上的按钮时,要发送给他们的 Stripe 产品 ID。如果此设置为空,支持者将被定向到主产品页面。 |
discourse subscriptions campaign grant | 授予用户一个月的免费订阅。 |
discourse subscriptions pricing table id | 来自嵌入代码的 Stripe 定价表 ID。 |
discourse subscriptions pricing table enabled | 启用 Stripe 定价表并替换现有的订阅页面。 |
discourse_subscriptions_enable_automatic_tax | 切换是否要收取销售税。需要在 Stripe 中进行一些设置。 |
discourse_subscriptions_enable_verbose_logging | 启用更详细的日志记录以帮助调试。请不要在生产环境中永久启用。 |