Перевод рабочих мест кассиров (РМК) на операционную систему Linux часто сопровождается трудностями при подключении торгового оборудования. Типичная ситуация: при установке стандартного Windows-драйвера в среде Linux система выдает ошибку об отсутствии необходимой компоненты, а при попытке настроить эквайринг через библиотеку подключаемого оборудования (БПО) старых версий возникает программный сбой транзакций. Разберем детально, как решить эти проблемы, настроить утилиту sb_pilot и правильно связать терминал Сбербанка с конфигурацией 1С на ОС Linux.
Прежде всего проанализируем ситуацию с технической точки зрения. Исторически драйвер «1С:Эквайринговые терминалы Сбербанк» версии 1.х разрабатывался под ОС Windows. Он использовал COM-технологии и динамические библиотеки sbrf.dll и SBRFCOM.dll. Попытка запустить эту компоненту на Linux напрямую не увенчается успехом — система закономерно сообщит, что компонента не найдена или не может быть загружена.
Для решения этой проблемы фирма «1С» совместно со Сбербанком разработала кроссплатформенный драйвер нового поколения — «1С:Эквайринговые терминалы Сбербанк 2.Х», работающий по технологии NativeAPI. Этот драйвер изначально поддерживает работу в Linux (32- и 64-бит) без эмуляторов типа Wine.
Вторая проблема — ошибка «Не заполнена колонка "Номер платёжной карты" в строке 1 списка "Оплаты платёжными картами"». Это классический конфликт версий БПО. Эквайринговый терминал отправляет ответ о завершении операции, но 1С ожидает маскированный номер карты в строго определенном формате. Если версия БПО устарела (например, используется БПО 2.1, как у автора темы), программа не может сопоставить возвращенные драйвером параметры и блокирует проведение чека.
Рассмотрим, как правильно обновить интеграционную компоненту. Если вы работаете в конфигурации «1С:Управление торговлей 11» (УТ 11) или «1С:Розница», наилучшим решением будет обновление конфигурации до актуального релиза, содержащего БПО версии 3.1 или выше. В этих версиях новый драйвер Сбербанка интегрирован по умолчанию.
Если возможности быстро обновить всю конфигурацию нет, мы можем «вытащить» нужный драйвер из демо-базы БПО последней версии и загрузить его в текущую информационную базу. Для этого выполним следующие действия:
После установки нового драйвера оборудование начнет успешно инициализироваться, однако ошибка незаполненного номера карты в документе оплаты всё равно может проявиться. Выясним, как ее отключить штатными средствами 1С.
В современных конфигурациях проверка ввода номера карты является опциональной. Нам необходимо отключить обязательный запрос этих данных, так как терминал сам сохраняет слип-чеки и подтверждает транзакцию в банковском процессинге. Пройдем по шагам:
После этой манипуляции 1С перестанет требовать обязательного заполнения реквизита номера карты в табличной части документа оплаты, и чек будет пробит успешно.
Для взаимодействия с терминалом в ОС Linux используется специализированная консольная утилита sb_pilot. Поскольку большинство терминалов подключаются по интерфейсу USB с эмуляцией последовательного порта (COM-порта), в операционной системе Linux они монтируются как символьные устройства в каталоге /dev/. Обычно это /dev/ttyACM0 или /dev/ttyUSB0.
По умолчанию у обычного пользователя Linux (под которым запускается платформа «1С:Предприятие») нет прав на чтение и запись в эти системные порты. Нам необходимо предоставить эти права, добавив пользователя в соответствующую группу.
Проанализируем команды терминала Linux для решения этой задачи. Откроем консоль операционной системы и выполним следующие действия:
Добавим текущего пользователя (или пользователя, от имени которого работает тонкий/толстый клиент 1С) в группу доступа к последовательным устройствам (обычно это группа dialout, в дистрибутивах Arch Linux или RedHat это может быть группа uucp):
sudo usermod -aG dialout $USER
Для того чтобы изменения вступили в силу, необходимо полностью завершить текущую сессию пользователя в Linux (выйти из системы) и войти заново, либо выполнить перезагрузку компьютера.
Также мы можем создать правило для менеджера устройств udev, чтобы порт терминала всегда создавался с нужными правами доступа. Для этого создадим файл правил:
sudo nano /etc/udev/rules.d/99-sberbank.rules
Добавим в него следующую строку, которая разрешит всем пользователям чтение и запись для устройств с эмуляцией COM-портов Сбербанка:
KERNEL=="ttyACM[0-9]*", MODE="0666"
KERNEL=="ttyUSB[0-9]*", MODE="0666"
После этого перезапустим службу udev командой sudo udevadm control --reload-rules.
Разберем подробнее установку самой утилиты интеграции со Сбербанком. Все необходимые файлы (библиотеки, конфигурационные файлы pinpad.ini) предоставляются технической поддержкой банка. Обычно они размещаются в каталоге /opt/sc552/.
Убедимся, что исполняемый файл sb_pilot имеет права на выполнение. Для этого перейдем в каталог с утилитой и назначим права:
cd /opt/sc552/
sudo chmod +x sb_pilot
Посмотрим на пример проверки связи с банком напрямую из консоли Linux, не запуская 1С. Это позволит нам локализовать проблему и понять, правильно ли настроен порт в pinpad.ini.
Запустим команду вызова сервисного меню терминала:
./sb_pilot 11
Если на экране терминала загорелось меню или начался процесс сверки итогов — физическое подключение и утилита настроены верно.
Для проведения тестового платежа на сумму 1 рубль можно использовать команду:
./sb_pilot 1 100
Где 1 — код операции оплаты, а 100 — сумма операции в копейках.
Теперь вернемся в интерфейс программы «1С:Предприятие 8.3». Нам осталось прописать путь к настроенной и проверенной утилите Сбербанка в параметрах подключения оборудования:
/opt/sc552/sb_pilot./opt/sc552/).Таким образом, благодаря использованию NativeAPI драйвера версии 2.х, правильному назначению прав доступа к портам в Linux и отключению контроля номера карты в настройках РМК, мы получаем стабильно работающий эквайринг Сбербанка на рабочих местах кассиров под управлением ОС Linux.