Подписка на 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'],
)