Кассовый сервер: чеки 54-ФЗ по API на своей кассе
Кассовый сервер — это фискализация интернет-продаж без аренды кассы в дата-центре. Ваш сайт, CRM или учётная система отправляет чек обычным HTTP-запросом, а документ пробивается на вашей собственной ККТ, которая уже стоит в магазине, офисе или на складе.
Протокол намеренно совместим с АТОЛ Онлайн v5 (ФФД 1.2) и v4 (ФФД 1.05): если ваш модуль или SDK уже умеет говорить с АТОЛ Онлайн, интеграция сводится к смене базового URL и реквизитов доступа.
- Базовый URL:
https://54fz.cenaly.ru/possystem/v5/ - Справочник API: API кассового сервера
- Состав чека и справочники: Реквизиты чека
- Готовые сценарии магазина: Сценарии
- Ошибки и диагностика: Ошибки
1. Как это работает#
ваш сервер ──HTTP──► 54fz.cenaly.ru ──очередь──► Cenaly Hardware Bridge ──► ваша ККТ ──► ОФД → ФНС
▲ │ (кассовый ПК магазина)
└───callback + report─┘
- Ваш бэкенд получает оплату и отправляет JSON-чек на
POST /possystem/v5/{group_code}/sell. - Сервис отвечает мгновенно:
{"uuid": "...", "status": "wait"}— документ принят в очередь. - Очередь выбирает свободную кассу вашей группы и отправляет задание мосту на кассовом ПК.
- Касса пробивает чек, ОФД отправляет электронный чек покупателю на e-mail или телефон.
- Вы получаете результат:
POSTна вашcallback_urlи/илиGET .../report/{uuid}— с номером ФД, фискальным признаком, номером ФН и РН ККТ.
Типичное время от запроса до done — несколько секунд. Предельное время ожидания свободной кассы — 300 секунд, после чего документ получает статус fail с типом timeout.
2. Чем это отличается от облачной кассы в аренду#
| Аренда ККТ в дата-центре | Кассовый сервер | |
|---|---|---|
| Где физически стоит касса | В дата-центре провайдера | У вас: магазин, офис, склад |
| Кто владелец ККТ и ФН | Вы (аппарат арендован) | Вы (аппарат уже ваш) |
| Ежемесячная плата за железо | Есть, обычно основная часть счёта | Нет — касса у вас уже есть |
| Кто отправляет чек в ОФД | Касса провайдера | Ваша касса |
| Бумажный чек | Не печатается | Не печатается (интернет-расчёт — электронный чек) |
| Та же касса обслуживает зал | Нет, это отдельный аппарат | Да — одна ККТ на офлайн-точку и сайт |
Одна ККТ законна и для торгового зала, и для сайта: см. Облачная касса и Чеки интернет-магазина. Мы предоставляем транспорт и очередь до вашей кассы — оператором фискальных данных мы не являемся, чек формируется вашей ККТ от вашего имени и на ваш ИНН.
3. Что нужно для подключения#
1. Собственная ККТ, зарегистрированная для интернет-расчётов. В карточке регистрации должен стоять признак «расчёты в Интернете», а в месте расчётов (тег 1187) — адрес вашего сайта. Если касса зарегистрирована только на розничный адрес, нужна перерегистрация — мастер регистрации есть в самом мосте.
2. Кассовый ПК с установленным Cenaly Hardware Bridge. Мост — фоновая служба Windows или Linux, которая держит связь с кассой и облаком. Установка — обычный инсталлятор, автозапуск настраивается сам; см. Cenaly Hardware Bridge.
3. Постоянный интернет и включённый кассовый ПК. Чек пробивается на вашем оборудовании: если ПК выключен, документ ждёт в очереди и через 300 секунд возвращает ошибку. Для ночных заказов держите кассовый ПК включённым.
4. Расширение «API кассы (Россия)». Раздел включается карточкой «API кассы (Россия)» в «Магазине приложений». Расширение платное: 790 ₽ в месяц или 7900 ₽ в год за каждую подключённую кассу, и доступно только локациям в России.
5. Свой кассовый сервер. Реквизиты доступа вы создаёте сами: раздел админки «API кассы» → кнопка «Создать кассовый сервер». Мастер из двух шагов — выбор кассы из вашего реестра оборудования (можно добавить и резервную) и реквизиты компании (название, ИНН, система налогообложения по умолчанию, версия протокола). На последнем шаге выдаются group_code, логин и пароль. Пароль показывается один раз и хранится только хешем: потерянный пароль не восстанавливается, его можно лишь сменить кнопкой «Сменить пароль» (уже выданные токены доживут свои 24 часа).
В мастере есть флажок «Тестовый режим»: документы принимаются и проверяются, но на кассу не уходят — удобно отладить интеграцию до первого боевого чека. Режим переключается и потом: кнопка «Настройки» в строке сервера открывает правку названия и тестового режима, так что отлаженный сервер переводится в боевой без пересоздания и без смены реквизитов. Есть и общая тестовая группа на mock-кассе — её реквизиты выдаёт поддержка.
Совместимость касс#
Электронный чек без печати сегодня уверенно поддерживают кассы АТОЛ (драйвер ДТО-10). Для остальных семейств (ШТРИХ-М, Пирит, Меркурий) мост используется в офлайн-сценариях — интернет-чек без печати они либо не поддерживают, либо не заявляют поддержку в протоколе. Перед подключением проверьте свою модель у поддержки: несовместимость видна на этапе настройки, а не на первом боевом чеке.
4. Порядок подключения#
| Шаг | Что делаете | Результат |
|---|---|---|
| 1 | Проверяете карточку регистрации ККТ (признак «расчёты в Интернете», тег 1187 = адрес сайта) | Касса юридически пригодна для интернет-чеков |
| 2 | Ставите мост на кассовый ПК и привязываете его к аккаунту | Касса видна в облаке |
| 3 | Включаете расширение «API кассы (Россия)» в «Магазине приложений» | В админке появляется раздел «API кассы» |
| 4 | «API кассы» → «Создать кассовый сервер»: выбираете кассу и заполняете реквизиты | Получаете group_code, логин и пароль (пароль — один раз) |
| 5 | Интегрируете API: getToken → sell → report |
Тестовый чек проходит |
| 6 | Заводите боевой сервер (без «Тестового режима») и подписываетесь на callback_url |
Чеки бьются автоматически |
Готовность интеграции определяется просто: первый report со статусом done и заполненным fiscal_document_number.
5. Что сервис умеет и чего не умеет сегодня#
Умеет:
- 8 операций протокола:
sell,sell_refund,buy,buy_refundи четыре вида чеков коррекции; - полный состав чека ФФД 1.2: покупатель (в т.ч. расширенные реквизиты), СНО, признаки способа и предмета расчёта, единицы измерения, ставки НДС (включая 5 %, 7 %, 22 %), агентские реквизиты, отраслевые и операционные реквизиты;
- идемпотентность по
external_id— повторный запрос никогда не пробивает второй документ; - очередь с балансировкой по нескольким кассам группы, включая резервные;
- доставку результата callback'ом с повторами и поллингом.
Пока не умеет (честно):
- Проверку кода маркировки в «Честном знаке» / ТС ПИоТ — код маркировки передаётся в кассу как есть, разрешительный режим на нашей стороне не реализован;
- ссылку на чек в ОФД (
ofd_receipt_url) — поле возвращается пустым: кассовые драйверы её не отдают, чек ищется в личном кабинете вашего ОФД по номеру ФД; - отдельный публичный API мониторинга ККТ (статус ФН, непереданные документы) — в разработке. Само состояние касс видно в разделе «API кассы»: связь каждой кассы (на связи / нет связи / убрана из оборудования), очередь (сколько документов ждёт и сколько в работе), пробито и отказов за сутки, последний чек и последний отказ, а рядом — журнал чеков с фискальными реквизитами.
Сервис доступен только в российском контуре бренда cenaly.ru: весь путь чека и персональные данные покупателей остаются в российской инфраструктуре.
6. Дальше#
- API кассового сервера: справочник — аутентификация, эндпоинты, форматы ответов, лимиты.
- Реквизиты чека — состав
receiptи все справочники значений. - Сценарии интернет-магазина — оплата на сайте, предоплата, возврат, коррекция, курьер, агентская схема.
- Ошибки и диагностика — коды ошибок, поведение при офлайне кассы, чек-лист интеграции.