如何取消通过Checkout Session Stripe API创建的订阅

时间:2020-09-02 17:42:05

标签: python django stripe-payments

我已经在Stripe上创建了一个周期性产品,并创建了一个结帐会话,它运行良好,并为我创建了一个我可以在仪表板上看到的订阅。

这是我的代码

        checkout_session = stripe.checkout.Session.create(
            success_url=domain_url + 'success?session_id={CHECKOUT_SESSION_ID}',
            cancel_url=domain_url + 'cancelled/',
            payment_method_types=['card'],
            mode='subscription',
            line_items=[
                {
                    'quantity': 1,
                    'price': 'price_1HLDRqCHEV6ur4mXq36yVF1D',
                }
            ]
        )

我想向用户提供一种便利,使他们可以取消通过结帐会话进行的订阅,但是只能通过订阅ID取消该订阅,但是我没有从结帐会话中获取任何订阅ID。

我如何允许用户取消通过结帐会话进行的订阅?

1 个答案:

答案 0 :(得分:2)

当您使用Stripe Checkout创建订阅时,只有在您的用户通过Checkout流程后,该订阅才会创建并可用。这意味着当您最初创建Checkout会话时,会话对象的subscription属性将是null

用户完成结帐流程后,Stripe将发出一个checkout.session.completed事件,其中包含新创建的订阅ID,您可以使用该ID来取消订阅。要侦听这些事件,您需要创建一个webhook端点,这与在您的站点上创建任何其他HTTP端点实际上没有什么不同。以下是一些您可以参考的示例:

一旦完成端点设置,即可监听checkout.session.completed事件。 Stripe将在event data中发送更新的会话对象(带有订阅ID)。从那里,您可以将订阅ID保存到数据库中,以供以后参考。如果您的用户想要取消订阅,则需要在此处调用此API端点:

https://stripe.com/docs/api/subscriptions/cancel?lang=python

另一个更简单的选择是使用新的客户门户,这将使您不必为用户创建UI来升级/取消现有订阅。只需提供本指南中显示的客户ID,即可:

https://stripe.com/docs/billing/subscriptions/integrating-customer-portal

相关问题