Перейти к содержанию

Документация по процессу оплаты (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) на основе:
    1. Настроек конкретного отеля/компании.
    2. Настроек владельца отеля.
    3. Системных настроек по умолчанию.
    4. Переменных окружения (как запасной вариант).
  • Создает платеж в API ЮKassa.
  • Сохраняет запись о платеже в таблицу payments.
  • Обновляет статус бронирования на processing.
  • Возвращает payment_url для перенаправления пользователя.

3. База данных

  • Таблица payments: Хранит историю всех попыток оплаты.
  • Таблицы бронирований (room_bookings, hotelier_bookings и др.): Содержат поля payment_status, payment_method, payment_id.

Процесс оплаты

  1. Пользователь: Нажимает "Оплатить".
  2. Клиент: Отправляет запрос в yookassa-payment с ID бронирования и суммой.
  3. Edge Function:
  4. Проверяет валидность запроса.
  5. Находит соответствующие настройки мерчанта.
  6. Создает платеж в ЮKassa.
  7. Возвращает ссылку на оплату.
  8. Клиент: Перенаправляет браузер пользователя на страницу ЮKassa.
  9. Пользователь: Вводит данные карты и оплачивает.
  10. ЮKassa:
  11. Обрабатывает платеж.
  12. Перенаправляет пользователя обратно на return_url (страница успеха или истории бронирований).
  13. Отправляет Webhook на сервер (обрабатывается функцией yookassa-webhook или аналогичной - требует проверки настройки вебхуков).

Настройка и Отладка

Настройки ЮKassa

Настройки хранятся в таблице payment_settings или settings (для системных). Для тестирования можно использовать тестовый режим (test_mode: true).

Возможные ошибки и решения

  1. Кнопка "Оплатить" не отображается:
  2. Проверьте статус бронирования. Должен быть confirmed или approved.
  3. Проверьте статус оплаты. Должен быть не paid.

  4. Ошибка "Не удалось получить ссылку на оплату":

  5. Проверьте консоль браузера и логи Edge Function.
  6. Возможные причины: неверные ключи API, ошибка сети, невалидная сумма.

  7. Платеж прошел, но статус не обновился:

  8. Проверьте работу Webhook'ов.
  9. Проверьте логи функции обработки уведомлений от ЮKassa.

Тестирование

Для тестирования используйте тестовые карты ЮKassa: - Номер карты: 1111 1111 1111 1026 - Срок действия: любой будущий - CVC: любой (например, 000) - Код из SMS: 0000