订阅插件中的静默订阅失败

插件: discourse-subscriptions 版本: 最新(已确认更新至最新) Discourse 版本: 3.5.4

Bug 摘要: 在某些极端情况下,该插件会创建 PaymentIntent 但未附加有效的支付方式,导致订阅对最终用户静默失败。

复现步骤:

  1. 客户在其 Stripe 客户档案中保存了一张已过期的卡片

  2. 客户尝试订阅或更新其支付方式

  3. 插件创建了 PaymentIntent,但未能将新卡详情传递给 Stripe

  4. 交易失败,报错 resource_missingpayment_intent_incompatible_payment_method

Stripe 错误日志:

resource_missing: 该客户未附加任何支付来源或默认支付方式。

payment_intent_incompatible_payment_method: 预期存在类型为 card 的支付方式,但该 PaymentIntent 未包含任何支付方式,且未提供。

Stripe 确认内容:

  • Stripe 账户状态良好,对方端无任何问题

  • PaymentIntents 是在未附加支付方式的情况下创建的

  • 在某些情况下,该插件传递的是 card_ 对象,而非 pm_ 支付方式对象——在 Stripe 当前 API 中,这两者不可互换

其他上下文:

  • 在一个拥有约 18,000 名活跃成员的社区中,该问题每月大约发生 2 次

  • 该插件为内置插件,无法在主机层面进行修改(已与 Communiteq 确认)

  • 正常结账流程运行正确;问题仅发生在客户档案中存在过时/过期卡片并尝试进行新支付时

  • 临时解决方案是手动发送托管的 Stripe 发票,但这不会触发自动为用户分配 Discourse 组的 webhook,从而需要额外的手动步骤

请求: 修复当客户现有卡片过期或无效时的支付方式交接逻辑,确保新卡输入能生成正确的 pm_ 支付方式对象,并在提交前正确附加到 PaymentIntent。

1 个赞

感谢提交错误报告,Todd!

我已将其移至 Contribute > Bug,希望它能得到应有的关注。

2 个赞