Все шаблоны

Деньги

Приём платежей

Robokassa с вебхуком и идемпотентностью

Сложный По подпискеплатежиrobokassaвебхукэквайринг

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

Что внутри

  • Подпись запроса и проверка контрольной суммы вебхука
  • Повторный вебхук не зачисляет второй раз
  • История платежей со статусами
  • Тестовый режим без реальных списаний

Что добавит в проект

Поверх общей базы — она уже даёт авторизацию, базу и интерфейс.

Таблицы в базе2

paymentspayment_events

Маршруты4

/api/payments/create/api/payments/webhook/payment/success/payment/fail

Переменные окружения4

ROBOKASSA_MERCHANT_LOGINROBOKASSA_PASSWORD_1ROBOKASSA_PASSWORD_2ROBOKASSA_TEST_MODE (не обязательна)
ROBOKASSA_MERCHANT_LOGIN
Идентификатор магазина из личного кабинета
ROBOKASSA_PASSWORD_1
Пароль для формирования подписи платежа
ROBOKASSA_PASSWORD_2
Пароль для проверки вебхука
ROBOKASSA_TEST_MODEне обязательна
Тестовый режим без реальных списаний

Разбор архитектуры

Платёж подтверждается вебхуком, а не возвратом пользователя на страницу успеха: браузер можно закрыть, вкладку — потерять, а деньги при этом списываются. Вебхук приходит повторно при любой сетевой ошибке, поэтому обработчик идемпотентен: событие пишется с уникальным ключом операции, повтор отбрасывается на вставке. Это единственный способ не зачислить дважды.

Общая база

Пустое, но рабочее приложение: авторизация, база, UI-кит и деплой уже собраны и связаны между собой. Модули не переписывают его файлы — они добавляют свои и регистрируются в готовых точках расширения, поэтому их можно ставить в любом сочетании.

Next.js 16 (App Router)TypeScriptPostgreSQL + Drizzle ORMAuth.jsTailwind CSS + shadcn/uiDocker