Подключение эквайринговых терминалов в конфигурациях 1С на обычных формах (в частности, 1С:Розница 1.0) часто вызывает затруднения из-за отсутствия универсального стандарта взаимодействия между 1С и банковским программным обеспечением. Разберем порядок действий при сопряжении терминала VeriFone VX520 с 1С, выясним причины ошибки «Ответ от терминала не был получен» и рассмотрим архитектуру работы с внешней обработкой обслуживания.
Специалисты поддержки банков поставляют терминал VeriFone VX520 с уникальной прошивкой и собственным протоколом связи. Использование стандартных протоколов вроде EFTPOS или стандартных драйверов из Библиотеки подключаемого оборудования (БПО) со сторонней прошивкой приводит к неработоспособности устройства. Проанализируем ключевые факторы, препятствующие корректной интеграции:
posapi.dll, Arcus2 или DualConnector). Стандартные обработки 1С не могут отправить команду терминалу без использования соответствующего COM-объекта.regsvr32.COM12). Мультипротокольные библиотеки корректно работают с портами в диапазоне от COM1 до COM9. Изменить номер порта необходимо вручную в Диспетчере устройств.В отличие от управляемого приложения, где применяется механизм БПО, в обычных формах 1С (Розница 1.0) связь с эквайринговым терминалом организуется через внешние обработки обслуживания торгового оборудования (файлы с расширением .epf). Обработка размещается в справочнике ОбработкиОбслуживанияТорговогоОборудования и выступает мостом между событиями 1С и библиотекой банка.
Рассмотрим по шагам процесс подготовки и подключения оборудования:
posapi.dll) в командной строке от имени Администратора:
regsvr32 "C:\BankPOS\posapi.dll"
Разберем структуру ключевых функций, которые должна содержать внешняя обработка обслуживания эквайринга для работы с COM-объектом банка.
При инициализации устройства выполняется создание COM-объекта и установка параметров связи (номер порта, скорость, таймаут ожидания):
Функция ПодключитьОборудование(ОбъектДрайвера, ПараметрыПодключения) Экспорт
Перем Результат;
Попытка
// Создаем COM-объект банковской библиотеки
ОбъектДрайвера = Новый COMОбъект("PosApi.TerminalEngine");
ОбъектДрайвера.ComPort = ПараметрыПодключения.Порт;
ОбъектДрайвера.Timeout = 60; // Таймаут ожидания ответа (в секундах)
Результат = ОбъектДрайвера.InitTerminal();
Если НЕ Результат Тогда
Возврат Ложь;
КонецЕсли;
Возврат Истина;
Исключение
Сообщить("Ошибка инициализации COM-объекта эквайринга: " + ОписаниеОшибки());
Возврат Ложь;
КонецПопытки;
КонецФункции
Выполнение оплаты по платежной карте требует передачи суммы операции и кода валюты в банковский модуль:
Функция ОплатитьОпределеннуюСумму(ОбъектДрайвера, Сумма, НомерЧека, КодОтвета, ТекстОшибки) Экспорт
Попытка
// Запуск транзакции оплаты
ОбъектДрайвера.Amount = Сумма;
ОбъектДрайвера.InvoiceNumber = НомерЧека;
КодРезультата = ОбъектДрайвера.ProcessPayment();
Если КодРезультата = 0 Тогда
КодОтвета = ОбъектДрайвера.AuthCode;
Возврат Истина;
Иначе
ТекстОшибки = ОбъектДрайвера.GetLastErrorDescription();
Возврат Ложь;
КонецЕсли;
Исключение
ТекстОшибки = ОписаниеОшибки();
Возврат Ложь;
КонецПопытки;
КонецФункции
Завершение смены и сверка итогов (закрытие эквайринговой смены) вызывают соответствующий метод банковского ядра для печати итогового чека:
Функция ЗакрытьСмену(ОбъектДрайвера, ТекстОшибки) Экспорт
Попытка
КодРезультата = ОбъектДрайвера.CloseDay();
Если КодРезультата <> 0 Тогда
ТекстОшибки = ОбъектДрайвера.GetLastErrorDescription();
Возврат Ложь;
КонецЕсли;
Возврат Истина;
Исключение
ТекстОшибки = ОписаниеОшибки();
Возврат Ложь;
КонецПопытки;
КонецФункции
Проанализируем порядок действий при проведении тестовых платежей:
posapi.dll пишет сервисные журналы операций (log-файлы).