使用Stripe Checkout防止重复订阅

6
考虑以下事件的顺序:
  • 用户在我的网站上选择多个订阅选项并单击“支付”按钮。
  • 他们被重定向到Stripe结帐页面,但尚未完成付款。
  • 他们在保持Stripe结帐页面打开的情况下成功返回到选择订阅的页面。 (我知道这有点牵强,但在技术上是可能的。)
  • 他们选择不同的订阅选项并再次单击“支付”。
  • 第二个结帐会话将被创建,并打开另一个Stripe Checkout页面。
  • 现在他们在两个结帐页面上都完成了付款。
如何防止这种情况发生?是否有一种方式可以取消结帐会话?当我为订阅创建结帐会话时,我没有收到可取消的付款意图。似乎也没有直接取消结帐会话的方法。

谢谢你的提问!我从来没有想过这种边缘情况,但是我加入了一些逻辑以防万一。 <3 - TrollBearPig
2个回答

9

我不知道如何避免你所描述的情况,因为客户明确地决定为两个不同的订阅支付两次费用。

尽管如此,如果您的使用场景要求客户只能拥有一个订阅,您可以在自己的端上添加逻辑来执行以下操作:

  1. 设置 Webhook 端点以侦听 customer.subscription.created 事件
  2. 每当创建新的订阅时,列出属于该客户的订阅列表
  3. 如果客户有多个活动订阅,则取消最新的订阅并退款关联的付款。您也可以向客户发送电子邮件,告诉他们发生了什么。

0
Stripe应默认阻止同一客户对同一产品进行多次订阅。然而,我们需要保存来自Stripe的客户ID,并使用该ID来检查用户是否已经是订阅者。
目前,唯一的解决方案是使用Webhooks或手动在Stripe API中查找客户ID。

不,它不会也不应该。这是一个我经常使用的很棒的功能。 - Alexey Khachatryan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接