订阅:Stripe 中的数据已删除,现在插件出现错误

你好,

我正在测试此插件以便将来在我的实例中使用,但遇到一个问题。

我的 Stripe 账户是新创建的且尚未验证,这意味着它使用的是测试数据,我可以在 Stripe 仪表板 > 开发人员(Developers)中清除这些数据。问题在于,在 Stripe 中清除数据并不会同时删除论坛实例中的相同数据。这可能导致用户的“账单 > 支付”页面崩溃。

复现步骤

  1. 创建一个订阅计划。
  2. 将用户订阅该计划。Stripe 会为其分配一个 customer_id,例如 cus_abcd1234567890
  3. 在 Stripe 仪表板中清除数据。
  4. 再次尝试打开用户的账单页面时,在加载 /s/user/payment 时会发生崩溃,浏览器控制台中显示以下响应文本:
    {\"errors\":[\"No such customer: 'cus_abcd1234567890'\"]}

在检查我实例的数据库后,我发现之前多次清除操作留下的数据残留在以下表中:

  • discourse_subscriptions_customers:导致用户账单页面崩溃。
  • discourse_subscriptions_products
  • discourse_subscriptions_subscriptions

后两个表似乎不会触发崩溃,但它们仍然包含过期的数据。

手动删除 discourse_subscriptions_customers 表中的问题行可以解决用户页面的崩溃问题。但通过 SQL 查询手动操作既复杂又危险,尤其对于经验不足的用户而言。

此外,值得注意的是,如果从 Stripe 仪表板手动删除用户信息,则不会出现此问题。Stripe 仍会保留该用户的归档信息,并将其标记为“永久删除”。

建议的解决方案

如果可能,请提供一种方式,让 Stripe 在测试数据被清除时通知 Discourse,以便 Discourse 自动删除相关表中的数据。

或者,

在插件选项中添加一个“清除测试数据”的按钮,并配上醒目的红色警告标签,确保管理员清楚自己在做什么。

这似乎是一个边缘情况,目前我无意在插件中处理。要修复你遇到的错误,你需要在容器内执行以下操作:

rails c
DiscourseSubscriptions::Customer.destroy_all
DiscourseSubscriptions::Products.destroy_all
DiscourseSubscriptions::Subscriptions.destroy_all

这将重置所有本地模型,这些模型用于与 Stripe 进行比对。

我的建议是:今后从 Discourse 删除数据,而不是从 Stripe 删除。如果 Discourse 中不存在模型记录,系统就不会从 Stripe 拉取数据。

4 个赞

一篇帖子被拆分到了新主题:/s/user/payments 的问题

感谢建议。我测试过了,除了一个小拼写错误外都能正常工作:::Product::Subscription 末尾没有 s。否则无法找到它们。

修正后的命令:

rails c
DiscourseSubscriptions::Customer.destroy_all
DiscourseSubscriptions::Product.destroy_all
DiscourseSubscriptions::Subscription.destroy_all
3 个赞

你说得对,是我搞错了!

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.