В современной розничной торговле автоматизация приема платежей является критически важной задачей. Однако при использовании старых конфигураций, таких как 1С:Управление торговлей 10.3, системные администраторы и программисты часто сталкиваются с проблемой отсутствия штатных драйверов для нового оборудования — для этого есть обновление драйверов эквайринга для 1С:УТ 10.3. Одним из таких устройств является терминал Unitodi P8 Bio, который активно предлагает «Альфа-Банк». Рассмотрим подробно, как «подружить» это «чудо инженерной мысли» со старой доброй «десяткой».
Терминалы Unitodi работают через программное обеспечение-прослойку, которое называется PosConnector (разработка PBF Group). В отличие от более привычных терминалов PAX или Verifone, которые используют другие, более распространенные протоколы вроде DualConnector или Arcus, Unitodi требует регистрации собственных COM-компонент. Главная сложность заключается в том, что в типовой поставке 1С:УТ 10.3 нет встроенного драйвера именно под этот бренд, так как он появился значительно позже выхода конфигурации. В то время как для других систем давно существует, например, обработка обслуживания ИНПАС: UNIPOS, для Unitodi часто приходится искать индивидуальные решения.
Проанализируем основные этапы настройки, которые нам предстоит выполнить:
Прежде чем приступать к коду в 1С, необходимо убедиться, что само устройство корректно определяется операционной системой. Рассмотрим важный нюанс, связанный с разрядностью. Поскольку 1С:Предприятие 8.3 в режиме обычных форм (как и 8.2) чаще всего используется в 32-битном варианте (x86), драйверы терминала также должны быть 32-битными.
Важно: При установке PosConnector специалистом банка обязательно требуйте установку именно 32-битной версии библиотеки posconlib.dll. Если будет установлена только 64-битная версия, 1С просто не сможет создать COM-объект, и вы получите ошибку «Класс не зарегистрирован». Подробно вопросы регистрации 32-битных библиотек в среде x64 и решения проблем с COM-соединением описаны в отдельном руководстве.
Для регистрации библиотеки вручную используйте командную строку от имени администратора:
C:\Windows\SysWOW64\regsvr32.exe "C:\PathToPosConnector\posconlib.dll"
Если штатной обработки обслуживания найти не удалось, мы можем реализовать обмен данными напрямую. Технология прямой работы с COM-объектами позволяет гибко управлять взаимодействием. Для этого используются два основных COM-объекта: пакет данных (SAPacket) и интерфейс соединения (POSConnectorInterface).
Рассмотрим пример кода для выполнения простейшей операции — получения краткого отчета (X-отчет). Этот код можно разместить в модуле формы обработки обслуживания или непосредственно в документе «Чек ККМ»:
// Создаем объекты для связи
Попытка
Запрос = ПолучитьCOMОбъект("", "SAPacket-posconlib");
Ответ = ПолучитьCOMОбъект("", "SAPacket-posconlib");
Соединение = ПолучитьCOMОбъект("", "POSConnectorInterface-posconlib");
Исключение
Сообщить("Не удалось инициализировать компоненты PosConnector. Проверьте регистрацию DLL.");
Возврат;
КонецПопытки;
// Настраиваем параметры запроса
Запрос.CurrencyCode = "643"; // Код рубля
Запрос.OperationCode = 63; // Код операции (63 - X-отчет, 1 - Оплата, 2 - Возврат)
Запрос.CommandMode2 = 20; // Режим (20 - краткий отчет)
// Выполняем обмен данными с терминалом (таймаут 180 секунд)
Результат = Соединение.Exchange(Запрос, Ответ, 1800);
Если Результат > 0 Тогда
ТекстОшибки = Соединение.ErrorDescription;
Сообщить("Ошибка связи: " + ТекстОшибки);
Иначе
// Проверяем статус выполнения операции на стороне банка
Если Ответ.Status = 1 Тогда
СлипЧек = Ответ.ReceiptData;
Сообщить("Операция успешна. Текст чека:");
Сообщить(СлипЧек);
Иначе
Сообщить("Банк отклонил операцию. Статус: " + Ответ.Status);
КонецЕсли;
КонецЕсли;
При интеграции оплаты нам необходимо передавать сумму. Проанализируем, как изменяется логика для проведения платежа. В объекте SAPacket сумма обычно передается в копейках (целое число).
Ниже приведен список основных кодов операций (OperationCode), которые вам понадобятся:
Рассмотрим пример обработки различных статусов ответа терминала, чтобы пользователь понимал, что пошло не так. Выясним причину отказа, анализируя свойство Status объекта ответа:
Статус = ПакетОтвета.Status;
Если Статус = 1 Тогда
// Все хорошо
ИначеЕсли Статус = 15 Тогда
ОписаниеОшибки = "В операции отказано банком (Insufficient funds / Другое)";
ИначеЕсли Статус = 53 Тогда
ОписаниеОшибки = "Операция прервана пользователем (нажата кнопка Отмена)";
ИначеЕсли Статус = 34 Тогда
ОписаниеОшибки = "Ошибка связи: нет соединения с хостом банка";
Иначе
ОписаниеОшибки = "Неизвестная ошибка терминала. Код статуса: " + Статус;
КонецЕсли;
Если ручное написание кода кажется слишком трудоемким, можно использовать готовую обработку обслуживания «ПБФ:Эквайринговые терминалы» для УТ 10.х. Она изначально разрабатывалась для БПО (Библиотеки подключаемого оборудования) в новых конфигурациях, но существуют адаптированные версии для УТ 10.3.
Проанализируем преимущества использования обработки:
ОплатитьПлатежнойКартой, ВернутьПлатежПоПлатежнойКарте).Часто 1С:УТ 10.3 развернута на терминальном сервере. В этом случае работа с COM-объектом усложняется, и здесь поможет подробное руководство по настройке оборудования в RDP. Рассмотрим два варианта решения:
Подключение Unitodi P8 Bio к старым конфигурациям 1С вполне реально, несмотря на отсутствие официальной поддержки «из коробки». Главное — помнить о 32-битной архитектуре 1С и использовать правильные идентификаторы COM-объектов (SAPacket-posconlib и POSConnectorInterface-posconlib).
Если же процесс интеграции заходит в тупик из-за специфических проблем с драйверами банка, рассмотрите возможность замены терминала на модели PAX (например, Q25 или S200) — для этого подойдёт интеграция безналичной оплаты и СБП для 1С:УТ 10.3. Они используют более старый и распространенный драйвер DualConnector, который гарантированно работает в УТ 10.3 без дополнительных доработок кода. Также в качестве альтернативы можно рассмотреть терминалы TACTILION или современные решения, для которых доступна обработка обслуживания «Эквайринговые терминалы Сбербанк 2.Х», а также специализированная API-интеграция с терминалами Сбербанка Kozen.