Общая теория

Как прикрутить кассу к пробитию чеков автоматически из вашего личного кабинета на нашем сайте kkmspb.ru .

Общая схема взаимодействия модулей ниже:

фотка 1

Главная проблема удаленного пробития чеков из интернета на кассе, подключенной к локальному компьютеру PC-XXX на локальном (железном) COM порту YYY, в том ,что из интернета доступ к компьютеру PC-XXX обычно закрыт роутером или другими девайсами.

Если бы из интернета можно было послать пакет(команду) на ip адрес компьютера PC-XXX [ip порт ZZZ], то проблем вообще было бы минимум.

Но на практике можно выделить несколько вариантов управления кассовым аппаратом (по TCP IP).

Первый подход

Делаем роутеру статический внешний IP адрес (EEE). Потом пробрасываем ip порт PPP снаружи внутрь (в локальную сеть), где находится наш компьютер PC-XXX на его ip порт [PPP] и все будет работать нормально.

Но это требует "тонкой" настройки роутера, что часто многим пользователям не доступно по причине отсутствия прав администратора или квалификации. И вообще этот процесс еще надо отлаживать , и при сбросе роутера настраивать заново.

Второй подход

Второй подход заключается в том, что можно, так сказать, заставить кассу периодически (1раз/5мин например) отправлять запрос в интернет на сервер и если в ответ приходят задания выполнять их (например печататэь чеки и вообще все, что угодно).

Конечно минусом является постоянная посылка запросов в интернет к серверу, что серверу никак не может понравиться.

Также минусом является задержка в пробитие чека от пары секунд до соответственно 5 мин (период опроса).

По закону чек должен пробиться в течении 5 минут после оплаты банковской картой на сайте (вроде бы так). Поэтому, если торопиться некуда, то можно посылать запросы серверу и 1раз в 5 минут.  При особом желании 1 раз в 30мин и это тоже нормально (нагрузка на сервер не будет сильной).

То есть для оплаты со страницы сайта интерактивно пользователем через ввод данных банковской картой или по Qr коду это нормальная ситуация. 

В других случаях, когда продавец хочет максимально быстро получать чеки (1-2сек) этот подход естественно не подходит.

Третий подход

Надо добавить, что если бы касса находилась там же где и сервер (физически), то  с печатью чеков не было бы проблем, все можно было бы печатать мгновенно. Этот вариант известный как ферма кассовых аппаратов тоже существует в действительности.  Тут минус в том, что бумажную версию чека получить проблематично.

Данный поход никак не связан с нашей программой под Windows. Приводим его только для полноты картины.

 Четвертый подход

Есть такая технология сетей как виртуальная частная сеть (VPN). Если компьютер PC-XXX, к которому подключен кассовый аппарат работает в одной сети вместе с сервером, который реализует очередь заданий (для кассового аппарата), то соответственно проблем с посылкой задания (сервером) кассе никаких нет. Происходит это по инициативе сервера.

Но тут трудность в наличии такого сервера. Это не простой сервер из интернет хостинга. Точнее этот сервер должен реализовывать виртуальную частную сеть. И делать его придется похоже самостоятельно.

Предположим мы сделали такой сервер, сделали ему статический адрес в интернете.

Далее наша программа под Windows , например БИТ драйвер ККТ, устанавливает с сервером VPN соединение, то есть получает от сервера себе ip vpn адрес (например 10.0.0.44), и далее сервер может посылать команды кассе на печать. 

Это самый грамотный вариант, но требует расходов на создание и подержание такого vpn  сервера.

Конечно на нем будет база данных, типа MySql, для хранения заданий на печать чеков. Конечно нужен php и apache для создания личных кабинетов. 

Итог

Но для начала мы попробуем подход 2, так как он реализуется проще и на сервере обычного хостинга.

Кто-что думает пишите на p@kkmspb.ru ибо иметь одну кассу (в офисе) для обычных бумажных чеков и ее же для интернет чеков решение однозначно выгодное и уникальное. На сегодняшний день мы таких решений не встречали.

Остается обсудить протокол обмена с сервером, формат данных для передачи чеков. Думаем вполне подойдет json протокол от Атола, так как он хорошо документирован и популярен. Но в итоге выясняется, что в нашей ситуации логично реализовать свой единообразный протокол для всех моделей кассовых аппаратов.

Что мы получаем в итоге. Программа БИТ драйер ККТ устанавливает на ПК, к которому подключен кассовый аппарат (1000р./1год). Далее в программе настраивается соединение с сервером для забора чеков на печать (еще 250₽/мес.) и все расходы. Как-то примерно так.

Вам (пользователи) остается посылать json задания на наш сервер kkmspb.ru, они добавляются в очередь и программа БИТ драйвер ККТ из забирает 1раз/5минут, печатает на ккт и результат возвращается на сервер kkmspb.ru. Пробитые чеки можно просматривать в своем личном кабинете на kkmspb.ru, а также на сайте своего ОФД.