Ahs*_*tar 5 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',
}
]
)
Run Code Online (Sandbox Code Playgroud)
我想向用户提供一种设施,他们可以取消通过结帐会话进行的订阅,但只能通过订阅 ID 取消,但我没有从结帐会话中获取任何订阅 ID。
我如何允许用户取消他们通过结帐会话进行的订阅?
小智 3
当您使用 Stripe Checkout 创建订阅时,订阅将仅在您的用户完成 Checkout 流程后创建并可用。这意味着,当您最初创建 Checkout Session 时,会话对象的订阅属性将为null。
一旦您的用户完成结帐流程,Stripe 将发出一个checkout.session.completed事件,其中包含新创建的订阅 ID,您可以使用该 ID 来取消订阅。要侦听这些事件,您需要创建一个 Webhook 端点,这实际上与在站点上创建任何其他 HTTP 端点没有什么不同。以下是一些您可以参考的示例:
一旦您设置了端点来侦听checkout.session.completed事件。Stripe 将在事件数据中发送更新的会话对象(带有订阅 ID)。您可以从那里将订阅 ID 保存到数据库中以供以后参考。如果您的用户想要取消订阅,您需要在此处调用此 API 端点:
https://stripe.com/docs/api/subscriptions/cancel?lang=python
另一个更简单的选择是使用新的客户门户,这将使您不必为用户创建 UI 来升级/取消现有订阅。只需提供本指南中所示的客户 ID:
https://stripe.com/docs/billing/subscriptions/integrating-customer-portal