Подключение ЮKassa на Django и React: фронт или бэкенд?

    При подключении платёжной системы ЮKassa к сайту на Django (бэкенд) и React + Next.js (фронт) возникает ключевой вопрос: где выполнять запросы к API - на стороне клиента или сервера? Правильный выбор напрямую влияет на безопасность данных и защиту секретного ключа магазина.

    Почему нельзя работать с API ЮKassa с фронта?

    Прямой запрос с фронта к https://api.yookassa.ru/v3/payments/ требует передачи секретного ключа (Secret Key) в заголовке авторизации. Этот ключ даёт полный доступ к управлению платежами: создание, подтверждение, возврат. Если ключ попадёт в открытый доступ (например, через инструменты разработчика браузера), злоумышленники смогут проводить операции от вашего имени. Критично: секретный ключ никогда не должен быть доступен на клиентской стороне.

    Правильная архитектура: бэкенд как прокси

    Оптимальное решение - создать эндпоинты на Django, которые принимают с фронта только необходимые данные (сумма, описание заказа, данные клиента) и уже внутри сервера обращаются к API ЮKassa. Бэкенд выступает безопасным посредником, скрывая секретный ключ и логику обработки платежей.

    Пошаговая схема работы

    • Фронт (React/Next.js): отправляет POST-запрос на свой бэкенд-эндпоинт с данными о платеже (например, {'amount': 1000, 'description': 'Заказ №123', 'customer': {'email': 'user@mail.com'}}).
    • Бэкенд (Django): получает запрос, проверяет подлинность (например, через JWT или сессию), формирует запрос к API ЮKassa с использованием секретного ключа (хранится в переменных окружения) и возвращает фронту ответ (например, ссылку на оплату или ID платежа).
    • Фронт: перенаправляет пользователя на страницу оплаты ЮKassa или отображает статус.

    Преимущества серверного подхода

    • Безопасность: секретный ключ никогда не покидает сервер.
    • Контроль: можно добавить валидацию, логирование, повторные попытки.
    • Гибкость: легко интегрировать вебхуки для уведомлений о статусе платежа.

    Что делать, если уже засветили секретный ключ?

    Немедленно смените секретный ключ в личном кабинете ЮKassa. Проверьте логи на предмет несанкционированных операций. В будущем используйте только серверные вызовы API.

    Заключение

    Для безопасного подключения ЮKassa к сайту на Django и React вся работа с API должна выполняться на бэкенде. Фронт отправляет только общие данные о платеже, а бэкенд обрабатывает запросы, скрывая секретный ключ. Это стандартная практика для всех платёжных систем.

    Часто задаваемые вопросы