Pingveraблог ← Блог
Главная › Блог › Сверка оплат и заказов интернет-магазина: как не потерять деньги

Сверка оплат и заказов интернет-магазина: как не потерять деньги

10 августа 2026 · 6 мин чтения

Сверка оплат и заказов интернет-магазина: как не потерять деньги

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

Самый опасный класс ошибок — «деньги получены, заказ потерян»: покупатель ожидает товар, склад не видит заказ, а проблема обнаруживается только после обращения.

Коротко

Надёжный процесс состоит из пяти частей:

  1. единый внутренний ID операции;
  2. явная модель статусов заказа и платежа;
  3. безопасная обработка повторных запросов и уведомлений;
  4. автоматический поиск расхождений;
  5. ежедневная очередь исключений с владельцами и сроками.

Не пытайтесь исправлять расхождение повторным списанием. Сначала получите фактический статус у провайдера и определите, какое действие идемпотентно.

Какие системы нужно сопоставить

Система Что подтверждает
CMS/checkout Намерение покупателя и созданный заказ
Платёжный провайдер Авторизацию, оплату, отмену или возврат
OMS/ERP/1С Исполнение и финансово-операционный статус
Онлайн-касса/ОФД Фискальное событие в применимом сценарии
Склад/доставка Сборку, отгрузку, доставку, возврат
CRM/helpdesk Обращения и ручные исключения
Банк/выписка Фактические расчёты и выплаты по правилам провайдера

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

Модель статусов

Не используйте одно поле «оплачен» для всего процесса.

Пример статусов заказа

  • draft;
  • awaiting_payment;
  • paid;
  • confirmed;
  • sent_to_erp;
  • assembling;
  • shipped;
  • completed;
  • cancelled;
  • returned.

Пример статусов платежа

  • created;
  • pending;
  • succeeded;
  • cancelled;
  • partially_refunded;
  • refunded.

Между ними должна быть таблица допустимых переходов. Например, payment.succeeded разрешает перевести ожидающий заказ в paid, но повторное уведомление не должно создать второй заказ или повторно списать склад.

Обязательные идентификаторы

Храните в одной записи:

  • внутренний order_id;
  • payment_id провайдера;
  • idempotency key исходного запроса;
  • ID события или уведомления, если он предусмотрен контрактом;
  • сумму и валюту;
  • временные метки создания и последнего изменения;
  • версию обработчика;
  • ID возврата;
  • ID операции в ERP;
  • признак тестовой операции.

Не используйте email или сумму как единственный ключ: у покупателя могут быть два заказа на одинаковую сумму.

Webhook не равен очереди исполнения

Правильный обработчик входящего уведомления:

  1. проверяет документированный способ аутентификации;
  2. сохраняет исходное событие;
  3. быстро возвращает ожидаемый HTTP-ответ;
  4. передаёт обработку в надёжную очередь;
  5. получает актуальный объект у провайдера, если это требуется контрактом;
  6. применяет переход статуса идемпотентно;
  7. пишет результат в журнал;
  8. повторяет временные ошибки с ограничением и задержкой.

Не полагайтесь на порядок доставки уведомлений. Система должна безопасно принять повтор и более старое событие.

Правила ежедневной сверки

Сформируйте автоматический реестр исключений.

Правило Возможная причина Действие
Платёж succeeded, заказа нет Сбой создания или связи ID Найти операцию, создать задачу, связаться с покупателем
Заказ paid, у провайдера pending/cancelled Локальный статус ошибочен Заблокировать исполнение, проверить источник
Сумма платежа не равна сумме заказа Изменение корзины, скидка, ошибка Не исполнять автоматически до проверки
Два платежа на один заказ Повторный запрос или действие клиента Проверить и обработать лишнюю операцию по регламенту
Заказ awaiting_payment слишком долго Потерян callback или незавершённая оплата Запросить статус у провайдера
Возврат есть локально, но не у провайдера Ошибка API или процесса Эскалировать финансам
Оплаченный заказ не попал в ERP Интеграция/очередь Безопасно повторить передачу
Нет ожидаемого фискального признака Сбой кассового контура Действовать по согласованному регламенту

Регламент обработки исключения

Для каждой строки реестра укажите:

  • уровень риска;
  • сумму;
  • возраст расхождения;
  • покупателя и канал связи;
  • владельца;
  • последнее безопасное действие;
  • срок следующей проверки;
  • результат и причину.

Приоритет обычно выше у полученных денег без заказа, двойных списаний и массового расхождения после релиза.

Контрольные показатели

Показатель Что показывает
Доля оплат без связанного заказа Потерю целостности процесса
Доля заказов с неверным локальным статусом Качество синхронизации
Возраст старейшего исключения Скорость реакции
Время от succeeded до paid Задержку callback/обработчика
Повторные уведомления Нормальную доставку или аномалию
Доля ручных исправлений Стоимость и хрупкость процесса
Расхождение сумм Финансовый риск

Порог «ноль исключений» не всегда реалистичен, но критические несовпадения должны немедленно попадать в работу.

Тест перед релизом

Проверьте в разрешённой тестовой среде:

  • успешную оплату;
  • отмену пользователем;
  • долгий pending;
  • повтор одного запроса с тем же ключом;
  • повторное уведомление;
  • уведомления не по порядку;
  • сетевой таймаут после отправки запроса;
  • частичный и полный возврат;
  • недоступность ERP после успешной оплаты;
  • восстановление обработчика и разбор накопившейся очереди.

Реальные списания и возвраты используйте только по согласованному сценарию с ограниченными суммами.

Шаблон операционной сверки

Дата Order ID Payment ID Заказ Платёж ERP Сумма Возраст Действие Владелец

Ежедневно закрывайте строки подтверждённым результатом, а не комментарием «кажется, исправлено».

Типичные ошибки

  • считать страницу «Спасибо» подтверждением денег;
  • не хранить ID провайдера;
  • повторять POST с новым ключом после таймаута;
  • создавать заказ заново на каждое уведомление;
  • полагаться только на webhook без периодической сверки;
  • молча исправлять статус без журнала;
  • смешивать тестовые и реальные операции;
  • давать службе поддержки вручную менять финансовый статус без контроля.

FAQ

Как часто проводить сверку?

Критические несоответствия ищите почти в реальном времени, полный реестр — минимум ежедневно. Частота зависит от объёма и допустимого времени реакции.

Что делать, если webhook не пришёл?

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

Что такое идемпотентность простыми словами?

Повтор одного и того же запроса с тем же ключом должен давать результат исходной операции, а не создавать новую. Точные условия и срок действия определяет API провайдера.

Источники

  • ЮKassa: входящие уведомления
  • ЮKassa: идемпотентность и формат взаимодействия
  • ФНС России: контрольно-кассовая техника

Проверено: 10 августа 2026 года. Условия API и требования к расчётам перепроверяйте перед внедрением.

Далее: контроль цен и остатков и мониторинг обмена с 1С.

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

Узнавайте о проблеме раньше клиента

Pingvera следит за сайтами клиентов «снаружи и изнутри» — доступность из регионов, формы, оплата, домен, SSL, сервер — и предупреждает в Telegram, email и Max раньше, чем напишет клиент.

Попробовать Pingvera бесплатно

Читайте также: Почему упали заказы: диагностика интернет-магазина · Дашборд интернет-магазина: KPI и готовый шаблон · Юнит-экономика интернет-магазина: шаблон расчёта · Что делать, если сайт клиента упал: регламент · Бесплатно проверить сайт.

← Все статьи · Политика конфиденциальности · pingvera.ru · Telegram-канал

На сайте осуществляется обработка пользовательских данных с использованием Cookie в соответствии с Политикой конфиденциальности.