Клиент оформляет заказ в интернет-магазине на Битрикс, выбирает «оплата при получении». Курьер привозит товар, пробивает чек на мобильной кассе АТОЛ или Эвотор. Фискальный чек выдан, но заказ в системе зависает в статусе «ожидает оплаты». Склад не списывает позиции, бухгалтерия не видит факта оплаты — знакомая проблема? Мы сталкиваемся с ней регулярно и знаем, как её решить. Сбои в синхронизации приводят к задвоению остатков, штрафам от ФНС и потере клиентов. За год мы исправили более 50 таких кейсов. Интеграция онлайн-магазина с оффлайн-кассой — это не только фискализация по 54-ФЗ, но и полноценная синхронизация состояния заказов и остатков. В этой статье разберём техническую реализацию связки Битрикс с оффлайн-кассой на примере REST API.
Схема фискализации оплат
По 54-ФЗ каждый расчёт требует чека. В Битрикс модуль salescenter и компонент bitrix:salescenter.cashbox интегрируются с онлайн-кассами через ОФД. Для оффлайн-кассы схема иная: чек выдаётся физическим аппаратом (АТОЛ, Эвотор, Штрих-М), а Битрикс должен получить подтверждение.
Два направления данных:
- Битрикс → касса: данные заказа (позиции, суммы, НДС) для формирования чека
- Касса → Битрикс: подтверждение с номером и фискальным признаком
Интеграция через API кассового ПО
Большинство современных касс имеют REST API или webhook. Эвотор — Cloud API, АТОЛ — свой протокол. В Битрикс обработчик смены статуса заказа отправляет данные:
AddEventHandler('sale', 'OnSaleStatusOrderChange', function(\Bitrix\Main\Event $event) { $order = $event->getParameter('ENTITY'); $status = $order->getField('STATUS_ID'); if ($status !== 'DE') { return; } $items = []; foreach ($order->getBasket() as $item) { $items[] = [ 'name' => $item->getField('NAME'), 'quantity' => $item->getQuantity(), 'price' => $item->getPrice(), 'vat' => getVatTag($item->getField('VAT_RATE')), ]; } $evotorApi->sendReceipt($order->getId(), $items, $order->getPrice()); }); Получение подтверждения от кассы
Касса шлёт webhook при успешном чеке. Endpoint в Битрикс:
$data = json_decode(file_get_contents('php://input'), true); if ($data['event'] === 'receipt.created') { $orderId = $data['external_id']; $fiscalSign = $data['fiscal_document_number']; $order = \Bitrix\Sale\Order::load($orderId); if ($order) { $payment = $order->getPaymentCollection()->current(); $payment->setField('PAID', 'Y'); $payment->setField('EXTERNAL_PAYMENT', $fiscalSign); $order->setField('STATUS_ID', 'F'); $order->save(); } } Как синхронизировать остатки при оффлайн-продажах?
Продажа в физическом магазине товара, который есть в онлайн-заказе, должна уменьшать остатки. Есть два подхода:
| Подход | Описание | Время задержки |
|---|---|---|
| Через 1С | 1С собирает все продажи и синхронизирует остатки в Битрикс по расписанию | от 15 минут до часа |
| Прямая интеграция кассы с Битрикс | Касса при каждой продаже вызывает API Битрикс для списания остатков | реальное время |
Прямая интеграция в 3 раза быстрее и исключает риск двойной продажи. Мы реализуем оба варианта, но рекомендуем второй. Типичная экономия времени бухгалтера — 2 часа ежедневно за счёт автоматизации.
Почему маппинг НДС критичен?
Ошибка в ставке НДС при отправке на кассу — нарушение 54-ФЗ. Ставки в Битрикс хранятся в b_catalog_vat. Маппинг для фискального чека:
-
VAT_RATE = 20→ тег 1105 (НДС 20%) -
VAT_RATE = 10→ тег 1104 (НДС 10%) -
VAT_RATE = 0→ тег 1106 (НДС 0%) -
VAT_INCLUDE = N→ тег 1107 (НДС не облагается)
Мы учитываем все нюансы — вплоть до НДС 20/120, чтобы фискальные данные соответствовали законодательству. Это позволяет сократить ошибки фискализации на 95%.
Процесс настройки: пошаговая инструкция
- Анализ — изучаем текущие настройки кассы и Битрикс, выявляем несовместимости.
- Проектирование — выбираем протокол (REST или webhook), определяем маппинг полей.
- Реализация — пишем обработчики событий, эндпоинт и логику синхронизации.
- Тестирование — проверяем на тестовой кассе до 100 чеков, исправляем ошибки.
- Деплой — выкатываем на боевой контур, настраиваем мониторинг.
Чек-лист для безопасной интеграции
- Проверен маппинг НДС для всех товаров
- Настроен повторный запрос при ошибке отправки
- Реализована очередь неотправленных чеков
- Протестирована отмена чека при возврате
- Настроено уведомление ответственного лица при сбое
Сравнение протоколов касс
| Протокол | Пример кассы | Скорость | Сложность |
|---|---|---|---|
| REST API | Эвотор, АТОЛ | высокая | средняя |
| Webhook | Штрих-М, Вики | средняя | низкая |
Выбор протокола зависит от кассы и сценария. Мы подберём оптимальный.
Что входит в настройку
Мы подготавливаем:
- Обработчик
OnSaleStatusOrderChangeдля отправки данных в кассовую систему - Webhook-endpoint для получения подтверждения фискализации
- Маппинг ставок НДС между Битрикс и кассой
- Обновление статуса оплаты и поля фискального признака
- Механизм синхронизации остатков
- Логирование всех транзакций для диагностики
Дополнительно:
- Тестирование интеграции на тестовой кассе
- Документация по API и схеме работы
- Поддержка после запуска
Сроки настройки — от 2 до 5 дней в зависимости от сложности кассы и сценария. Стоимость рассчитывается индивидуально. Свяжитесь с нами для консультации — оценим ваш проект в течение дня. Закажите настройку под ключ.
Более 20 интеграций с оффлайн-кассами на Битрикс — наш опыт гарантирует стабильную работу.







