您是否正确配置了 Webhooks?我记得设置它们相当棘手,而且操作说明可以更清楚一些。
是的,网络钩子设置得很顺利,响应就是这样回传的。
我找到了问题所在。说明缺少了一个要点,即我们必须在 Stripe 定价配置页面上设置自定义标签,以推广到组名。
现在对我来说运行正常。这个插件很棒,但文档不够详细。
您能再详细解释一下吗?这样我们就可以有人更新文档了。您添加了什么自定义标签,又在哪里添加的?
[指南] 如何使用 Stripe 定价表设置 Discourse 订阅(及常见陷阱)
大家好,
经过漫长的故障排除过程,我想分享一个使用现代 Stripe 定价表 方法设置官方 discourse-subscriptions 插件的权威指南。这种方法功能强大,但有几个关键步骤并不显而易见,可能会导致诸如 webhook 失败(404 Not Found)或用户在付款成功后未被添加到群组等错误。
以下是已确认可行的分步过程。
第一部分:Stripe 配置
此过程使用 Stripe 作为所有产品和价格的“事实来源”。
1. 创建您的产品和价格
- 在您的 Stripe Dashboard 中,确保您处于实时模式。
- 转到产品 > 产品目录。
- 首先创建您的主要产品(例如,“高级会员”、“VIP 访问”)。
- 在每个产品下,创建所有相关的价格(例如,
XX / 月、XXX / 年)。
2. 至关重要的元数据步骤 要让插件自动将用户添加到群组,您必须为每一个价格对象添加特定的元数据。Stripe 的仪表板界面可能很难找到它。
- 创建新价格时(或如果您能找到“编辑价格”选项),您必须添加元数据。您可能需要在价格创建过程中点击**“其他选项”**以显示元数据字段。
- 点击**+ 添加元数据**并输入以下内容:
- 键:
group_name - 值: Discourse 中群组的唯一、URL 安全的** slug/句柄**,而不是其完整名称。
- 键:
示例:
- 如果您的 Discourse 群组的完整名称是**“Enclave Plus”**,则其 slug 可能是
EnclavePlus。- 您必须使用
EnclavePlus作为值。使用带空格的“Enclave Plus”将导致失败。
- 您必须为要链接到群组的每个价格计划重复此操作。
3. 创建您的 Stripe 定价表
- 转到产品 > 定价表。
- 创建一个新表并添加您刚刚配置的价格。
- 发布表格后,点击“复制代码”按钮以获取您的定价表 ID(它以
prctbl_...开头)。
4. 配置 Webhook 端点(404 错误修复) 这是最常见的故障点。
- 转到开发人员 > Webhook,然后点击**+ 添加端点**。
- 端点 URL 必须符合以下格式:
https://your-discourse-site.com/s/hooks
注意:正确的路径是/s/hooks,而不是/s/stripe/webhook。 - 对于要发送的事件,至少添加:
checkout.session.completedcustomer.subscription.deleted
- 创建端点并复制签名密钥(它以
whsec_...开头)。
第二部分:Discourse 配置
现在,让我们配置插件以使用您在 Stripe 中设置的所有内容。
1. 输入 API 密钥和定价表 ID
- 转到
Admin>Settings并搜索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复选框。 - 将您的
prctbl_...ID 粘贴到discourse subscriptions pricing table id字段中。
- 勾选
2. 将 Stripe 产品链接到 Discourse 群组 即使有定价表,您也需要告诉 Discourse 哪个群组属于哪个产品。
- 转到
Admin>Plugins>Subscriptions,然后点击产品选项卡。 - 点击创建新产品。
- 输入一个产品名称,该名称完全匹配 Stripe 中的产品名称(例如,
Enclave Plus)。 - 保存产品。在产品页面上,向下滚动并点击添加新计划。
- 此计划仅作为“桥梁”。唯一关键的字段是用户群组。
- 计划昵称:
Enclave Plus Group Link(或任何供您参考的名称)。 - 用户群组: 从下拉列表中选择正确的 Discourse 群组。
- 其他字段(金额、间隔)可以保留默认值,因为它们将被忽略。
- 计划昵称:
- 保存计划。为所有不同的产品重复此操作。
故障排除摘要
- 问题: Webhook 失败并出现
404 Not Found错误。- 解决方案: 您在 Stripe 中的端点 URL 不正确。它必须是
https://your-discourse-site.com/s/hooks。
- 解决方案: 您在 Stripe 中的端点 URL 不正确。它必须是
- 问题: Webhook 成功(
200 OK),并且付款显示在用户的账单资料中,但他们未被添加到群组。- 解决方案: 您的元数据不正确。检查三件事:
- 元数据必须位于Stripe 价格对象上,而不是产品对象上。
- 元数据键必须完全是
group_name。 - 元数据值必须是群组的唯一slug/句柄(例如,
EnclavePlus),而不是带空格的完整名称。
- 解决方案: 您的元数据不正确。检查三件事:
希望本指南能为他人节省在此复杂但功能强大的设置过程中可能遇到的时间和挫败感。
[quote=“SubStrider, post:712, topic:140818”]
4. 配置 Webhook 端点(404 错误修复) 这是最常见的故障点。
- 前往 **Developers
文档中遗漏的关键部分是这个。既然您引用了另一部分,我在此指出。
是否有任何方法可以自动设置锚定日期?如果有人付款,我必须手动调整订阅期,以便为每个用户在每个月的第一天重置。
Stripe 文档说可以在结账时通过 API 完成此操作,但我们目前没有办法在插件中进行调整。
将此内容移至新主题,因为随着我发布更新,内容可能会变得很长。
此插件现已作为 Bundling more popular plugins with Discourse core 的一部分,与 Discourse 核心捆绑在一起。如果您是自托管用户并使用了此插件,则需要在下次升级前将其从 app.yml 中移除。
我该如何将其从核心中移除?因为我将使用我已增强的插件分支。
类似
rm - rf discourse-subscroptions
在 git clone 之前。
抱歉,不明白,在重建过程中,它会获取此集成插件代码并进行构建,所有操作都在一步完成,对吗?
我还没有测试过,但我很确定这会奏效:
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- rm -rf discourse-subscriptions
- git clone https://github.com/yourForkUser/discourse-subscriptions
由于这会从 plugins 目录运行,因此它将删除现在包含在核心中的 discourse-subscriptions,并将其替换为您之前一直使用的那个。因此,将 rm -rf 添加到您的 app.yml 中,在 git clone(用于此插件或您不希望包含或要替换的任何其他插件)之前,应该可以满足您的需求,并用您的 fork 替换核心插件。
好的,所以当他们说X插件现在是核心的一部分时,他们只是说该插件将在插件目录的核心存储库中预先打包,我们不必选择性地拉取该代码。明白了。结构上没有任何变化。
如果现在是预打包的。插件版本中的所有数据都会丢失吗?我需要重新设置一遍,还是会保留?
您不会丢失数据。只需从 app.yml 中删除该行,插件将继续按原样工作。
输入优惠券代码后,订阅总金额是否会立即更新,这是预期行为吗?
在 Discourse 3.5.0.beta8-dev 上进行了测试
我发现,如果用户尝试注册但付款失败,discourse_subscriptions_customer 表中将其与他们的 Stripe 客户 ID 相关联的条目将被删除。我不确定此行为是否是故意的,但无论如何,我认为这不是一个好的行为,因为它会导致 Stripe 中出现孤立的客户,这些客户必须手动删除。这也导致在他们重试时创建重复的客户,这可能会影响我们的报告。
有什么方法可以重置活动吗?我曾希望有一个月捐赠目标,但现在是新月份的开始,我没有看到任何方法可以将其重置为零以实现新的月度目标。
我很想在某个网站上看看这个插件的实际效果。有人愿意分享一个使用Subscriptions Plugin的论坛链接吗?谢谢!
