BG Development


Страници: (2) [1] 2   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Сързване на ФП с уеб приложение
happybit
Публикувано на: 11-05-2019, 10:25
Quote Post



Име: Хепи Бит
Група: Потребител
Ранг: Новопостъпил

Мнения: 7
Регистриран на: 11.05.19



Здравйете,
Опитвам се да свържа Фискален Принтер Датекс (в момента тестовия е DP 150, но реалното устройство ще бъде FP-800) с уеб приложение.
Идеята е касиерката да продава артикулите през уебския интерфейс и да печата касовите бележки от там.
Опитвам се да свържа приложението с локалната машина, но не успявам да вдяна как точно да стане.
Знам, че може да се създават тектови файлове, който приложението да генерира и подава към локалната машина, а тя да създава файл-отговор и да го връща на сървъра. Това може да стане със софтуера на Датекс, обаче ключа, до колкото знам се заплаща, а не съм сигурна, че това е начин, по който ще се напорави връзката, за да поискам такъв ключ. Първият ми въпрос е дали има тестови вариант, в който да пробвам начинът с файлове или задължително е с ключа?
Друг вариант е да направя локално уеб приложение, което касиерките да достъпват през localhost/нещо_си и то да комуникира директно със серийния порт на машината. Там проблемът ми е достъпа до отдалечената БД (суперхостинг предлагат достъп само през OpenVPN и не съм сигурна дали ще стане).
Трети вариант е да направя локален рест сървис (имайки предвид, че никога не съм правила такъв) и да разменям комани за четене / запис между live приложението и локалното такова. За там гледах варианта node.js, но не знам дали е добро решение.
Дори да реша варианта с локално уеб приложение (втория вариант, не този с рест сървиса) и да измисля решение за връзката с БД, остава проблема как да се свържа със серийните портове. Уебските приложения са на PHP, а операционната система е Windows - няма читаво четене от порта.
Бихте ли ми дали някакви насоки - кой е най-удачния вариант? Моля, имайте предвид, че за първи път се налага да го правя и нямам представа как да стане.
Благодаря, предварително!
PMEmail Poster
Top
boxing
Публикувано на: 11-05-2019, 13:10
Quote Post



Име:
Група: Потребител
Ранг: Посетител

Мнения: 136
Регистриран на: 16.06.15



Един прост рест сървис ще ти свърши работа мисля, че каквото и да ползваш все ще го направиш.
PMEmail Poster
Top
!TuringComplete
Публикувано на: 11-05-2019, 13:17
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 19
Регистриран на: 28.02.19



FPrint е тази програма на Datecs, която замества директната комуникация със серииния порт с file i/o(командите имат подобен синтаксис на този от протокола на апарата, записват се заедно във файл и после в placeholder-и в самите команди FPrint записва отговора във файла). Има и команда за изпълнение на произволна "low-level" команда от протокола.

За да се ползва, трябва да се купи ключ(може би от порядъка на 50лв). Може без да въведеш ключ да се свържеш с апарата(т.е. да видиш, че няма да ти даде комуникационна грешка), но командите от файловете няма да се изпратят.

С локален рест сървис би се получило. Има и вариант да напишеш приложение, което потребителите да изтеглят и пускат на компютрите, свързани с апаратите. Приложението да работи постоянно и да инициира връзка към уеб сървъра ти(примерно с websocket), след което това локално приложение става медиатор между сървъра и касовия апарат.

Трябва само потребителите на приложението да си отбележат в профила примерно серииният номер на апарата. И като продадат нещо, сървъра изпраща командите към съответното локално приложение(всяко локално приложение се регистрира в сървъра чрез серииният номер на апарата, в случая с FPrint той може да се прочете от един конфигурационен файл).
PMEmail Poster
Top
thrawn
Публикувано на: 11-05-2019, 13:21
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2232
Регистриран на: 17.01.17



От всичко изписано до тук става ясно, че изобщо нямаш и идея какво се опитваш да направиш. Затова, най-удачно би било да ограничи максимално личното творчество. С други думи, опитай се да реализираш постановката с готови продукти.

Изборът на фпринт (софтуера на датекс) наистина изглежда най-удачен. Няма как да минете без ключ (то всъщност има, но това е друга тема) но самия ключ в момента е безплатен. Та няма да ви струва нищо да го получите.
Тук основния проблем ще е да направите трансферът на файлове между машините. Съдейки по въпросът, смятам че и това ще е по-добре да не го реализирате. Използвайте ftp/ssh за да монтиране локално директория от сървърът.
PMEmail Poster
Top
happybit
Публикувано на: 11-05-2019, 16:29
Quote Post



Име: Хепи Бит
Група: Потребител
Ранг: Новопостъпил

Мнения: 7
Регистриран на: 11.05.19



Така е, нямам идея какво правя, но за всичко си има първи път. А това е идеален начин да науча как става.

През почивните дни едва ли ще получим ключ от Датекс, затова мога поне да пробвам варианта с рест сървис.
Направих сървис - node.js rest api, което да обработва получена команда като post и да връща отговора. От страната на сайта имам PHP скрипт, който да създава командите и да обработва отговорите.
Остана ми само да направя връзката между двете - да изпращам командите през PHP скрипта.
Там обаче имам проблем - как да извикам локалния сървис? Да отворя websocket, curl или нещо друго? И не съм сигурна как да стане посочването на локалния адрес в скрипта на сървъра.
PMEmail Poster
Top
!TuringComplete
Публикувано на: 11-05-2019, 17:22
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 19
Регистриран на: 28.02.19



QUOTE (happybit @ 11-05-2019, 16:29)
Там обаче имам проблем - как да извикам локалния сървис? Да отворя websocket, curl или нещо друго? И не съм сигурна как да стане посочването на локалния адрес в скрипта на сървъра.

Когато потребителя кликне бутона, след който се изисква да се печата фискален бон, с javascript сигурно може да се направи AJAX request с URL http://localhost/path(така караш браузъра на потребителя да извика рест сървиса, работещ на компютъра му)

И когато в callback-а получиш отговора го пращаш на твоя сървър.

С jQuery:
CODE

$.ajax({
 data: {"fiscal device commands"},
 url: localhost:80/path,
 method: "POST",
 success: function( data ) {
   // call backend
 }
});


Това мнение е било редактирано от !TuringComplete на 11-05-2019, 17:27
PMEmail Poster
Top
Gamma Goblin
Публикувано на: 11-05-2019, 17:26
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2257
Регистриран на: 21.02.18



Сигурността на подобно решение е даже под нулата. Никакви портове не трябва да се отварят.


Това какво трябва да се направи силно зависи от това кой и как ще ползва твоята система. Ако искаш да л=получиш адекватни отговори ще трябва да дадеш повече информация. Някаква multi-tenant система ли е ? SaaS-че ? Или нещо за кварталния магазин ?


--------------------
https://www.rust-lang.org/
---
Хора, които са прекалено умни, за да се занимават с политика, са наказани да бъдат управлявани от глупаци.
---
PMEmail PosterUsers Website
Top
!TuringComplete
Публикувано на: 11-05-2019, 17:31
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 19
Регистриран на: 28.02.19



QUOTE (Gamma Goblin @ 11-05-2019, 17:26)
Сигурността на подобно решение е даже под нулата. Никакви портове не трябва да се отварят.


Това какво трябва да се направи силно зависи от това кой и как ще ползва твоята система. Ако искаш да л=получиш адекватни отговори ще трябва да дадеш повече информация. Някаква multi-tenant система ли е ? SaaS-че ? Или нещо за кварталния магазин ?

Затова може и с приложението - медиатор. Особено ако се повече клиентките компютри, и ако компютъра свързан с апарата е различен от този, с чиито браузър се ползва web app-a.
PMEmail Poster
Top
happybit
Публикувано на: 11-05-2019, 17:38
Quote Post



Име: Хепи Бит
Група: Потребител
Ранг: Новопостъпил

Мнения: 7
Регистриран на: 11.05.19



Компютърът е един, но не е този, на който е уеб сървъра. Уеб сървъра е на споделен хостинг, затова си мисля, че извикването при натискане на бутон (визирам линка, който да се извика - localhost) няма ли да търси ресур на сървъра, а не на локалната машина, на която е закачен фискалния принтер?
PMEmail Poster
Top
!TuringComplete
Публикувано на: 11-05-2019, 17:53
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 19
Регистриран на: 28.02.19



QUOTE (happybit @ 11-05-2019, 17:38)
Компютърът е един, но не е този, на който е уеб сървъра. Уеб сървъра е на споделен хостинг, затова си мисля, че извикването при натискане на бутон (визирам линка, който да се извика - localhost) няма ли да търси ресур на сървъра, а не на локалната машина, на която е закачен фискалния принтер?

Като потребителя натисне бутон, той може да се процесне от javascript-а, който се процесва от браузъра на потребителя. И в този javascript може да направиш AJAX рекуест към localhost:80 например. Тъй като е в контекста на браузъра на клиента, така ще извика локалният рест сървис. И после като получиш отговора от апарата може да направиш AJAX(или обикновен синхронен, зависи дали ще караш потребителя да чака за отговор от апарата) рекуест към уеб сървъра на приложението ти за да го обработиш.

Ако локалният ajax рекуест нарушава same-origin policy, ето и решения за това.

Това мнение е било редактирано от !TuringComplete на 11-05-2019, 17:57
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (2) [1] 2  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0