Подписка на Stripe: latest_invoice.payment_intent вызывает ошибку атрибута: payment_intent

Я пытаюсь создать подписку в Stripe, используя Python и официальную библиотеку, с целью получения client_secret из PaymentIntent первоначального счета-фактуры для завершения оплаты на интерфейсе.

Вот код, который я использую:

import stripe

stripe.api_key = 'sk_test_...'

price_id = 'price_...'  # Example
subscription = stripe.Subscription.create(
    customer=customer.id,
    items=[{'price': price_id}],
    payment_behavior='default_incomplete',
    expand=['latest_invoice.payment_intent'],
)

Я хочу получить доступ: subscription.latest_invoice.payment_intent.client_secret

Но я получаю сообщение об ошибке:

Ошибка атрибута: payment_intent

Что я проверил до сих пор

  • Подписка создана успешно.
  • Параметр expand=['latest_invoice.payment_intent'] используется для встраивания объекта payment_intent.
  • Я подтвердил, что счет-фактура (latest_invoice) существует.
  • Однако поле payment_intent отсутствует в объекте latest_invoice.

Вопросы

  • Почему payment_intent отсутствует в latest_invoice при создании подписки с помощью payment_behavior='default_incomplete' и расширении поля?
  • Как я должен получить client_secret для подтверждения платежа во внешнем интерфейсе с помощью Stripe.js в этих случаях?

Эта часть API была изменена компанией Stripe в их последней основной версии API под названием Basil. Пакет SDK для stripe-python привязан к последней версии API, поэтому, если вы используете самую последнюю версию, у вас есть более новая версия API. Я рекомендую внимательно ознакомиться с их списком изменений здесь, который содержит все важные изменения для каждой версии API.

В вашем конкретном случае Stripe удалила связь между счетом-фактурой и его PaymentIntent, чтобы добавить поддержку нескольких частичных платежей по одному счету-фактуре. Вы можете прочитать больше об этом в этой конкретной записи в журнале изменений, где они объясняют, что вместо просмотра client_secret в PaymentIntent вы можете получить к этому доступ непосредственно в счете-фактуре в confirmation_secret свойство, которое вам также необходимо расширить.

Ваш код должен быть

subscription = stripe.Subscription.create(
    customer=customer.id,
    items=[{'price': price_id}],
    payment_behavior='default_incomplete',
    expand=['latest_invoice.confirmation_secret'],
)
Вернуться на верх