Подключение торгового эквайринга в среде Linux часто становится серьезным испытанием для технических специалистов. Стандартное решение от компании INPAS — библиотека DualConnector — исторически разрабатывалось как COM-объект (библиотека dualconnector.dll), который предназначен исключительно для работы в ОС Windows. При переходе на Linux (например, Astra Linux, Ubuntu или РЕД ОС) системные администраторы сталкиваются с тем, что штатные средства от банка не запускаются, а поддержка вендора часто ограничивается предложением использовать Windows-стек.
В этой статье мы разберем, как обойти эти ограничения, какие существуют альтернативные способы интеграции терминалов INPAS с 1С и какие настройки необходимо выполнить на уровне операционной системы.
Прежде всего, проанализируем техническую причину проблемы. Модуль INPAS Dual Connector спроектирован для работы в режиме толстого или тонкого клиента 1С под управлением Windows XP, 7, 8 или 10. В архитектуре 1С под Linux механизм COM-соединений отсутствует. Попытки запустить установщик .msi через Wine часто приводят к нестабильной работе и ошибкам регистрации компонентов в реестре. Таким образом, нам необходимо искать решения, использующие технологию Native API или промежуточные сервисы (Middleware).
Одним из самых стабильных способов подключения является использование платного драйвера от компании АТОЛ. Этот драйвер поддерживает протоколы обмена INPAS (SmartSale/UNIPOS) и имеет нативную реализацию для Linux (библиотеки формата .so).
Рассмотрим по шагам процесс настройки этого решения:
libfptr.so в системные директории.Inpas SmartSale или Unipos. Именно эти протоколы используются в терминалах, поставляемых банком ВТБ.Этот метод хорош тем, что он сертифицирован фирмой 1С и работает через стандартную Библиотеку Подключаемого Оборудования (БПО).
Если прямое подключение через драйвер 1С вызывает трудности, проанализируем вариант с использованием промежуточного сервера печати и эквайринга — KkmServer. Это кроссплатформенное ПО, которое запускается в Linux как демон (сервисная служба) и предоставляет HTTP API для взаимодействия с оборудованием.
Алгоритм настройки выглядит следующим образом:
localhost:5893).Преимущество этого метода заключается в том, что 1С общается с оборудованием через обычные HTTP-запросы, что полностью снимает проблемы совместимости битовых версий (32/64 bit) и отсутствия COM-объектов.
Компания INPAS разработала специализированное ПО под названием SmartSale (или UNIPOS Terminal), которое имеет версию для Linux. В состав этого ПО входит библиотека libdc_client.so. Посмотрим на структуру такого решения:
Обычно банки предоставляют ссылку на закрытое хранилище (например, на базе ownCloud), где хранятся архивы с дистрибутивами. Если вам удалось получить доступ к такому архиву, процедура будет следующей:
terminal.xml или dc_client.xml, указав параметры связи с банком и порт подключения терминала.Важный момент: Если архив защищен паролем, его следует запрашивать у официальной техподдержки INPAS или через вашего банковского менеджера, так как эти данные привязаны к конкретному контракту на обслуживание.
Независимо от выбранного программного метода, нам необходимо подготовить операционную систему к работе с USB-устройством. Терминалы INPAS при подключении к USB-порту обычно определяются как виртуальные COM-порты (устройства /dev/ttyACM0 или /dev/ttyUSB0).
Выясним, как обеспечить корректный доступ 1С к этим портам. По умолчанию обычный пользователь в Linux не имеет прав на запись в системные порты. Выполним следующие действия:
Добавим пользователя, под которым работает 1С (или текущего пользователя), в группу dialout (в некоторых дистрибутивах — uucp):
sudo usermod -a -G dialout $USER
После этого необходимо перезайти в систему. Также рекомендуется создать правило udev, чтобы права на устройство устанавливались автоматически при его подключении. Создайте файл /etc/udev/rules.d/99-inpas.rules с текстом:
KERNEL=="ttyACM*", MODE="0666", GROUP="dialout"
KERNEL=="ttyUSB*", MODE="0666", GROUP="dialout"
Это позволит драйверу беспрепятственно обмениваться данными с терминалом.
Иногда Linux не видит устройство из-за неправильного режима работы самого терминала. Рекомендуется перевести терминал в режим CDC (Virtual Serial Port). Это делается через инженерное меню оборудования (обычно вход осуществляется через кнопку "F" или специальную комбинацию клавиш). Если терминал работает в проприетарном режиме USB, драйверы Linux могут его не распознать.
Если вы используете решение через HTTP-сервис (например, KkmServer), взаимодействие в 1С будет выглядеть примерно так. Рассмотрим пример функции инициализации оплаты:
Функция ВыполнитьОплатуНаТерминале(СуммаЧека)
// Подготовка структуры запроса к Middleware
Запрос = Новый Структура;
Запрос.Вставить("Command", "Pay");
Запрос.Вставить("Amount", СуммаЧека);
Запрос.Вставить("TerminalType", "INPAS");
// Сериализация в JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Запрос);
СтрокаЗапроса = ЗаписьJSON.Закрыть();
// Отправка HTTP-запроса к локальному сервису
HTTPСоединение = Новый HTTPСоединение("127.0.0.1", 5893);
HTTPЗапрос = Новый HTTPЗапрос("/Execute");
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаЗапроса);
Попытка
Ответ = HTTPСоединение.ОтправитьДляОбъекта(HTTPЗапрос);
Результат = Ответ.ПолучитьТелоКакСтроку();
// Разбор ответа терминала...
Возврат Результат;
Исключение
Сообщить("Ошибка связи с платежным терминалом: " + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
КонецФункции
Использование подобных микросервисных подходов позволяет полностью абстрагироваться от операционной системы и использовать одни и те же механизмы 1С как в Windows, так и в Linux.
Подведем итог нашему анализу. Для успешного подключения INPAS на Linux у вас есть три основных пути:
.so. Требует плотной работы с техподдержкой банка ВТБ или INPAS для получения дистрибутивов и паролей к ним.Помните: работа с эквайрингом на Linux требует внимательного отношения к правам доступа на файлы устройств в директории /dev/. Всегда начинайте диагностику с проверки прав доступа и видимости устройства через команду lsusb.