Столкнулся на днях с очень интересной задачей, на работе, мною же, внедрялась Система Быстрых Платежей по QR коду. Задача не сложная, у банков представлены достаточно удобные API для интеграций и собственно первый этап интеграции, с самописной CRM системой, работающей на web сервере – прошел гладко и быстро. Работая в браузере можно было легко сформировать QR код и отправить его клиенту для последующей оплаты или показать в окошке на новой вкладке, как удобно… Но как оказалось это не слишком удобно и есть специальные девайсы – дисплеи для вывода именно QR кода. Собственно, не раздумывая был заказан один такой дисплей для интеграции в CRM и упрощения действий для менеджеров, ну и конечно же большего удобства клиентов. Буквально через 3 дня курьер принес посылку с заказанным дисплеем (в интернете не так много контор которые предлагают подобное решение) и вот этот чудо девайс на рабочем столе. Далее при распаковке посылки оказалось, что кроме самого дисплея и пупырки в которую он был упакован, больше ничего не было, от слова совсем, ни драйверов, ни инструкций, ничего, даже гарантийного талона, только талон на доставку… После переписки с менеджерами, где был куплен сей девайс, на почту прилетело письмо с краткой инструкцией: Нужный драйвер был найден на Github (STM32 Virtual COM Port Driver) А дальше в папочке лежал текстовый файл с примером команд и программка (Terminal v1.9b by Bray) для проверки что сие чудо работает. На законный вопрос о существовании какого-либо API или приложения для интеграции был следующий ответ: Достаточно странный ответ для компании, которая продает не запчасти для последующего самостоятельного сбора, а готовый продукт, продает, по сути, полурабочий девайс, вокруг которого нужны еще танцы с бубном чтобы он заработал. Хотя еще более интересно посмотреть на «ПО которое будет работать с банками с внешним API» … Но делать нечего, надо как-то интегрировать, что-то придумывать. Набор команд у девайса не большой: [Q]Вывод QR кода [QL]Вывод QR кода с логотипом [CQ]Стирание QR кода с экрана [CQL]Стирание QR кода с экрана без стирания логотипа [T1]Вывод текста в верхней зоне экрана над QR кодом [T2]Вывод текста в нижней зоне экрана под QR кодом [OFF]Выключение экрана Поддерживает UTF-8, команда должна завершаться переводом строки. После изучения списка команд, тестового формирования QR кода, начались поиски каких-либо решений на просторе интернета. Основная сложность заключалась в том, что девайс подключен к компьютеру по USB, а менеджеры работают в CRM системе через браузер. И как организовать связь между ними сходу мыслей не было. На хабре нашел статью про возможность подключения к COM порту у браузера Chrome, но в последствии оказалось, что там есть возможность только читать с COM порта, а тут задача именно отправлять команды. В общем и целом, интеграция зашла в тупик, не понятно, что делать и с какой стороны подходить. К счастью, в голове вовремя проскользнула мысль про XMLHttpRequest и кроссдоменную работу. Быстро была сверстана страничка для теста, на компьютере включен XAMPP и простенький PHP код который должен был получать POST запрос с параметрами, после чего создавался текстовый файл и уже после этого PHP запускал BAT файл который посылал команду в COM порт. На удивление все сработало, на дисплее появилось заветное сообщение! На самом деле на этом можно было бы и остановиться, на каждой машине тихонечко поднять локальный сервер XAMPP, добавить в автозагрузку службы и в принципе все бы работало, но внутренняя тяга к максимальному удобству заставила подумать еще чуть-чуть и найти более красивое решение. К сожалению, последний раз с программированием именно для windows я сталкивался больше 15 лет назад, поэтому пришлось читать и вспоминать самые азы, благо не все забыто и вспомнить получилось. Приложение, выполняет те же функции, как и сервер XAMPP – просто слушает на локальном хосте 80 порт, создается небольшой сервер, но уже без всяких BAT файлов отправляет нужные команды в COM порт, дисплей работает… Конечно, там еще есть очень много к чему приложить руки, но данное решение лично мне нравится гораздо больше, оно более лаконично. Если вдруг кто-то знает еще варианты как решить проблему интеграции браузера и COM порта, напишите пожалуйста, буду благодарен.