Подключение эквайрингового терминала ПриватБанка к 1С по протоколу JSON

28.07.21

Интеграция - Эквайринг/ридер магнитных карт

Подключение Ээквайрингового терминала ПриватБанка к 1С по протоколу JSON с помощью WebSocket. Все тестирование проводил на 1С:Предприятие 8.3 (8.3.10.2561).

Скачать файлы

Наименование Файл Версия Размер
Подключение Эквайрингового терминала ПриватБанка по протоколу JSON:
.epf 10,58Kb
56
.epf 10,58Kb 56 Скачать

Доброго времени суток, уважаемые читатели!

Я хотел бы поделиться опытом совмещения 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);
	КонецЕсли;
	
КонецПроцедуры


 

ПриватБанк совмещение JSON WebSocket

См. также

Автоматическая обработка документов по банку при загрузке банковской выписки в 1С

Банковские операции Обмен с интернет-банком Эквайринг/ридер магнитных карт Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Устали вручную дозаполнять и корректировать документы по банку после загрузки банковской выписки? С помощью правил обработки банковской выписки вы сможете автоматически определять правильный вид хозяйственной операции, заполнять расшифровку, аналитику платежа и многое другое.

12000 руб.

21.03.2023    8148    29    12    

43

Подключение банковского терминала VeriFone VX820 к 1С 8.3

Эквайринг/ридер магнитных карт Платформа 1С v8.3 Россия Бесплатно (free)

Решение: Подключение банковского терминала VeriFone VX820 к 1с 8.3 х64. Сборка DualConnector.

10.11.2023    2720    orskavto    6    

4

Объединение выписок эквайринга (выписок СБП), БП 3.0

Банковские операции Эквайринг/ридер магнитных карт СБП. Оплата по QR-коду Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Абонемент ($m)

Расширение предназначено для тех случаев, когда в базу, через Клиент Банка, ежедневно загружается большое количество выписок банка по эквайрингу (выписок по СБП). Создается отдельный документ для каждого платежа СБП. И необходимо объединять все эти платежи в один документ

3 стартмани

26.09.2023    819    11    1395969    3    

3

Эквайринговые операции. УТ 11.5

Эквайринг/ридер магнитных карт Платформа 1С v8.3 1С:Управление торговлей 11 Россия Управленческий учет Абонемент ($m)

Отчет показывает количество эквайринговых операций за день.

1 стартмани

30.08.2023    787    4    sergik444    0    

2

Аварийное пробитие чека при ошибке эквайринга

Эквайринг/ридер магнитных карт Платформа 1С v8.3 1С:Розница 2 Абонемент ($m)

Данное расширение позволяет добавить в оплату платежной картой в случае ошибки на эквайринговом терминале.

1 стартмани

03.07.2023    1227    6    tatoshka0403    4    

5

Отражение комиссии банка за эквайринг в конфигурации 1С:УТ 11

Эквайринг/ридер магнитных карт Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Бесплатно (free)

В данной статье будет рассмотрен функционал отражения экварийнговых платежей и эквайринговой комиссии в розничной торговле. Демонстрация функционала будет проводиться в конфигурации 1С: Управление торговлей 11. В конфигурациях 1С: ЕRP и 1С: Комплексная автоматизация функционал аналогичный.

28.06.2023    5544    Koder_Line    1    

1
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. it.m.msv 18.10.21 15:45 Сейчас в теме
Добрый день. Сможете помочь с Подключение эквайрингового терминала ПриватБанка к BAS Розница, если да то как с Вами связаться?
2. Ditron 184 11.11.21 20:18 Сейчас в теме
(1)для подключения к типовым, как драйвер торгового оборудования, нужно писать компоненту, такой вариант (в публикации) хорош для самостоятельной интеграции, ну или переписывать типовые механизмы! Автору респект и спасибо за рекламу моего вебсокет-клиента ))). Но слишком много прослоек на пути к железяке: служба, компонента; там есть прямой интерфейс…
3. Timow 26.11.21 19:18 Сейчас в теме
(2) Подскажите как можно подключить без прослоек, какой интерфейс имеется ввиду?
4. Ditron 184 26.11.21 19:20 Сейчас в теме
(3)написать компоненту работающую напрямую по протоколу JSON
6. Kaldor_Drago 20.12.21 18:15 Сейчас в теме
(4) Железяка работает с байтами, а не с JSON. Прослойка собственно умеет парсить текст JSON в читаемый формат терминала (массив байт с окончанием байта 0x00) и наоборот. Ваша же компонента получает строку ответа от сервера, и вот вопрос что компонента делает с этими байтами?
7. Ditron 184 20.12.21 18:55 Сейчас в теме
(6)я вас огорчу, есть прошивка, которая парсит без "прослойки", отправляется строка json null терминированный прямо в порт...

(6)
Ваша же компонента получает строку ответа от сервера, и вот вопрос что компонента делает с этими байтами?
вот тут вообще не понятно о чем речь
8. Kaldor_Drago 20.12.21 20:36 Сейчас в теме
(7) Вы же сами написали что нужна другая компонента , работающая по протоколу json, тогда по какому протоколу работает ваша компонента? И вообще нет такого протокола, если мы говорим о прикладном уровне.

Вы имеете ввиду прошивку терминала, которая сама умеет преобразовать json текст?

В любом случае нужна компонента, можно получить демо версию вашей и какие у нее ограничения?
10. Ditron 184 20.12.21 21:20 Сейчас в теме
(8)я разве писал о том что не нужна или нужна компонента? Я написал что можно напрямую отправлять пакеты на устройство, минуя вебсокеты!
Компонента нужна не в любом случае! Например если вы собираетесь написать свой рмк, то БПО можно не использовать, и отправляйте себе на Здоровье в порт устройства и читайте из него прямо из 1с, обмен на терминалах всегда запрос-ответ(подтверждение-ответ). Если хотите подключать по БПО, тогда пишите или покупайте готовую. Что такое «протокол» мне известно).
И та компонента, которая указана в публикации (моя) никакого отношения к пос терминалам не имеет, это просто универсальный инструмент для обмена 1с-websocket… автор удачно прикрутил ее как промежуточное звено, но проблема как раз в том что при таком раскладе речи о БПО и быть не может)
У меня есть библиотека для пос по ecr bpos1, здесь же ведётся речь о другой версии прошивки Приватбанка
12. Kaldor_Drago 20.12.21 23:20 Сейчас в теме
(10) Не хотел умничать или упрекнуть в чем-то, просто хочу для себя понять так есть в планах реализовать похожее решение.

Не совсем понял что означает "БПО". Какой использовать механизм отправки данных прямо в порт устройства?
Приват дает разъяснение: "Библиотека JSON протокола вшита в ПО терминала. Работать с терминалом напрямую через WebSocket можно при любом подключении. При совмещении напрямую с терминалом - кассовое ПО работает по порту (при USB подключении) или по TCP. Там не нужен ни websocket ни http. JSON конвертируется в массив байтов, добавляется байт 0x00 и отправляется прямо в порт или по сети"
Насколько я понял можно подключаться напрямую к терминалу и отправлять запросы через сторонние библиотеки Windows по типу "MSCOMMLib.MSComm" для подключения через USB или использовать внешнюю компоненту для работы с WS при Ethernet подключении. И я так понял, что для Ethernet подключения ваша компонента также должна подойти как для подключения напрямую к терминалу так и для работы через промежуточное ПО "genericDriverJson", которое просто ретранслирует запрос к терминалу по средством WebSocket.

Вот собственно я и ищу готовую компоненту для реализации подключения через WebSocket для tcp протокола. Спасибо за содействие)
13. Ditron 184 21.12.21 08:29 Сейчас в теме
(12)капец, я об этом и написал изначально! БПО - библиотека подключаемого оборудования. Уже есть- тестировать не на чем(
19. just86 13.07.23 21:18 Сейчас в теме
(10)Как можно из 1с отправлять на порт устройства строку json null терминированный?
Я написал что можно напрямую отправлять пакеты на устройство, минуя вебсокеты! - как это сделать средствами 1с без ВК?
20. Ditron 184 13.07.23 22:06 Сейчас в теме
(19) если в ком порт то проблем нет «Строка» + Символ(0), а вот если на ip то без ВК никак
21. just86 17.07.23 11:07 Сейчас в теме
(20) ну мне кажется, что вся затея в том, чтоб от ком отказаться
5. z86 55 06.12.21 13:54 Сейчас в теме
а можна два термилала одновлемено подключить ?
9. Kaldor_Drago 20.12.21 20:46 Сейчас в теме
(5) В теории можно, только надо порты разные указать у терминалов и возможно каждый раз переподключаться к каждому из них или использовать два экземпляра компоненты для подключения.
А вот для подключения нескольких клиентов к терминалу этот метод не будет работать.
11. Ditron 184 20.12.21 21:24 Сейчас в теме
(5)установите несколько служб с разными параметрами подключения терминала и портов вебсокета, и подключайтесь на Здоровье, сколько терминалов столько и служб (серверов)
16. пользователь 12.02.22 14:46
Сообщение было скрыто модератором.
...
17. пользователь 31.08.22 17:34
Сообщение было скрыто модератором.
...
14. Kaldor_Drago 27.12.21 01:44 Сейчас в теме
Вопрос к автору, Версия 1 компоненты подойдет для реализации подлкючения, на нем велась реализация?
15. user1740641 08.02.22 16:27 Сейчас в теме
Добрый день! Подскажите можете ли вы помочь в подключении кассы IRAS A930 (PAX А930) к 1С:Розница (базовая) 2.3.10.43. Чтобы чеки печатались именно с 1с?

Прошу написать на электронный адрес natusik_mihalva@mail.ru
18. Bassgood 1425 20.06.23 22:17 Сейчас в теме
Разве JSON является протоколом???
Оставьте свое сообщение