Как с удаленного сервера отправить запрос на POS терминал?
У нас есть:
Рабочий ноутбук
POS терминал (подключенный по WIFI к роутеру)
сервер, на котором ведется учет (VDS с системой учета)
Задача:
Отправить GET запрос с сервера на ""ЛОКАЛЬНЫЙ"" IP адрес клиента (REST API POS терминала)
Получить JSON ответ
Пробовал проксировать на стороне сервера, но тогда он все ровно ищет локальный IP на стороне сервера, а он находится на стороне клиента
Пробовал реализацию через JS, но тогда спотыкаюсь об CORS политику
Если бы терминал был сервером, я бы дал доступ домену, с которого идет запрос, но сейчас ах и увы, целый день пытаюсь найти ответ
Факты:
1. Локально API работает просто отлично
2. POS терминал может принимать как защищенное (SSL - HTTPS) соединение, так и не защищенное (HTTP)
пробовал настроить OpenVPN, не получилось, но возможно где то ошибся
у нас 140 точек по стране, и много где установлены самые простые роутеры (от мобильного оператора), и если доступ к компу через VPN получится поставить, то сам роутер может не дать доступ на POS терминал, ток если через LAN напрямую подключить к ноутбуку...как вариант
Но мне тут предложили написать Desktop клиент, который будет принимать запрос от сервера и направлять его на POS терминал и отправлять обратно...
ну, если вы любите создавать сложности и героически их преодолевать.
Надо разобраться с парком роутеров. Роутер выступает клиентом VPN и соединяется на сервер, возможно дополнительно проброс порта с роутера ип впн соединения на ип POS терминала. Сервер видит все соединения по VPN и шлет запросы через них. Серверную чать VPN выбирают от того что умеют большинство роутеров.
Также надо уточнить возможности POS терминала - возможно он сам может быть инициатором HTTPS Websocket соединения. Тогда на сервере делается соответсвующий веб сервис многопоточный с менеджером очередей: RabbitMQ, MQTT. Возможно POS сам уже умеет MQTT.
Думаю самым адаптивным решение будет все таки создание Desktop приложения, которое будет кидать запросы на сервер через WS или HTTP и при их наличии перенаправлять их на POS терминал, получать ответ и посредством REST API отправлять обратно на сервер