Djstripe: обеспечение успешной оплаты новой подписки перед подтверждением успешной подписки клиенту
Мы используем Djstripe
для создания подписок Stripe на нашем Django сайте следующим образом:
# Create the Stripe subscription
stripe_subscription = stripe.Subscription.create(
customer=customer_id,
items=[{'price': plan_id}],
expand=['latest_invoice.payment_intent'],
metadata=metadata,
)
# Sync subscription from Stripe
subscription = Subscription.sync_from_stripe_data(stripe_subscription)
Процесс со стороны Stripe выглядит примерно так:
- Создайте подписку (возвращается статус 200)
- Создайте объект намерения платежа, который будет взимать с клиента плату за подписку
- Попытка списания денег с клиента
- Если списание не удается, переведите подписку в статус "незавершенная"
Наивно полагать, что когда мы получаем 200 в ответ на шаг (1), мы действуем так, как будто платеж прошел нормально, но иногда это не так (происходит шаг (4)).
Какой хороший способ подтвердить клиенту успешное создание подписки, только если последующее списание средств прошло успешно?