configurar webserver para escutar requisições http

REST

API

Delphi

14/12/2018

boa noite meus amigos, meu problema e o seguinte :
preciso ler a informação que vem de uma catraca controlid, consigo fazer toda a comunicação com a catraca via restjson usando idttp indy, logo, libero acesso e etc, o problema esta quando preciso receber oque vem da catraca sem que eu solicite, ex : o usuario coloca a digital no equipamento e eu preciso que o webserver receba o json que vem da catraca via http, fiz todos os passos abaixo indicado pelo o suporte do fabricante e tudo correu bem e os comandos foram executados sem erro algum, porem quando coloca a digital na catraca o webserver que fiz usando idttpserver nao recebe nada no ip e porta expecifica vindo da catraca e se tento enviar algo pela rede no ip e porta do webserver ele responde perfeitamente, por favor se alguem puder me ajudar a terminar de configurar o webserver, acho q não falta muito e o cliente ja perdeu a paciencia..., segue oque foi feito de acordo com o fabricante :

O fluxo é o seguinte:

Realizar o login no equipamento para obter uma sessão;
lJSO := SO('{"login": "admin", "password": "admin"}');
lResponse := IdHTTP1.Post('http://192.168.001.171/login.fcgi', lRequest);

Criar um novo device que representará o servidor do equipamento. Referências: aqui e aqui (procurar 'devices'). Note que o campo 'public_key' deve ser qualquer texto em base64. Em Linux, pode-se gerar facilmente um através do comando: echo -n chave_secreta | base64
lJSO := SO('{ object: "devices", values: [{id: 3333, name: "clube_server", ip: "192.168.1.100:8080", public_key:"Y2hhdmVfc2VjcmV0YQ=="}] })}');
lResponse := IdHTTP1.Post('http://192.168.001.171/create_objects.fcgi?session='+trim(edit1.text),lRequest);


Modificar a configuração 'server_id' do objeto 'online_client' para o id do device cadastrado na etapa anterior. Exemplo :
lJSO := SO('{ online_client: {server_id: "3333" } }');
lResponse := IdHTTP1.Post('http://192.168.001.171/set_configuration.fcgi?session='+trim(edit1.text),lRequest);


Modificar a configuração 'online' do objeto 'general' para 1
lJSO := SO('{ general: {online: "1"} }');
lResponse := IdHTTP1.Post('http://192.168.001.171/set_configuration.fcgi?session='+trim(edit1.text),lRequest);

Habilita a identificação Local:
lJSO := SO('{ general: {"local_identification": "1"} })}');

lResponse := IdHTTP1.Post('http://192.168.001.171/set_configuration.fcgi?session='+trim(edit1.text),lRequest);

todos os campos são executados sem problema, segue mais explicações do fabricante :

O Fluxo de comunicação entre o servidor (web server que escutará as requisições http que o equipamento para enviará, o verbo http é o POST) que você vai desenvolver e o equipamento é o seguinte:


Primeiro um pouco de teoria para você entender o fluxo do endpoint que você precisará implementar: new_user_identified.fcgi (https://www.controlid.com.br/suporte/api_idaccess_latest.html#50_events)


Usuário identificado

CLIENT -> SERVER

POST /new_user_identified.fcgi?session=gJgOHkblq69Vc3WLOOdUMvrf& HTTP/1.1

Host: 192.168.2.121

Accept: */*

Content-Type: application/x-www-form-urlencoded

Connection: Keep-Alive

Content-Length: 105


event=8&device_id=468507&identifier_id=1651076864&portal_id=1&user_id=1&user_name=Danilo&user_has_image=0


SERVER -> CLIENT

HTTP/1.1 200 OK

Content-Type: application/json; charset=utf-8

Transfer-Encoding: chunked

Date: Thu, 18 Feb 2016 16:20:45 GMT

Server: lighttpd/1.4.35


{"result":{"event":6,"user_id":1,"user_name":"João","user_image":false,"portal_id":5,"actions":[]}}



Usuário não identificado

CLIENT -> SERVER

POST /new_user_identified.fcgi?session=gJgOHkblq69Vc3WLOOdUMvrf& HTTP/1.1

Host: 192.168.2.121

Accept: */*

Content-Type: application/x-www-form-urlencoded

Connection: Keep-Alive

Content-Length: 99


event=3&device_id=468507&identifier_id=1651076864&portal_id=0&user_id=0&user_name=&user_has_image=0


SERVER -> CLIENT

HTTP/1.1 200 OK

Content-Type: application/json; charset=utf-8

Transfer-Encoding: chunked

Date: Thu, 18 Feb 2016 16:22:57 GMT

Server: lighttpd/1.4.35


{"result":{"event":3}}


no webser que criei configurei da seguinte forma :

IdHTTPServer1.Active := false;
IdHTTPServer1.defaultport:=8080;
IdHTTPServer1.Active := True;

no oncommandget coloquei o seguinte :

if (ARequestInfo.URI = '/api/notification/dao') or (ARequestInfo.URI = '/api/notification/dao') then begin
showmessage('eu to aqui');
end else begin
showmessage('chequei aqui 2');
end;


não coloquei nenhuma rotina de envio do retorno ainda pois estou tentando ver se esta chegando algo no ip/porta vindo da catraca e nao esta e se tento pela rede chega sem problema.

desde ja agradeço a quem puder me ajudar
Marcio Batista

Marcio Batista

Curtidas 0
POSTAR