API YooKassa: создание платежей, webhooks, идемпотентность и лучшие практики

Получить CloudPayments бесплатно

Этот материал предназначен для разработчиков и интеграторов. Перед внедрением сверяйтесь с официальной документацией YooKassa.

Table of contents

Обзор архитектуры и аутентификации

Интеграция строится вокруг REST API с JSON‑транспортом по HTTPS. Аутентификация может включать передачу идентификатора магазина и секретного ключа (формат и заголовки уточняйте в официальной документации). Все ключи должны храниться в защищённом секрете, а сам трафик — шифроваться.

Рекомендации:

Создание платежей: синхронные и асинхронные сценарии

Чаще всего оплата происходит в два шага: инициирование и подтверждение (клиент завершает платёж на стороне провайдера). В запросе создайте объект платежа: сумма, валюта, описание, данные клиента, выбранный метод.

Синхронный сценарий: виджет на вашей странице возвращает результат за сессию. Асинхронный: вы создаёте платёж, далее отслеживаете статус по webhook.

Трекинг: храните internal order_id и связывайте его с payment_id поставщика.

Подтверждение, отмена и статусы

Платёж может требовать подтверждения (например, при 3‑D Secure или удержании/капче). Обрабатывайте статусы: pending, succeeded, canceled/failed. При отмене корректно информируйте пользователя и пишите техподдержке в спорных случаях.

Возвраты и частичные возвраты через API

Для возврата укажите payment_id и сумму (полную или частичную). Сохраняйте причину и метаданные, чтобы синхронизировать с ERP/бухгалтерией. Не забудьте сформировать корректировочный чек по 54‑ФЗ.

Webhooks: доставка, подпись, ретраи

Идемпотентность и обработка повторов

Используйте идемпотентные ключи (например, хэш заказа) для операций создания платежа/возврата, чтобы повторные запросы не приводили к дублям. Храните статус последней операции по ключу в БД.

Фискальные атрибуты (54‑ФЗ) в запросах

При передаче товарных позиций включайте НДС, признак предмета расчёта, ставку, количество и цену. Убедитесь, что сумма по позициям совпадает с суммой платежа, учитывайте скидки/доставку.

SDK: PHP, Node.js, Python, Java

Используйте официальные SDK (при наличии) или лёгкие HTTP‑клиенты с ретраями и таймаутами. Внедряйте circuit breaker и экспоненциальный backoff на сетевых ошибках.

Примеры запросов/ответов

Пример (схематично):

Создание платежа: { "amount": {"value": "1000.00", "currency": "RUB"}, "capture": true, "description": "Order #12345", "metadata": {"order_id": "12345"} }

Ответ (усечённо): { "id": "pay_...", "status": "pending", "confirmation": {"type": "redirect", "confirmation_url": "https://..."} }

Тестирование в Sandbox и хранение секретов

Производительность, таймауты и ретраи

Типичные ошибки и отладка

Чек‑лист для релиза в прод

Дальше: подключите «Тестовый Sandbox», при необходимости — «Интеграции CMS» и «Мобильные SDK».

Получить CloudPayments бесплатно