Платежи, подписки и платные функции
Добавим к «Пространству» серверные тарифы, идемпотентные заказы, отдельные попытки оплаты, уведомления, сверку, календарное продление, отмену и возврат. Завершим конкретной платной функцией по действующему entitlement.
Для чтения нужны основы C#, HTTP, SQL и транзакций. Зафиксированы ASP.NET Core/.NET 10, Npgsql 10.0.0 и PostgreSQL 18. В архиве исходников есть целые файлы завершённого проекта и README с конфигурацией. Это одно итоговое состояние; уроки последовательно объясняют его части.
Учебное приложение, SQL, HTTP-запросы и фоновые процессы при подготовке не запускались (not_run). Тесты, установка, коммит и публикация учебного приложения не выполнялись. Примеры ответа являются ожидаемыми, скриншоты фактического интерфейса не заявляются.
Начните с SaaS для нескольких компаний. Архив биллинга самостоятельный; README отдельно описывает добавление billing-схемы к локальному baseline. Интеграция произвольной версии требует сопоставления contracts. Провайдер исключительно локальный, реальных платежей нет. Тестовый магазин ЮKassa необязателен и не подключался.
Оглавление
| № | Урок | Результат |
|---|---|---|
| 1 | Биллинг: деньги, заказ и платёж в веб-приложении | Храним сумму в минимальных единицах и отделяем намерение купить от движения денег. |
| 2 | Биллинг подписок: версия тарифа и неизменяемая цена заказа | Выбираем цену на сервере и сохраняем условия покупки отдельно от текущего каталога. |
| 3 | Биллинг подписок: идемпотентное создание заказа | Связываем повтор команды с тем же результатом и отклоняем изменение её содержания. |
| 4 | Биллинг подписок: адаптер провайдера и повтор создания платежа | Сохраняем платежное намерение до вызова и повторяем запрос с одним ключом. |
| 5 | Биллинг подписок: переходы состояния платежа | Применяем подтверждённый снимок без повторной выдачи периода и отката успешного состояния. |
| 6 | Биллинг подписок: входящее уведомление и повтор доставки | Используем уведомление как сигнал к чтению провайдера и сохраняем результат обработки. |
| 7 | Биллинг подписок: сверка платежей после пропущенного уведомления | Читаем авторитетное состояние и восстанавливаем незавершённые локальные этапы. |
| 8 | Подписка и границы календарного месяца | Сохраняем оплаченный интервал и календарный якорь для будущих продлений. |
| 9 | Биллинг подписок: планировщик повторной оплаты | Создаём одно продление на границу периода и не повторяем списание при новом проходе. |
| 10 | Биллинг подписок: отмена продления и незавершённого платежа | Отключаем будущую покупку отдельно от оплаченного периода и текущей попытки. |
| 11 | Биллинг подписок: возврат с собственным ключом и остатком суммы | Создаём отдельную операцию возврата и не позволяем вернуть больше полученного. |
| 12 | Биллинг подписок: платная функция по действующему праву | Проверяем entitlement на сервере и связываем его срок с подтверждённым заказом. |
Другие курсы партии находятся в маршруте веб-продуктов.