Предположим, клиент заходит в мой интернет-магазин и покупает обновление до существующей подписки. Они вводят данные своей кредитной карты и отправляют покупку. Платеж не прошел.
Существует два сценария, в которых я не нашел правильного решения этой проблемы.
Сценарий 1
НекоторыеОбновления подписки не оплачиваются в рамках одной и той же функции обновления (например, ежемесячный план на месяц), что означает, что вам нужно сначала обновить подписку, сгенерировать счет, а затем оплатить его вручную. Обновление подписки и оплата больше не являются атомарными. Это означает, что даже в случае сбоя оплаты подписка теперь содержит сведения о желаемом плане, за который они еще не заплатили.
Мое текущее решение - записать начальные данные подписки и восстановить их в конце, еслиоплата не удалась. Это кажется интуитивно неправильным, но оно работает в синхронизации подписки с тем, за что фактически заплатил пользователь.
Я заинтересован в том, чтобы Stripe был «источником правды» в моих подписках, поэтому оставляю неоплаченные измененияЗадержка в неполном состоянии делает это трудным.
Сценарий 2
При введении SCA вышеприведенная стратегия разваливается, потому что теперь я не могу знать, когда платежпроисходит сбой до тех пор, пока веб-крючок на другом сервере не получит уведомление, и у него больше не будет исходных данных подписки. Подписка и счет-фактура затем остаются в состоянии «Просрочено». Я не хочу находиться в этом состоянии, потому что покупка происходит в корзине для покупок на веб-сайте, поэтому она либо удалась, либо провалилась только в этой точке.
Так что я застряла в сценарии, где у меня естьнеполная подписка и неполный платеж, и при следующей попытке обновить подписку (например, пользователь вводит рабочую кредитную карту) мой сервер отклоняет покупку, так как считает, что новый план идентичен текущему.
Поэтому мой главный вопрос: есть ли способ отложить обновления объектов подписки до завершения платежей ?
Или есть ли лучший способ полностью обработать обновления подписки?
Чем больше я смотрю на это, тем более безнадежным это кажется. Представьте, что у вас есть клиент с этой подпиской:
Plan: Pro
Interval: Yearly
Quantity: 5
Due: June 20th
Status: active
Они пытаются купить обновление до количества 10. Продукт очень дорогой, поэтому мы хотим взимать с него плату сейчас, прежде чем предоставлять, а не ждатьдо следующего расчетного дня, который составляет 7 месяцев. Платеж не проходит проверку подлинности SCA. Теперь у клиента есть эта подписка:
Plan: Pro
Interval: Yearly
Quantity: 10
Due: Nov 13 (now + 1 year)
Status: past_due
Что нам теперь делать? Вы не можете отменить подписку, у клиента более высокий тарифный план без его оплаты, и ему не будет предложено оплатить накопленные расходы до ноября 2020 года (я думаю, именно так и действует срок оплаты).
должен быть способом оплаты плана до изменения отсутствующей подписки.