考虑以下事件的顺序: 用户在我的网站上选择多个订阅选项并单击“支付”按钮。 他们被重定向到Stripe结帐页面,但尚未完成付款。 他们在保持Stripe结帐页面打开的情况下成功返回到选择订阅的页面。 (我知道这有点牵强,但在技术上是可能的。) 他们选择不同的订阅选项并再次单击“支付”。 第二个结帐会话将被创建,并打开另一个Stripe Checkout页面。 现在他们在两个结帐页面上都完成了付款。 如何防止这种情况发生?是否有一种方式可以取消结帐会话?当我为订阅创建结帐会话时,我没有收到可取消的付款意图。似乎也没有直接取消结帐会话的方法。
我不知道如何避免你所描述的情况,因为客户明确地决定为两个不同的订阅支付两次费用。 尽管如此,如果您的使用场景要求客户只能拥有一个订阅,您可以在自己的端上添加逻辑来执行以下操作: 设置 Webhook 端点以侦听 customer.subscription.created 事件。 每当创建新的订阅时,列出属于该客户的订阅列表。 如果客户有多个活动订阅,则取消最新的订阅并退款关联的付款。您也可以向客户发送电子邮件,告诉他们发生了什么。
Stripe应默认阻止同一客户对同一产品进行多次订阅。然而,我们需要保存来自Stripe的客户ID,并使用该ID来检查用户是否已经是订阅者。目前,唯一的解决方案是使用Webhooks或手动在Stripe API中查找客户ID。