Столкнулся на днях с очень интересной задачей, на работе, мною же, внедрялась Система Быстрых Платежей по QR коду.
![](https://habrastorage.org/getpro/habr/upload_files/2c9/62b/28d/2c962b28dc7ef5be9668a65d4148fea6.jpg)
Задача не сложная, у банков представлены достаточно удобные API для интеграций и собственно первый этап интеграции, с самописной CRM системой, работающей на web сервере – прошел гладко и быстро.
Работая в браузере можно было легко сформировать QR код и отправить его клиенту для последующей оплаты или показать в окошке на новой вкладке, как удобно…
![](https://habrastorage.org/getpro/habr/upload_files/cb8/697/190/cb869719098dec7d30502597d70017a7.jpg)
Но как оказалось это не слишком удобно и есть специальные девайсы – дисплеи для вывода именно QR кода.
![](https://habrastorage.org/getpro/habr/upload_files/6f7/041/dab/6f7041dabf7e540f3ae50640d56a95ea.jpg)
Собственно, не раздумывая был заказан один такой дисплей для интеграции в CRM и упрощения действий для менеджеров, ну и конечно же большего удобства клиентов.
Буквально через 3 дня курьер принес посылку с заказанным дисплеем (в интернете не так много контор которые предлагают подобное решение) и вот этот чудо девайс на рабочем столе.
![](https://habrastorage.org/getpro/habr/upload_files/2d2/97e/a3d/2d297ea3d0aaeeb6b0880b693f0320db.jpg)
Далее при распаковке посылки оказалось, что кроме самого дисплея и пупырки в которую он был упакован, больше ничего не было, от слова совсем, ни драйверов, ни инструкций, ничего, даже гарантийного талона, только талон на доставку…
После переписки с менеджерами, где был куплен сей девайс, на почту прилетело письмо с краткой инструкцией:
![](https://habrastorage.org/getpro/habr/upload_files/bbf/049/5d8/bbf0495d8edb9503b7337e206118481f.jpg)
Нужный драйвер был найден на Github (STM32 Virtual COM Port Driver)
А дальше в папочке лежал текстовый файл с примером команд и программка (Terminal v1.9b by Bray) для проверки что сие чудо работает.
![](https://habrastorage.org/getpro/habr/upload_files/1ee/9a0/6c8/1ee9a06c8fefe423098ef57fc9182527.jpg)
На законный вопрос о существовании какого-либо API или приложения для интеграции был следующий ответ:
![](https://habrastorage.org/getpro/habr/upload_files/a41/033/6dd/a410336dd2347f36d24c45c7f6bb818f.jpg)
Достаточно странный ответ для компании, которая продает не запчасти для последующего самостоятельного сбора, а готовый продукт, продает, по сути, полурабочий девайс, вокруг которого нужны еще танцы с бубном чтобы он заработал. Хотя еще более интересно посмотреть на «ПО которое будет работать с банками с внешним API» …
Но делать нечего, надо как-то интегрировать, что-то придумывать.
Набор команд у девайса не большой:
[Q]Вывод QR кода
[QL]Вывод QR кода с логотипом
[CQ]Стирание QR кода с экрана
[CQL]Стирание QR кода с экрана без стирания логотипа
[T1]Вывод текста в верхней зоне экрана над QR кодом
[T2]Вывод текста в нижней зоне экрана под QR кодом
[OFF]Выключение экрана
Поддерживает UTF-8, команда должна завершаться переводом строки.
После изучения списка команд, тестового формирования QR кода, начались поиски каких-либо решений на просторе интернета.
![](https://habrastorage.org/getpro/habr/upload_files/92f/712/d03/92f712d03cb884dd749be362de9f21f6.jpg)
Основная сложность заключалась в том, что девайс подключен к компьютеру по USB, а менеджеры работают в CRM системе через браузер. И как организовать связь между ними сходу мыслей не было.
На хабре нашел статью про возможность подключения к COM порту у браузера Chrome, но в последствии оказалось, что там есть возможность только читать с COM порта, а тут задача именно отправлять команды.
В общем и целом, интеграция зашла в тупик, не понятно, что делать и с какой стороны подходить.
К счастью, в голове вовремя проскользнула мысль про XMLHttpRequest и кроссдоменную работу.
Быстро была сверстана страничка для теста, на компьютере включен XAMPP и простенький PHP код который должен был получать POST запрос с параметрами, после чего создавался текстовый файл и уже после этого PHP запускал BAT файл который посылал команду в COM порт.
![](https://habrastorage.org/getpro/habr/upload_files/e50/7df/244/e507df24422522e6600314372e99e7d2.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/aa0/3d4/0d1/aa03d40d173b30d81545f7e777968824.jpg)
На удивление все сработало, на дисплее появилось заветное сообщение!
На самом деле на этом можно было бы и остановиться, на каждой машине тихонечко поднять локальный сервер XAMPP, добавить в автозагрузку службы и в принципе все бы работало, но внутренняя тяга к максимальному удобству заставила подумать еще чуть-чуть и найти более красивое решение.
К сожалению, последний раз с программированием именно для windows я сталкивался больше 15 лет назад, поэтому пришлось читать и вспоминать самые азы, благо не все забыто и вспомнить получилось.
![](https://habrastorage.org/getpro/habr/upload_files/2e4/c79/044/2e4c79044a58aeb8866f0cb33f6ef937.jpg)
Приложение, выполняет те же функции, как и сервер XAMPP – просто слушает на локальном хосте 80 порт, создается небольшой сервер, но уже без всяких BAT файлов отправляет нужные команды в COM порт, дисплей работает…
Конечно, там еще есть очень много к чему приложить руки, но данное решение лично мне нравится гораздо больше, оно более лаконично.
Если вдруг кто-то знает еще варианты как решить проблему интеграции браузера и COM порта, напишите пожалуйста, буду благодарен.