Документация по процессу оплаты (YooKassa)¶
Обзор¶
Система оплаты интегрирована с платежным шлюзом ЮKassa. Процесс оплаты инициируется на клиенте (Frontend), обрабатывается через Supabase Edge Functions, и завершается подтверждением оплаты от ЮKassa (через Webhook или перенаправление).
Архитектура¶
1. Frontend (React)¶
- Инициация оплаты:
- Пользователь нажимает кнопку "Оплатить" в деталях бронирования (
HotelBookingDetailPage.tsxилиUnifiedBookingDetailDialog.tsx). - Кнопка отображается только для подтвержденных бронирований (
confirmedилиapproved), которые еще не оплачены. - Сервис оплаты:
src/services/bookingPaymentService.tsсодержит функциюstartYooKassaPayment.- Формирует данные платежа и вызывает Edge Function
yookassa-payment. - Обрабатывает ответ и перенаправляет пользователя на платежную страницу ЮKassa.
- Использует динамический
return_url(window.location.origin), что позволяет работать корректно как локально, так и на продакшене.
2. Backend (Supabase Edge Functions)¶
- Функция
yookassa-payment: - Принимает запрос на создание платежа.
- Определяет настройки оплаты (Shop ID, Secret Key) на основе:
- Настроек конкретного отеля/компании.
- Настроек владельца отеля.
- Системных настроек по умолчанию.
- Переменных окружения (как запасной вариант).
- Создает платеж в API ЮKassa.
- Сохраняет запись о платеже в таблицу
payments. - Обновляет статус бронирования на
processing. - Возвращает
payment_urlдля перенаправления пользователя.
3. База данных¶
- Таблица
payments: Хранит историю всех попыток оплаты. - Таблицы бронирований (
room_bookings,hotelier_bookingsи др.): Содержат поляpayment_status,payment_method,payment_id.
Процесс оплаты¶
- Пользователь: Нажимает "Оплатить".
- Клиент: Отправляет запрос в
yookassa-paymentс ID бронирования и суммой. - Edge Function:
- Проверяет валидность запроса.
- Находит соответствующие настройки мерчанта.
- Создает платеж в ЮKassa.
- Возвращает ссылку на оплату.
- Клиент: Перенаправляет браузер пользователя на страницу ЮKassa.
- Пользователь: Вводит данные карты и оплачивает.
- ЮKassa:
- Обрабатывает платеж.
- Перенаправляет пользователя обратно на
return_url(страница успеха или истории бронирований). - Отправляет Webhook на сервер (обрабатывается функцией
yookassa-webhookили аналогичной - требует проверки настройки вебхуков).
Настройка и Отладка¶
Настройки ЮKassa¶
Настройки хранятся в таблице payment_settings или settings (для системных).
Для тестирования можно использовать тестовый режим (test_mode: true).
Возможные ошибки и решения¶
- Кнопка "Оплатить" не отображается:
- Проверьте статус бронирования. Должен быть
confirmedилиapproved. -
Проверьте статус оплаты. Должен быть не
paid. -
Ошибка "Не удалось получить ссылку на оплату":
- Проверьте консоль браузера и логи Edge Function.
-
Возможные причины: неверные ключи API, ошибка сети, невалидная сумма.
-
Платеж прошел, но статус не обновился:
- Проверьте работу Webhook'ов.
- Проверьте логи функции обработки уведомлений от ЮKassa.
Тестирование¶
Для тестирования используйте тестовые карты ЮKassa:
- Номер карты: 1111 1111 1111 1026
- Срок действия: любой будущий
- CVC: любой (например, 000)
- Код из SMS: 0000