Как интернет-магазин создаёт кассовый чек онлайн и доставляет его покупателю

Интернет-магазин может сделать кассовый чек онлайн автоматически: платёжный агрегатор сообщает об оплате, облачная касса генерирует xml-документ, подписывает его и за 2–3 секунды рассылает в ФНС, ОФД и на e-mail клиента. Ниже — пошаговое объяснение, как устроен этот путь и почему он происходит без участия кассира.

Какие события запускают создание чека в интернет-магазине

Точкой отсчёта считается webhook от платёжного шлюза: когда деньги захолдированы, агрегатор отправляет POST-запрос на сервер магазина с параметрами суммы, номера заказа и masked PAN карты.

CMS (1С-Битрикс, OpenCart, МойСклад) ловит webhook и дергает метод «сделать кассовый чек онлайн» через SDK выбранного ОФД. Если магазин работает по предоплате, создаётся чек с признаком «предоплата 100 %»; если по факту отгрузки — «полный расчёт».

Второй чек формируется автоматически в момент статуса «отгружено» и тоже уходит в ОФД без участия человека.

Всё происходит на том же компьютер, где висит cron-скрипт, поэтому задержка редко превышает 5 секунд от оплаты до появления файла в базе ФНС. С 2024 года в силу вступил формат ФФД 1.2, и в xml добавлен тег 1261 «адрес сайта», чтобы покупатель мог проверить чек даже если e-mail ошибочный.

Как облачная касса взаимодействует с платёжным агрегатором через API

Схема проста: агрегатор отдаёт JSON, касса превращает его в xml 54-ФЗ и подписывает фискальным ключом. Для безопасности используется двусторонний TLS 1.3 и подпись JWT: в заголовке передаётся token, в теле — fiscal-request. Пример исходного запроса (часть полей сокращена):

JSON

{

«order_id»: «14004-mz»,

«amount»: 128000,

«payment_type»: «card»,

«customer_email»: «user@mail.ru»,

«items»: […]

}

Облачный модуль ОФД отвечает за idempotency: если webhook придёт дважды, второй чек не создастся — проверка идёт по order_id. Возврат тоже автоматизирован: при отмене платёжный шлюз шлёт refund-webhook, касса формирует чек-коррекцию с теми же товарами, но отрицательной суммой. Всё это происходит на хостинге ОФД, поэтому магазину не нужен выделенный компьютер или виртуальная машина — достаточно стандартного хостинга с PHP 8.1 и curl. Подключение к API большинства операторов (СБИС, Такском, Первый ОФД) предоставляется бесплатно, плата взимается только за пакет фискальных документов.

Как чек попадает к покупателю: e-mail, SMS и Push в одной цепочке

Когда xml получает фискальный признак, ОФД одновременно делает три вещи:

  1. Отправляет копию в ФНС через протокол ФИС ФД (HTTPS + SOAP).
  2. Кладёт pdf-версию на CDN и возвращает короткую ссылку.
  3. Передаёт ссылку в SMS-шлюз или SMTP-сервер — в зависимости от того, что выбрано в настройках.

Стоимость e-mail равна нулю, SMS обходится в 0,50–1,20 руб. за сообщение; соцсети и Telegram-боты используются реже, но тоже поддерживаются. Чтобы покупатель точно получил письмо, рекомендуется прописать SPF-записи для домена магазина и включить DKIM-подпись в SMTP-OFD — иначе письмо уйдёт в спам. В 2025 году запускается эксперимент «Е-чек в ЛК Госуслуг»: покупатель может подключить автосбор чеков в свой личный кабинет, и тогда ОФД будет отправлять копию туда бесплатно. Пока эксперимент охватывает 20 % пользователей, но уже сейчас можно подать заявку в ФНС и стать участником.

Таблица. Сравнение каналов доставки электронного чека

Канал

Стоимость для магазина

Достоверность доставки (в среднем)

Плюсы

Минусы

E-mail

от 0 руб.

95 % с DKIM

Мгновенно, можно приложить pdf

Падает в спам

SMS

от 0,5–1,2 руб.

98 %

Не требует интернета у клиента

Ограничение 160 символов

Push-приложение

от 0 руб.

99 %

Можно открыть чек одним тапом

Требует установки приложения

Telegram-бот

от 0 руб.

97 %

Поддерживает pdf и ссылку

Не у всех включены уведомления

Как интернет-магазин может сам проверить, дошёл ли чек до клиента

Каждый ОФД предоставляет личный кабинет и REST-метод GET /v1/doc/{id}/status. В ответе приходит JSON-поле «delivered»: true/false. Если значение false больше 10 минут, стоит проверить лог SMTP-шлюза или повторить отправку на альтернативный адрес.

Некоторые CMS (МойСклад, InSales) уже встроили виджет «Доставка чеков» в админ-панель: менеджер видит зелёную галочку или красный крестик рядом с заказом. Ещё один способ — подписаться на webhook от ОФД: когда покупатель первый раз открывает ссылку, оператор шлёт POST-запрос на сервер магазина, и тот помечает заказ «чек прочитан». Это помогает в спорах: если клиент утверждает, что не получал чек, а статус «opened» = true, претензия не принимается. С 2024 года ФНС также предоставляет бесплатный метод «getReceiptStatus» в API ЕИОЧ — ответ приходит за 300 мс и не требует подписи, только ИНН и ФН.

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