При переходе на операционные системы семейства Linux (будь то дистрибутивы на базе RPM, такие как RedOS или AlmaLinux, или на базе DEB, включая особенности настройки Astra Linux с установкой необходимых зависимостей) системные администраторы и разработчики 1С часто сталкиваются с проблемой подключения эквайринга. Одной из самых сложных задач является запуск терминалов Verifone или Pax под управлением ПО INPAS (UNIPOS). Рассмотрим подробнее, почему стандартные механизмы 1С дают сбой и как реализовать рабочую схему интеграции.
Типичная ситуация: вы используете платформу 8.3.22 и выше, устанавливаете драйвер «ИНПАС:Эквайринговые терминалы UNIPOS» через интерфейс «Подключаемое оборудование», но система выдает ошибку: «Внешняя компонента для используемого клиентского приложения отсутствует». При этом аналогичные драйверы для Сбербанка или Ingenico подключаются мгновенно.
Выясним причину этого поведения. Библиотека подключаемого оборудования (БПО) хранит драйверы в виде ZIP-архивов в общих макетах конфигурации. Если мы разберем макет ДрайверИНПАСЭквайринговыеТерминалы, то увидим, что внутри архива содержатся только файлы формата .dll (для Windows x86 и x64). Скомпилированной библиотеки формата .so для Linux-архитектуры в составе типовой БПО на данный момент нет. Именно поэтому 1С «не видит» компоненту: она физически не находит исполняемый код для текущей ОС внутри макета драйвера.
Посмотрим на современное решение от компании INPAS. Вместо использования классической внешней компоненты a_inpasDC1c83.dll, рекомендуется перейти на использование DualConnector 2.0. Это решение работает как фоновый сервис, написанный на Java, и не зависит от графической оболочки или специфики клиентского приложения 1С.
Разберем по шагам логику этого метода:
9015.localhost:9015. В этом процессе вам может пригодиться быстрая организация HTTP-сервиса, позволяющая создать универсальный модуль для взаимодействия с API.Проанализируем пример формирования структуры запроса на оплату, который необходимо отправить из 1С:
// Пример формирования JSON для DualConnector 2.0
ДанныеЗапроса = Новый Структура;
ДанныеЗапроса.Вставить("Command", "Sale"); // Операция оплаты
ДанныеЗапроса.Вставить("Amount", СуммаКопейки); // Сумма в копейках
ДанныеЗапроса.Вставить("CurrencyCode", "643");
Запрос = Новый HTTPЗапрос("/");
Запрос.УстановитьТелоИзСтроки(ДанныеИзJSON(ДанныеЗапроса));
Соединение = Новый HTTPСоединение("127.0.0.1", 9015);
Ответ = Соединение.ОтправитьДляОбъекта(Запрос);
Преимущество этого метода: вам не нужно бороться с регистрацией внешних компонент Native API, так как взаимодействие идет на уровне сетевых протоколов.
Если интеграция через HTTP кажется избыточной, рассмотрим более простой, но менее элегантный способ — использование утилиты dc_console, которая часто поставляется в дистрибутивах SmartSale для Linux. Выясним, как организовать обмен данными через внешние файлы.
Схема работы будет следующей:
ЗапуститьПриложение вызывается консольный скрипт.dc_console, передавая параметры.Пример вызова внешней утилиты из кода 1С:
КомандаЗапуска = "/opt/inpas/dc_console -o Sale -a " + Строка(Сумма);
ЗапуститьПриложение(КомандаЗапуска, , Истина, КодВозврата);
Если КодВозврата = 0 Тогда
// Читаем файл ответа и обрабатываем результат
ОбработатьРезультатОплаты();
КонецЕсли;
Важно помнить, что при использовании ЗапуститьПриложение в Linux необходимо следить за правами доступа пользователя, под которым запущен rphost или клиент 1С, к исполняемым файлам драйвера.
Разберем ситуацию, когда времени на разработку собственной «обертки» нет. В сообществе 1С-разработчиков популярным решением является KKMServer. Это специализированное ПО, которое имеет нативную поддержку Linux и умеет работать с эквайрингом ИНПАС.
Проанализируем плюсы этого подхода:
KKMServer через единый API (обычно HTTP), что делает код независимым от модели терминала.Хотя это решение является платным, оно часто обходится дешевле, чем часы работы программиста по созданию и поддержке собственного Native API моста.
Если вы скомпилировали исходные коды драйвера от ИНПАС под Linux с помощью make и make install, вы получили системные библиотеки (например, .so). Однако 1С не может вызвать их функции напрямую, если они не соответствуют стандарту 1C:Native API.
Рассмотрим подробнее, что для этого требуется. Для подготовки среды разработки вам могут понадобиться скрипты для настройки окружения gcc, которые помогут правильно собрать компоненту под Linux. Вам необходимо написать на C++ небольшую библиотеку-посредник, которая будет:
IComponentBase, понятный для 1С. В качестве примера реализации интерфейса можно изучить, как устроена внешняя компонента Native для отслеживания нажатия клавиш.Оплатить()) в вызовы функций из скомпилированной системной библиотеки ИНПАС.Этот путь самый трудозатратный и требует навыков системного программирования. Ориентиром качества может служить внешняя компонента для потокового сжатия данных, также поддерживающая Linux и работающая на низком уровне. Подобный подход позволяет получить максимально «бесшовную» интеграцию.
На сегодняшний день прямого пути подключения эквайринга ИНПАС в 1С под Linux «из коробки» (через кнопку «Установить драйвер» в БПО) не существует из-за отсутствия Linux-библиотек в макетах. Наиболее стабильным и современным способом является использование DualConnector 2.0 через HTTP/JSON. Если же требуется максимально быстрое решение с поддержкой множества устройств, стоит обратить внимание на KKMServer.
В качестве долгосрочной стратегии, если вы только планируете закупку оборудования, рекомендуется выбирать терминалы с поддержкой протоколов Sberbank или Ingenico, так как их компоненты уже включены в состав БПО для Linux и работают без дополнительных манипуляций.