Доброго времени суток, уважаемые читатели!
Я хотел бы поделиться опытом совмещения 1с из Эквайринговым терминалом ПриватБанка по протоколу JSON. При подключении магазинов использовались терминал Ingenico, Verifon и один магазин с терминалом PAX A930 из ОС Андроид.
Данный тип совмещения работает через WebSocket. WebSocket сервером выступает программка "genericDriverJson", которую предоставляет сам банк. В виде WebSocket клиента выступает 1с, из которой отправляются JSON запросы на WebSocket сервер, а он в свою очередь слушает порт (2000) терминала и отправляет/принимает с него информацию.
Для меня основной сложностью реализации данного совмещения оказалось, то что 1с не умеет напрямую работать с WebSocket и для этого необходимо использовать внешнюю компоненту. К счастью, мир оказался не без добрых людей и внешнюю компоненту я скачал из публикации:
Внешняя компонента для работы по Web-socket протоколу x32 x64 //infostart.ru/public/808432/
1. Как запустить работать WebSocket сервер?
Как я уже писал ранее этим сервером выступает программа genericDriverJson. Если Вы используете подключение терминала по USB, то необходимо использовать genericDriverJsonUSB, для Ethernet -> genericDriverJsonETH. Для отладки запускать программу лучше в командной строке под администратором. Для постоянной работы на торговой точке (ТТ) можно создать службу в ручную.
Чтоб создать службу необходимо взять программу из папки ...\genericDriverJsonETH_27012021 скопировать на компьютер ТТ. Я копировал в корень диска С. Дальше запустить командную строку от имени администратора и в ней выполнить команду
sc create genericDriverJsonETH binPath= "c:\genericDriverJsonETH -ip xxx.xxx.xxx.xxx" DisplayName= "genericDriverJsonETH" type= own start= auto
binPath это пусть к файлу, где вы его скопировали, ip - это айпи адрес терминала в сети.
Так же при подключении можно задать свой порт для терминала. Это необходимо если пользователи работают на удаленном рабочем сервере, а не каждый на своем компе.
c:\genericDriverJsonETH -ip xxx.xxx.xxx.xxx -wsp 3001
c:\genericDriverJsonETH -ip xxx.xxx.xxx.xxx -wsp 3002
Текст успешной работы сервера из командной строки
2. Как запустить работать WebSocket клиент
Клиентом выступает программа 1с, к которой подключается внешняя компонента для работы с WebSocket. Для этого была написана обработка. В обработке при открытии происходит подключение внешней компоненты и потом подключение WebSocket-а.
Внешний вид формы. При успешном подключении светится зеленым цветом "Терминал подключен", если подключение неудачное красным "Подключите терминал"
Обработку прикреплю в низу статьи, но без самой компоненты (внешнюю компоненту можете скачать в публикации по тексту выше) и добавить в ОбщийМакет.WebSocket.
Когда вводим сумму и нажимаем кнопку Оплата, формируется JSON запрос такого формата:
При успешной оплате или ошибке в оплате терминал отправляет ответ во ВнешнееСобытие 1с, который обрабатываем отдельно и приписываем логику дальнейшей работы.
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Источник = "WssExt2" Тогда
Если Событие = "Ошибка" Тогда
ИначеЕсли Событие = "Подключено" Тогда
Подключено = Истина;
ПоказатьОповещениеПользователя("Подключение", , "Подключено к " + Данные);
УстановитьДоступность();
ИначеЕсли Событие = "Отключено" Тогда
Подключено = Ложь;
ПоказатьОповещениеПользователя("Отключение", , "Отключено (код " + Данные + ")");
УстановитьДоступность();
ИначеЕсли Событие = "Сообщение" Тогда
Результат = Новый Структура("СоответствиеДанных, ОписаниеОшибки", Новый Структура, "");
//Данные = ПодтасоватьДанные(); // для тестирования оплаты без фактической оплаты по терминалу
РазобратьОтвет(Данные, Результат);
ОбработатьРезультат(Результат);
КонецЕсли;
КонецЕсли;
Если Подключено Тогда
Элементы.Статус.Заголовок = "Терминал подключен";
Элементы.Статус.ЦветТекста = Новый Цвет(50, 205, 50);
Иначе
Элементы.Статус.Заголовок = "Подключите терминал";
Элементы.Статус.ЦветТекста = Новый Цвет(255, 0, 0);
КонецЕсли;
КонецПроцедуры