Развитие веб-технологий привело к тому, что многие компании переносят свои CRM и учетные системы в браузер. Однако при этом возникает серьезная техническая задача: как связать веб-страницу, запущенную в браузере, с физическим торговым оборудованием, в частности с контрольно-кассовой машиной (ККМ)?
Особенно остро этот вопрос встал после введения требований по обязательному указанию в чеке реквизитов покупателя (наименование юридического лица и его ИНН) при расчетах между организациями и ИП. Вбивать эти данные вручную на кнопочной клавиатуре автономной кассы — это гарантированный способ получить массу ошибок и замедлить работу. В этой статье мы подробно разберем, как организовать автоматическую печать чеков со всеми необходимыми реквизитами напрямую из вашей веб-CRM.
Если у вас на рабочем месте установлена автономная кнопочная касса (например, популярные модели «Меркурий 115Ф», «130Ф», «185Ф»), она по умолчанию работает в автономном режиме и отправляет данные в ОФД через собственную SIM-карту. В таком режиме управлять ею с компьютера невозможно. Нам необходимо перевести её в режим фискального регистратора (ФР).
Разберем этот процесс по шагам:
4 (режим ФР), а интерфейсный порт (USB или RS-232) настраивается на обмен данными с ПК.Эта служба работает в фоновом режиме как локальный веб-сервер и по умолчанию принимает команды на адрес http://localhost:50010. Теперь наша веб-CRM может отправлять стандартные HTTP POST-запросы с JSON-пакетами прямо на локальный порт компьютера кассира, а служба будет транслировать их в кассу.
Проанализируем пример JSON-запроса для печати чека с реквизитами покупателя через INECRMAN:
{
"command": "PrintReceipt",
"receiptType": 1,
"rows": [
{
"name": "Продукция компании (Код товара 102)",
"price": 1500.00,
"quantity": 1,
"tax": 20
}
],
"customerName": "ООО ТД Ромашка",
"customerINN": "7712345678"
}
Если вы не хотите привязываться к конкретному производителю касс и писать уникальный код под каждый драйвер, отличным решением станет использование специализированного промежуточного ПО, такого как KKMServer. Это проверенный инструмент, который умеет общаться практически со всеми популярными моделями касс (АТЛ, Штрих-М, Меркурий и др.) и предоставляет единый API для веб-разработчиков.
Схема работы выглядит следующим образом:
5893).http://localhost:5893 с командами на печать чека.Рассмотрим пример JavaScript-кода для формирования и отправки чека на KKMServer:
const receiptData = {
Command: "RegisterCheck",
NumDevice: 0,
InnKkm: "",
TypeCheck: 0, // 0 - Приход
IsCloud: false,
ClientAddress: "client@email.ru",
CustomerName: "ООО Вектор",
CustomerINN: "7701020304",
CheckStrings: [
{
Register: {
Name: "Информационные услуги по договору №15",
Quantity: 1,
Price: 5000.00,
Amount: 5000.00,
Department: 1,
Tax: 20
}
}
],
CashierName: "Иванова А.А."
};
fetch('http://localhost:5893/Execute', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(receiptData)
})
.then(response => response.json())
.then(data => {
if (data.Status === 0) {
console.log("Чек успешно напечатан. Фискальный признак:", data.Sign);
} else {
console.error("Ошибка печати чека:", data.Error);
}
})
.catch(error => console.error("Ошибка сети:", error));
При прямой отправке запросов из браузера на локальный хост (localhost) разработчики неизбежно сталкиваются с проблемой безопасности современных браузеров. Если ваша веб-CRM работает по защищенному протоколу HTTPS (например, https://my-crm.ru), браузер заблокирует любые попытки отправить запросы (Fetch / XHR) на незащищенный протокол HTTP локального сервера (http://localhost:5893). Это называется Mixed Content (Смешанный контент).
Выясним, какими способами можно обойти это ограничение:
Тот же KKMServer предоставляет готовое расширение для браузеров Google Chrome / Yandex Browser. Данное расширение устанавливается у пользователя и берет на себя роль посредника. Скрипт на странице CRM общается с расширением через API браузера, а расширение без проблем пересылает команды на локальный порт, так как на него правила Mixed Content не распространяются.
Вы можете настроить локальный веб-сервер (службу драйвера кассы) на работу по протоколу HTTPS. Для этого разработчики регистрируют специальное доменное имя, которое указывает на IP-адрес 127.0.0.1 (например, localhost.mycompany.ru), и выпускают для него валидный SSL-сертификат. Запросы из CRM будут идти на https://localhost.mycompany.ru:5893, и браузер пропустит их как безопасные.
Это самый надежный и отказоустойчивый архитектурный паттерн, который полностью решает проблему безопасности и исключает зависимость от стабильности браузера кассира.
Разберем этот паттерн по шагам:
ОчередьЧеков со статусом «Ожидает отправки».Такой подход гарантирует, что даже если у кассира на секунду зависнет браузер или закроется вкладка CRM, чек все равно будет корректно обработан и напечатан.
Если вы используете современное оборудование ведущих брендов, вам могут не потребоваться сторонние утилиты. Крупные производители уже встроили веб-серверы в свое системное ПО.
Драйвер ККТ АТОЛ v.10 (ДТО 10): включает в себя встроенный веб-сервер. При его активации на компьютере запускается служба, которая принимает фискальные команды в формате JSON. Вам достаточно изучить официальное руководство по интеграции ДТО 10 и отправлять структурированные JSON-запросы на локальный порт службы.
Web-сервер Штрих-М: аналогичное решение от компании «Штрих-М». Утилита позволяет управлять кассой по HTTP/JSON, предоставляя веб-интерфейс для настройки и REST API для отправки чеков из вашей CRM.
Если специфика вашего бизнеса позволяет не выдавать клиенту физический бумажный чек прямо в руки (например, вы торгуете услугами, принимаете оплату онлайн или ваши курьеры отправляют электронные чеки на email/SMS), оптимальным решением будет переход на облачную кассу.
В этом случае физическое устройство в офисе вообще не нужно. Вы арендуете кассу в специализированном дата-центре (сервисы вроде Атол Онлайн, ЧекОнлайн, Orange Data). Ваша CRM интегрируется с их облачным API напрямую «сервер-сервер»:
[ Веб-CRM ] -- HTTPS POST (JSON) --> [ API Облачного сервиса ]
|
[ Физическая касса в ДЦ ]
|
[ Отправка чека в ОФД ]
|
[ Email / SMS чек покупателю ]
Этот способ полностью избавляет вас от необходимости настраивать локальные компьютеры, следить за USB-кабелями, решать проблемы с драйверами и бороться со смешанным контентом в браузерах.
Мы проанализировали различные варианты подключения кассовой техники к веб-ресурсам. Выбор конкретного пути зависит от ваших ресурсов и используемого оборудования: