Discourse Subscriptions 插件

:discourse2: Summary Discourse Subscriptions 允许站点管理员能够销售相关产品,或者是采取订购方式的交易。Discourse 会针对这类用户划分为特定的用户组。
:hammer_and_wrench: Repository Link https://src.isharkfly.com/Discource-C/discourse-subscriptions
:open_book: Install Guide Discourse 如何安装插件
官方讨论地址 Discourse Subscriptions - plugin - Discourse Meta

本插件的安装需要重构。

本订购插件允许用户进行一次性购买或者订购的方式来对 Discourse 社区中需要订购才能访问的内容进行访问。同时这个插件对降低社区的运营成本,并且能够获得一定的收入上提供帮助。

特性

Discourse 的订阅支持有下面的一些特性:

“Subscribe” 按钮位于顶部的导航中,单击这个导航将会带用户访问订阅界面,或者使用快捷键 /s 来进行访问:


当用户单击其中的一个 “Subscribe” 按钮后,Discourse 将会针对订阅计划打开一个支付页面:


当用户提交了他们的支付信息后,单击 “Subscribe” 按钮,用户将会收到一个谢谢的消息,并且将用户导航到账单页面:


同时,用户也会被自动添加到订阅用户组中,这样你可以更加容易的找到那些用户是订阅用户和一些特定的用户组只有订阅用户才能查看的内容。

定义

  • 订阅(Subscription) - 订阅(Subscription) 意味着为一种周期性的支付方式允许你针对特定的用户来控制对你社区的访问权限。当一个订阅被订阅或者删除的时候,用户将会从特定的用户组中添加或者删除。一个定于被创建为一个产品或者计划。
  • 产品(Product) - 一个产品的定义为一个你销售的产品,其中可以包含有一个或者多个计划(Product)。针对一个产品,你可以为这个产品添加一个描述,在描述中,你可以使用 Markdown 格式。
  • 计划(Plan) - 一个计划中通常包含有一个特定的价格,支付周期等信息,同时这个计划将会关联到特定用户组。

:rotating_light: 对 Stripe 提供的私有 Key 需要非常小心,并且妥善进行保管。

:warning: 如果你的 Discourse 安装实例因为某中原因被关闭或者这个支付插件被从 Discourse 安装实例中移除的话,Stripe 将会持续按照周期方式为你的用户创建支付。因此,针对本插件的关闭和删除需要同时删除 Stripe 中的支付方式。

配置

  1. 安装和启用插件
  2. 配置支付网关(Stripe)
  3. 在 Stripe 中配置回调和事件(Webhooks & Events)(Stripe)
  4. 添加 Stripe 的参数回 Discourse, 这里有 3 个参数要填写 (public, secret, webhook secret) ,添加的路径地址为: Admin > Plugins > Installed > Subscriptions > Settings /admin/site_settings/category/discourse_subscriptions?filter=plugin%3Adiscourse-subscriptions.
  5. 针对你的订阅用户创建一个用户组。
  6. Admin > Plugins > Subscriptions 路径下添加产品。
  7. 完成配置

配置支付网关

首先需要在 Stripe 网站上设置账户来配置支付网关。当设置成功后可以将账号设置为测试模式(Test mode)来对交易进行测试而不进行实际的交易或者设置银行账号。

针对 Discourse 的订阅插件来说,在插件中并没有测试模式,但是可以通过在插件中提供的 Key 的信息来判断是不是运行在测试模式下,查看 Key( pk_test, sk_test)如果有 test 的字符的话,那么表示插件运行在测试模式下。

Stripe 的测试针对中文环境不是非常友好,如果你有美国的 SSN 号码或者在美国有实体商业实体的话, Stripe 的支付会非常方便。

在 Stripe 账号中设置回调和事件

:bomb: 回调(Webhooks )功能是订阅或者取消订阅功能能够完全工作 的必要条件。请确定回调配置被正常配置。

当你完成 Stripe 的配置后,你需要告诉 Stripe 你的网站地址 这样的话,当特定的一些事件发生的时候,Stripe 将会调用你提供的地址来推送事件。你可以在 Stripe 的控制面板中添加 Discourse 安装实例的地址,路径位于 Endpoints > URL

Webhooks address: [your server address]/s/hooks – 定义 [your server address] 为你的 Discourse 安装实例地址。

同时,你还需要 Stripe 通知那些事件需要进行 API 回调。

当前 Discourage 只能相应下面 2 个事件:

  • customer.subscription.deleted
  • customer.subscription.updated

在 Discourse 插件配置中添加 Stripe API 和 Webhook Key

Stripe 需要授权后才能对安装的 Discourse 实例进行通信,在这里我们需要在 Discourse 安装实例中添加 Stripe 的 key 密钥。

这个 2 个参数被定义为: API keyssigning secret

为了 Stripe 的回调进行授权,从 Stripe 中获得必要的参数后回填到 Discourse 安装实例中。

:warning: 为了避免生产环境的 Key 对实际的信用卡进行扣款,在 Stripe
的环境中可以使用测试模式,这个时候提供的 key 上面会使用字符 test j进行明确标识的。如下: pk_testsk_test 表示的是测试 Key。

在你的 Stripe 账号中可以看到下面的配置信息:

通过 Admin > Plugins > Installed > Subscriptions > Settings 路径安装到 Discourse 的安装实例中。

也可以使用快捷
URL 链接地址: /admin/site_settings/category/discourse_subscriptions?filter=plugin%3Adiscourse-subscriptions.

在 Discourse 中设置用户组

当一个用户在你的 Discourse 安装实例中完成订购,同时信用卡也被正常处理后,这个用户将会添加到一个特定的用户组中。

通过对这个用户组的设置,你可以对订阅用户组中的用户设置你网站的访问权限。

对用户组的权限配置是 Discourse 的核心功能,这个插件只回把用户添加到用户组中和从用户组中删除。

至于这个用户组的权限有什么需要自己通过 Discourse 进行配置。

创建一个或者多个产品

访问Admin > Plugins > Subscriptions,单击添加一个新的产品。

当新的产品添加完成后,我们就可以对新添加的产品近定价了。

需要注意的是,添加的产品和定价在配置完成后是不可以修改的。

这个设置的主要原因还是为了避免产生数据上的冲突。

当完成产品的定价后,可以访问 Stripe Dashboard,在 Stripe 的网站,你可以看到我们在本地 Discourse 安装实例中配置的产品。

这是因为 Discourse 把本地配置的产品信息通过 API 推送到了 Stripe 网站上了。

实际上针对产品信息的维护是在 Stripe 网站上进行的。

测试

使用下面的信用卡信息来进行测试:

  • 4242 4242 4242 4242
  • 4111 1111 1111 1111 (不需要进行授权 no authentication required)
  • 4000 0027 6000 3184 (需要进行授权 authentication required)

有关更多的测试信用卡信息,请参考文档:Test card numbers | Stripe Documentation

访问 Discourse 实例的 URL 后添加 /s 来进行一些信用卡测试。

上线

当完成所有的基础配置和设置后就可以上线了。

在上线的时候可以将信用卡的处理 Key 修改为生产环境中使用的 Key。

你需要针对上线后的模式创建一个新的产品和价格。

需要注意的是:如果你没有正确的配置 Stripe 回调地址,或者用户因为信用卡到期或者其他原因导致在交易的时候 Stripe 无法正确处理交易,那么这个用户还是会保留在你设置的用户组中的。

Discourse 不会自动把用户从用户组中进行移除。

为了避免 Stripe 自动取消订阅的问题,请设置你的 Manage failed payments 设置。

这个和上面的设置回调地址的设置是相同的。

更新支付信息

用户可以通过访问自己的订阅页面来更新按月订购的支付信息。

通过单击订阅按钮,可以对当前订阅使用的支付信息进行更新。

Stripe 通过 Stripe 价格表进行支付

你也可以使用 Stripe 的价格表和支付插件来替换掉 Discourse 的支付信息。

Stripe 支付(Checkout)

Stripe 价格表(Pricing Tables).

如果想在订阅插件中使用 Stripe 的价格表进行支付话,我们需要在 Discourse 中配置 Stripe
的价格表 ID。配置的参数名称为: discourse_subscriptions_pricing_table_id 在这个参数中输入 Stripe 的价格表 ID。

自动 Tax 收集

如果希望启用自动税务收集功能,请选择 discourse_subscriptions_enable_automatic_tax 选择对话框。

如果你在 Discourse 中启用了自动税率处理,但是没有在 Stripe 中对税率进行配置的话,在用户进行支付的时候将会看到下面信息:

请访问 Stripe 税率指南 来获得更多的有效信息,但是针对这个插件的配置应该也没有什么太多的内容需要进行配置。在 Stripe 的配置第 5 步中,我们只需要配置automatic_tax[enabled]=true 这个参数。

同时,别忘了在 (第 4 步) 中对注册的州进行相关的配置。


下图显示的是整个交易的过程中的税率计算情况:

参数配置表

参数名称 描述
discourse subscriptions enabled 启用 Discourse Subscriptions 插件.
discourse subscriptions extra nav subscribe 在主导航中显示订阅链接
discourse subscriptions public key Stripe Publishable Key
discourse subscriptions secret key Stripe Secret Key
discourse subscriptions webhook secret Stripe Webhook Secret
discourse subscriptions currency 默认的货币代码。这个配置可以在创建订阅计划的时候被重新定义
discourse subscriptions campaign enabled 启用捐助的进程对话框,这个能够帮助社区完成一定的捐助计划supporting this community financially.
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 针对订阅的用户,给予 1 个月的免费订购。
discourse subscriptions pricing table id Stripe 价格表 ID,这个被 用来使用 Stripe 的支付。
discourse subscriptions pricing table enabled 使用 Stripe 的价格表来替代 Discourse 的产品信息。the existing subscribe page
discourse_subscriptions_enable_automatic_tax 选择是否对产品的税率进行计算,这个需要在 Stripe 中进行更多的配置。


:discourse2: Hosted by us? This plugin is available on all of our hosting plans Subscriptions | Discourse - Civilized Discussion

1 Like

这就是刚刚重构加的新插件吗

是的,这个插件比较大。

我们还在摸索测试中,感觉测试配置还蛮复杂的。

这个东西要stripe,完全不是给中国用户能用的……

虽然吧 好像主要也是中国这边什么都搞一套自己的

在美国这边慢慢有点感觉像独角兽企业了。

其实处理信用卡交易 PayPal 也可以做的。

但 Paypal 为了把交易完全掌握在自己手上,设置了非常复杂的 API 调用方案。要通过网页打开 Paypal 的页面,然后用户在 Paypal 的页面上输入卡号,然后完成交易后回调客户端。

整个交易过程简直是想死的心都有。

stripe 实在是简化太多了,直接调用 API,就能完成交易。

这个就好像以前通过网站发送电子邮件,搞得及其复杂,写过 Java mail 邮件的 API ,这个是人写的东西吗?

SendGrid 就做了简化,我给你一个 SDK 吧,用这个 SDK 只需要配置 Key,然后把收发地址配一下就行了。

邮件内容是 HTML 还是附件什么的,你自己按照文档构建对象就行。

Mailgun 也是一样的,自从用上他们的邮件服务后,邮件接口调用变成了 JSON API 调用,你说爽不爽。

A post was split to a new topic: Stripe 信用卡支付失败 Discourse 事件响应

插件确实不错,但是这个stripe支付确实难搞,要是有PayPal就好了。

Stripe 这个插件如果你是美国的纳税实体人,或者有一个合法运营的公司,申请起来还是蛮快的。

但对不是在美国的或者其他国家的就明显没有那么友好了。

1 Like