CONSUMIR API (WEBSERVICE POST)

 Tópico anterior Próximo tópico Novo tópico

CONSUMIR API (WEBSERVICE POST)

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#487005 - 07/02/2019 14:50:55

FUTURA
.
Cadast. em:Maio/2004


Última edição em 07/02/2019 15:26:31 por FUTURA

Pessoal, tenho um aplicativo em vb.net que controla as emissões de documentos fiscais ( Nfe, CTe, MDFe), nele faço referência aos web-services, e a partir dai, é só usar as propriedades passando as informações. A questão é que surgiu um trabalho, que é a averbação do seguro, é feita por API (webservice post), pelo menos assim esta descrito no manual. Como não tenho conhecimento de uso no dia a dia, pensei que fosse igual ao esquema dos documentos fiscais, mas não é, e apesar de parecer ser fácil, não consigo montar. Alguém tem uma dica para que eu consiga dar um start ?

O que eu entendi, é que se faz uma conexão passando user e senha, tendo o retorno de sucesso, em seguida, envia o xml para averbação, que devolve um protocolo, e através deste, consulto o número da averbação que foi gerado. Enxergo o processo como se estivesse gerando um DFe, porém não é..




Resposta escolhida #487006 - 07/02/2019 15:37:29

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
É uma WebAPI baseada em token?

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#487007 - 07/02/2019 16:33:30

FUTURA
.
Cadast. em:Maio/2004


não sei te dizer, sei que passa user e senha.. vou postar o que esta no manual aqui abaixo:

Averbação via API (Webservice tipo REST)

Resumo: Acessar a API (RPC) via método POST para Login (mesmo usuário e senha do Sistema Web) e receber o json de resposta e o cookie de sessão (portal[ses] - deve ser utilizado em múltiplos envios), acessar novamente para Enviar o arquivo e receber o json de resposta de processamento que irá conter o status e o Número de Averbação ANTT. O Sistema Web é apenas um programa em JavaScript acessando exatamente esta mesma API. Ou seja, todas as requisições e respostas podem ser observadas em pleno funcionamento via Ferramenta do Desenvolvedor de seu Navegador Web.

Endereço da API: http://www.averbeporto.com.br/websys/php/conn.php

Para login, enviar apenas os parâmetros:
{
    "mod": "login",
    "comp": 5,
    "user": "USUARIO",
    "pass": "SENHA",
    ["dump": [1,2]]    // Opcional.
}

dump: Pode ser utilizado em qualquer requisição à API para auxiliar na depuração. Exibe um “dump” de como estão chegando as variáveis enviadas ao sistema pelo usuário.
dump=1: Adiciona a tag “dump” no json de resposta, após todo o processamento normal da requisição.
dump=2: Exibe o json de resposta apenas com a tag “dump”, antes de qualquer processamento, e aborta o processamento normal.

Json de falha no login, usuário ou senha inválidos ou enviados de maneira incorreta:
{
    "success": 1,
    "logout": 1
}

Json de login bem sucedido:
{
    "success": 1,
    "C": {
        "id": "00",
        "userName": "USUARIO",
        "name": "Usuario",
        "email": "usuario@dominio.com",
        "portal_groups_id": "00",
        "type": "U"
    },
    "S":[...]
}


Para upload, fazer o POST do cookie de sessão (portal[ses] recebido no login), do arquivo (file) e dos parâmetros:
{
    "comp": 5,
    "mod": "Upload",
    "path": "eguarda/php/",
    "recipient": "",
    ["v": N]     //N = Versão da API. Parâmetro opcional.
}

Obs. Enviar o arquivo junto aos parâmetros, mesmo que codificado em base64, não irá funcionar. O arquivo deve ser enviado da mesma maneira que um formulário HTML o faria.

Opções do parâmetro recipient (opcional, utilizar somente se assim indicado):
Parâmetro que indica o tipo do(s) arquivo(s) sendo enviado(s). Necessário apenas nos casos indicados pela Seguradora.

Vazio = Automático (Recomendado na grande maioria dos casos)
E = Embarcador Emitente (Em desuso)
F = Fornecedor (Em desuso)
T = Transportador (Em desuso)
D = Duplo Ramo (As NF-e são averbadas 2 vezes, uma como T e outra como E)


Json de retorno:
{
    "success": 1,
    "S": [
            "P": 1, // Processado (xml guardado com sucesso)
            "D": 0, // Duplicado (xml pré-existente)
            "R": 0, // Rejeitado (xml não parece ser do tipo certo)
            "N": 0 // Negado (Não é xml ou zip)
    ]
    "prot": "1234567890123", // Protocolos do XML guardados P
    "prot": ["1234567890123"], // Protocolos dos XMLs (ZIP) guardados P
    "error": [ // Mensagens de erro para os resultados R ou N
            "code": 00,
            "msg": "Mensagem de erro"
      ]
}



Json de erro genérico, significa “Erro desconhecido” e, geralmente, é resultado de uma requisição mal formada ou efetuada via um método diferente de POST:
{
    "success": 0,
    "error": {
        "msg": "Ghs.loc.error"
    }
}

Em caso de falha em arquivo ZIP, deve-se consultar o Relatório de Envios no sistema web para verificar os arquivos que foram guardados.

Nas telas de Busca de Arquivos/Exportar para relatório ou Relatório/Registro de Envios é possível consultar o Número de Averbação ANTT (Protocolo de Envio) para os documentos guardados. [Sobre outras formas de consulta].

O envio tem as mesmas características de um POST de formulário HTML (mídia application/x-www-form-urlencoded ou multipart/form-data).

Exemplos CURL

Login:
curl 'http://www.averbeporto.com.br/websys/php/conn.php' --compressed -c cookie.txt -X POST -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' --data 'mod=login&comp=5&user=USUARIO&pass=SENHA' --compressed

Upload:
curl 'http://www.averbeporto.com.br/websys/php/conn.php' --compressed -X POST -H 'Cookie: portal[ses]=8c878b3ab2ba27bf7bc4d5d448b6489b' -H 'Content-Type: multipart/form-data' -F mod=Upload -F comp=5 -F path=eguarda/php/ -F file=@ARQUIVO.xml


ps:
USUARIO e SENHA devem ser substituídos pelo usuário (CNPJ) e senha do Segurado (mesmo usuário e senha do Sistema Web).
O Cookie deve ser substituído pelo cookie retornado no login.
O ARQUIVO.xml deve ser substituído por um documento XML (corretamente formatado) do Segurado.





#487008 - 07/02/2019 16:42:31

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Observe bem: No seu login, vai voltar uma variável chamada "S" que vai conter um número. Esse número é seu token, ele vai ser usado como parâmetro ao enviar o seu arquivo. É mais ou menos como um "crachá temporário". Esse "crachá temporário" é usado em qualquer outra chamada subsequente, como você pode ver nos exemplos de CURL(no caso do upload, o parâmetro "Cookie: porta[ses]=xxxx")

Para testar isso, simplesmente execute o primeiro comando(o de login), em um prompt de comandos(se não tiver o curl instalado, basta instalar com o Node).

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#487009 - 07/02/2019 16:53:44

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Simplificando seu CURL:
curl 'http://www.averbeporto.com.br/websys/php/conn.php/mod=login&comp=5&user=USUARIO&pass=SENHA' -ContentType 'application/x-www-form-urlencoded; charset=UTF-8'


Não esqueça de substituir usuário e senha pelos valores corretos


_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#487011 - 07/02/2019 18:25:05

FUTURA
.
Cadast. em:Maio/2004


Última edição em 07/02/2019 19:28:31 por FUTURA

node js vc diz ?.

Juro que não entendi nada rsss. Mas vou tentar, no caso vc diz pra executar a linha em um prompt para ver o retorno ?, e no meu projeto que esta em vb.net Windows forms, funciona esse tipo de chamada ?, ou preciso algo diferente ?

usuário e senha de testes que me passaram:
user=00234567000122
pass=0023
tentei algo, mas retorna uma falha, como writeonly não é suportado...  vou continuar tentando..




#487012 - 07/02/2019 19:28:01

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Nossa... tu tá perdidão hein... mas vamos lá:
CURL é um programinha(um pacote na verdade). Ele executa chamadas HTTP por linha de comando. Existem várias maneiras de fazer a mesma coisa, uma das mais populares é o Postman.
Node.js é um interpretador de javascript. Ele roda qualquer coisa em javascript. Como ele é muito versátil, as pessoas acabam construindo aplicações em Javascript que rodam com ele, o CURL é uma delas.

Quando você for implementar isso na sua aplicação, você vai fazer uma chamada HTTP, exatamente com os mesmos parâmetros. Também para isso existem pacotes que ajudam a fazer o trabalho mais simplificado. Por exemplo o RestSharp, que é uma biblioteca que torna essa função(fazer chamadas HTTP) mais fácil. O Postman, possui um gerador de código para C# usando o RestSharp, ou seja, você faz as suas chamadas no Postman e ele vai fazer o código correspondente pra você. Mas como você optou por VB.NET, vai ter que fazer a conversão.

Caminho das pedras:
- Baixe e instale o Postman
- Crie uma chamada para seu serviço, passando os parâmetros
- Gere o código em C#
- Implemente o RestSharp na sua aplicação(adicione a referência)
- Converta para VB.NET
- Use o código fornecido pelo Postman e corra pro abraço

Pra te dar uma força, fiz uma collection do Postman pra você, depois de instalar ele, clique aqui


_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#487013 - 07/02/2019 19:31:40

FUTURA
.
Cadast. em:Maio/2004


passei acima o usuário e senha de testes, vc consegue testar pra ver se estão correto, e retorna sucesso no login ?..  Sim, to perdidão, não é minha praia, mas se eu conseguir colocar na aplicação de CTe, vai facilitar muito  a rotina de averbação..



#487014 - 07/02/2019 19:40:12

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Sim, funcionou, recebi o cookie: c7fcf8d3ce55f42a80897caf26f14fd0

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#487015 - 07/02/2019 19:41:33

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Atualizei a collection do postman

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#487016 - 07/02/2019 19:46:19

FUTURA
.
Cadast. em:Maio/2004


Última edição em 07/02/2019 20:27:31 por FUTURA

eu recebo isso, tanto pelo vb como pelo postman.. {"success":0,"error":{"msg":"Ghs.loc.error"}}

passei assim a url: http://www.averbeporto.com.br/websys/php/conn.php/mod=login&comp=5&user=00234567000122&pass=0023

esta errado né ?, teria que receber essa chave, para usar nas próximas etapas, correto ?

EDITANDO..  COMEÇOU A APARECER UMA LUZ, MUDOU O RETORNO:

enviando: http://www.averbeporto.com.br/websys/php/conn.php/?mod=login&comp=5&user=00234567000122&pass=0023
Tanto pelo postman, como pelo vb, agora recebi

{"success":1,"logout":1}
Segundo o manual, falha de login, user e senha errados, ou enviados de forma incorreta





 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por FUTURA em 25/02/2019 12:05:56