--- id: 029 title: Add TBank payment notification and success URLs status: DONE created: 2026-04-18 --- ## Context TBank Init API должен получать URLs для обработки webhook-уведомлений и возврата клиента после успешной оплаты. Сейчас `TBankAdapter` и секция `tbank_payment` не фиксируют передачу `NotificationURL` и `SuccessURL`. ## Goal Добавить в конфигурацию TBank payment обязательные параметры `notification_url` и `success_url` и передавать их в payload инициализации платежа как `NotificationURL` и `SuccessURL`. ## Constraints - Изменения ограничены TBank payment config, TBank adapter payload mapping, wiring конфигурации и тестами. - `NotificationURL` и `SuccessURL` MUST приходить из секции `tbank_payment` YAML-конфига. - TBank adapter MUST продолжать инкапсулировать HTTP-взаимодействие, auth token, retries, timeout, serialization и error handling. - Service и Controller MUST NOT содержать TBank-specific payload fields или provider HTTP-детали. - Не изменять публичный request/response contract `POST /api/v1/delivery/init-payment`. - Не изменять price flow, address suggestion flow, CDEK adapter и order repository. - Не добавлять новые endpoints. ## Acceptance criteria - `TBankPaymentConfig` содержит обязательные поля `notification_url: str` и `success_url: str`. - Runtime YAML-конфиг и test YAML-конфиг содержат секцию `tbank_payment` с `notification_url` и `success_url`. - `TBankAdapter` при вызове TBank Init API отправляет `NotificationURL` со значением `tbank_payment.notification_url`. - `TBankAdapter` при вызове TBank Init API отправляет `SuccessURL` со значением `tbank_payment.success_url`. - Auth token TBank формируется с учётом тех же полей payload, которые отправляются в Init API, включая `NotificationURL` и `SuccessURL`, если текущая реализация token generation строится по request payload. - Отсутствие `notification_url` или `success_url` в YAML-конфиге приводит к детерминированной ошибке валидации конфигурации. - `AggregatorService.init_payment()` продолжает вызывать `payment_adapter.create_payment_link(order_uuid, price)` без дополнительных URL-аргументов. - Endpoint `POST /api/v1/delivery/init-payment` продолжает возвращать только `InitPaymentResponse(payment_url=...)`. ## Definition of Done - [ ] В `app/config.py` добавлены поля `notification_url` и `success_url` в TBank payment config. - [ ] YAML-конфиги обновлены новыми параметрами TBank payment. - [ ] `TBankAdapter` передаёт `NotificationURL` и `SuccessURL` в payload TBank Init API. - [ ] Token generation для TBank request остаётся корректной после добавления новых payload fields. - [ ] Service и Controller не знают о `NotificationURL` и `SuccessURL`. - [ ] Добавлены или обновлены тесты конфигурации. - [ ] Добавлены или обновлены тесты TBank adapter payload. - [ ] Все команды из раздела Commands проходят. ## Tests - Обновить `tests/config/test_config_sections.py`: проверить обязательность `tbank_payment.notification_url` и `tbank_payment.success_url`. - Обновить `tests/adapters/tbank/test_client.py`: проверить, что successful Init request payload содержит `NotificationURL` и `SuccessURL` из конфигурации. - Обновить `tests/adapters/tbank/test_client.py`: проверить, что token generation остаётся детерминированной после добавления новых payload fields. - При необходимости обновить `tests/smoke/test_app_import.py`, если smoke config требует новые обязательные поля. ## Commands - `poetry run pytest tests/config/test_config_sections.py -q` - `poetry run pytest tests/adapters/tbank/test_client.py -q` - `poetry run pytest tests/smoke/test_app_import.py -q` - `poetry run pytest -q` - `python3 spec/gen_spec_index.py --check`