Averbação via API (Webservice tipo REST)

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

Averbação via API (Webservice tipo REST)

Mensagem por Alexandre Silva »

Pessoal,Podem me ajudar na chamada dessa API
Nao consigo fazer um simples login
A documentao está em anexo

Só recebo esse retorno
{"success":1, "error":{"code":"01", "msg":"No login."}}

Mensagem de "No login" ao tentar fazer o login, significa que a requisição está sendo enviada de maneira que o servidor não está entendendo que se deseja fazer um login e como não existe o token de login na comunicação, então o sistema entende que antes você precisa fazer login

Código: Selecionar todos

*-------------------------
*-------------------------
function main()
local getlist:={},oData:=hb_Hash(),cResposta,oJson,vteste
local tela:=savescreen(),vdump:='1'
local vsenha:='suasenha'
curl:='https://apis.averbeporto.com.br/php/conn.php'
cls
@ 14,02 say 'Dump 1/2 ou vazio:'get vdump pict '!' valid(vdump $ '12 ')
read
oData["mod"]:= 'login'
oData["comp"]:= '5'
oData["user"]:="usuario"
oData["pass"]:= alltrim(vsenha)
if !empty(vdump)
   oData["dump"]:= alltrim(vdump)
endif
vteste:=hb_JsonEncode( oData )
varqsaida:='jlog.txt'
HB_MemoWrit(varqsaida,vteste)
*--
cResposta:=mandaserv('POST',cUrl, oData)
cResposta:=tacjson(cResposta) // acentuacao
alert(cresposta)
if at('userName',cresposta)>0
   HB_MemoWrit(varqret,cresposta)
else
   varqret:='jret.txt'
   HB_MemoWrit(varqret,cresposta)
   alert('Problemas ! Nao gerou novo login')
endif
rest screen from tela
retu

*------------------------------
* manda requisicao ao servidor
*------------------------------
function mandaserv(vmetodo,cUrl, oData)
local oWeb, cResposta
oWeb := win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
oWeb :Open(vmetodo, cUrl, .F. )
oWeb :SetRequestHeader( "Content-Type","application/x-www-form-urlencoded")
oWeb :Send( hb_JsonEncode( oData ) )
oWeb :WaitForResponse( 300 )
cResposta := oWeb:ResponseBody()
return cResposta

Anexos
LOGSEG.PRG
(1.39 KiB) Baixado 95 vezes
Manual de Integração - AverbePorto (1).pdf
Manual
(212.39 KiB) Baixado 104 vezes
Editado pela última vez por Itamar M. Lins Jr. em 10 Jun 2024 21:06, em um total de 1 vez.
Razão: Editado para apagar login e senha. Evite colocar login e senha.
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
cleitonLC
Usuário Nível 1
Usuário Nível 1
Mensagens: 44
Registrado em: 17 Ago 2021 14:38
Localização: Cariacica/ES

Averbação via API (Webservice tipo REST)

Mensagem por cleitonLC »

Alexandre Silva escreveu:Pessoal,Podem me ajudar na chamada dessa API
Nao consigo fazer um simples login
A documentao está em anexo

Só recebo esse retorno
{"success":1, "error":{"code":"01", "msg":"No login."}}

Mensagem de "No login" ao tentar fazer o login, significa que a requisição está sendo enviada de maneira que o servidor não está entendendo que se deseja fazer um login e como não existe o token de login na comunicação, então o sistema entende que antes você precisa fazer login

Código: Selecionar todos

*-------------------------
*-------------------------
function main()
local getlist:={},oData:=hb_Hash(),cResposta,oJson,vteste
local tela:=savescreen(),vdump:='1'
local vsenha:='suasenha'
curl:='https://apis.averbeporto.com.br/php/conn.php'
cls
@ 14,02 say 'Dump 1/2 ou vazio:'get vdump pict '!' valid(vdump $ '12 ')
read
oData["mod"]:= 'login'
oData["comp"]:= '5'
oData["user"]:="usuario"
oData["pass"]:= alltrim(vsenha)
if !empty(vdump)
   oData["dump"]:= alltrim(vdump)
endif
vteste:=hb_JsonEncode( oData )
varqsaida:='jlog.txt'
HB_MemoWrit(varqsaida,vteste)
*--
cResposta:=mandaserv('POST',cUrl, oData)
cResposta:=tacjson(cResposta) // acentuacao
alert(cresposta)
if at('userName',cresposta)>0
   HB_MemoWrit(varqret,cresposta)
else
   varqret:='jret.txt'
   HB_MemoWrit(varqret,cresposta)
   alert('Problemas ! Nao gerou novo login')
endif
rest screen from tela
retu

*------------------------------
* manda requisicao ao servidor
*------------------------------
function mandaserv(vmetodo,cUrl, oData)
local oWeb, cResposta
oWeb := win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
oWeb :Open(vmetodo, cUrl, .F. )
oWeb :SetRequestHeader( "Content-Type","application/x-www-form-urlencoded")
oWeb :Send( hb_JsonEncode( oData ) )
oWeb :WaitForResponse( 300 )
cResposta := oWeb:ResponseBody()
return cResposta



Já tentou passar um user-agent no headers ???
*2 Pode ser necessário definir um user-agent como “Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101
Firefox/12.0” para acessar apis, isso impedirá que o CF bloqueie seu programa com o erro 403/1010
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

Averbação via API (Webservice tipo REST)

Mensagem por Alexandre Silva »

Pois entao , Como se faz isso ?
Embora o erro parece ser outro e nao esse abaixo
isso impedirá que o CF bloqueie seu programa com o erro 403/1010
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
cleitonLC
Usuário Nível 1
Usuário Nível 1
Mensagens: 44
Registrado em: 17 Ago 2021 14:38
Localização: Cariacica/ES

Averbação via API (Webservice tipo REST)

Mensagem por cleitonLC »

Alexandre Silva escreveu:Pois entao , Como se faz isso ?
Embora o erro parece ser outro e nao esse abaixo
isso impedirá que o CF bloqueie seu programa com o erro 403/1010
Passe o user-agent assim:

Código: Selecionar todos

oWeb :SetRequestHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101
Firefox/12.0")
cleitonLC
Usuário Nível 1
Usuário Nível 1
Mensagens: 44
Registrado em: 17 Ago 2021 14:38
Localização: Cariacica/ES

Averbação via API (Webservice tipo REST)

Mensagem por cleitonLC »

Verifique também essa instrução:

Código: Selecionar todos

oWeb :Send( hb_JsonEncode( oData ) )
Creio que você esteja tentando converter em json 2 vezes, pois oData parece já ser um objeto json.
Tente:

Código: Selecionar todos

oWeb :Send( oData )
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

Averbação via API (Webservice tipo REST)

Mensagem por Alexandre Silva »

Nao.. deu
Fazendo isso dá Erro Metodo nao Exportado, com certeza nao é isso
Eu uso a mesma funcao para API de CIOT e funciona, apenas que lá o tipo é "application/json"

Nao sei se falta algum Header ( oWeb:SetRequestHeader)
Nao entendi isso abaixo, eu criei a senha de API ok, mas nao recebi json de resposta

Senha da API deve ser gerada no módulo Cadastro do Usuário) e receber o json de resposta (também contendo “ses”) e o cookie de sessão (portal[ses] - HEADER HTTP - deve ser
utilizado em múltiplos envios), acessar novamente para Enviar o arquivo e receber o json de resposta que irá
conter o status e o Número de Averbação ANTT.
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Averbação via API (Webservice tipo REST)

Mensagem por JoséQuintas »

O que dizer disso....

Quem precisa ver o manual é você....

Aonde tá vendo JSON nisso ?
json.png
Básico de internet com parâmetros

Código: Selecionar todos

cUrl := "https://apis.averbeporto.com.br/php/conn.php"
cUrl += "?mod=login"
cUrl += "&comp=5"
cUrl += "&user=" + cUsuario
cUrl += "&pass=" + cSenha
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

Averbação via API (Webservice tipo REST)

Mensagem por Alexandre Silva »

Tem 2 opcoes na Documentacao
API via Json e Curl ou nao é isso ?
Quero fazer pela API que usa JSON

1. Endereços da API *1:
Seguro: https://apis.averbeporto.com.br/php/conn.php (:443 - TLS 1.0, 1.1, 1.2 e 1.3) *2 - HTTP/3
Plain: http://api.averbeporto.com.br/php/conn.php (:80 - Plain text - HTTP/2) - descontinuado
*1 NÃO utilizar www. ou wws. ou nenhum outro subdomínio para acesso à API, será bloqueado.
*2 Pode ser necessário definir um user-agent como “Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101
Firefox/12.0” para acessar apis, isso impedirá que o CF bloqueie seu programa com o erro 403/1010
*3 Chamar o endereço da API no navegador irá gerar uma mensagem de erro (item 7) pela absoluta falta de parâmetros na
comunicação.
2. Para login, POST (application/x-www-form-urlencoded) os parâmetros:
{
"mod": "login",
"comp": 5,
"user": "USUARIO_CNPJ",
"pass": "SENHA_Credencial_do_Web_Service_API",
["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.
- pass: Não utilize a senha comum para acesso web no acesso à API. Acessando o sistema Web, vá no módulo Cadastro do
Usuário e gere uma senha de API própria, clicando no X para iniciar o processo.
3. Json de falha no login, usuário ou senha inválidos, enviados de maneira incorreta, ou sessão de
login expirada:
{
"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":[...]
}
4. Para upload, fazer o POST (multipart/form-data) do cookie 1 de sessão (portal[ses] - HEADER
HTTP - recebido no login), do arquivo (file) 2 e dos parâmetros:
{
"comp": 5,
"mod": "Upload",
"path": "eguarda/php/",
"recipient": "",
["v": N] //N = Versão da API. Parâmetro opcional.
}
Obs 1. Os COOKIES residem no cabeçalho da resposta HTTP e não no corpo como o JSON.
Obs 2. Enviar o arquivo junto aos parâmetros, mesmo como um parâmetro codificado em base64,
não irá funcionar. O arquivo deve ser enviado da mesma maneira que um formulário HTML o
faria, em multipart.
Obs 3. Quando gerada a Credencial de API no módulo Cadastro do Usuário, o cookie de
sessão passa a ter validade de 1 ano, ao contrário da 1 semana padrão.
5. 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.
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Averbação via API (Webservice tipo REST)

Mensagem por JoséQuintas »

Alexandre Silva escreveu:API via Json e Curl ou nao é isso ?
AFFFFFFFF

Pra conversar com a API pode usar Microsoft XMLHTTP, CURL, ou outras.

Se quiser usar CURL.EXE via linha de comando, faz desse jeito que está mostrando.

Se o manual mostra em formato JSON, é problema do manual.
Vai ficar testando em json pela eternidade e não vai funcionar.

Se prestar atenção a parte do manual que mostrei, tem a mesma informação que colocou no XMLHTTP.
Ou seja, os exemplos em CURL são a resposta que procura, apenas não exatamente formatadas como precisa.

É só fazer o teste, não precisa ficar repetindo o que tem no manual que já postou.
Depois reclame lá... com quem fez o manual.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

Averbação via API (Webservice tipo REST)

Mensagem por Alexandre Silva »

Obrigado vou testar,
Desculpe se as vezes as perguntas sao basicas,
Nao queria usar algo externo, sendo que eles tem a opcao via Json
Esse manual é bem ruim mesmo e o suporte deles pior ainda
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Averbação via API (Webservice tipo REST)

Mensagem por JoséQuintas »

IFOOD para referência

Código: Selecionar todos

METHOD Token() CLASS IFoodClass

   LOCAL cUrl

   cUrl := "https://merchant-api.ifood.com.br/authentication/v1.0/oauth/token" + ;
           "?grantType=client_credentials" + ;
           "&clientId=" + IFOOD_USUARIO + ;
           "&clientSecret=" + IFOOD_SENHA + ;
           "&authorizationCode=" + ;
           "&authorizationCodeVerifier=" + ;
           "&refreshToken="

   RETURN ::WS( , "POST", cUrl )

METHOD WS( cToken, cPostGet, cUrl, cMsg ) CLASS IFoodClass

   LOCAL oServer, cRetorno

   hb_Default( @cPostGet, "POST" )
   hb_Default( @cMsg, "" )

   oServer := win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
   oServer:Open( cPostGet, cUrl, .F. )
   IF cToken == Nil
      oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
   ELSE
      oServer:SetRequestHeader( "Content-Type", "application/json" )
      oServer:SetRequestHeader( "Authorization", "Bearer " + hb_JsonDecode( cToken )[ "accessToken" ] )
   ENDIF
   oServer:Send( cMsg )
   oServer:WaitForResponse( 2000 )
   cRetorno := oServer:ResponseBody()

   RETURN cRetorno
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Averbação via API (Webservice tipo REST)

Mensagem por JoséQuintas »

Alexandre Silva escreveu:Tem 2 opcoes na Documentacao
API via Json e Curl ou nao é isso ?
Quero fazer pela API que usa JSON
Também faltou ler o manual direito

Averbação via Interface Web
Averbação via API (Webservice tipo REST)
Averbação via E-mail

Se os exemplos de curl estão na parte "Averbação via API (Webservice tipo REST)" ....
Não é outra opção, é a mesma, e são exemplos de uso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

Averbação via API (Webservice tipo REST)

Mensagem por Alexandre Silva »

Entao,
Fiz pelo seu modelo IFood, usando a Curl que vc tambem passou e tive exatamente o mesmo retorno

{"success":1, "error":{"code":"01", "msg":"No login."}}

Deve estar faltando algo.
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Averbação via API (Webservice tipo REST)

Mensagem por JoséQuintas »

Leu o manual ?
Usou a senha certa ?
Deixou passar outras coisas do manual, pode ter deixado passar a parte da senha.

Se a comunicação funcionou, é ir atrás do resto agora, ou documentação ou suporte deles.

A ajuda termina aqui. Mais que isso deixa de ser ajuda e vira trabalho, porque deixa de ser a parte comum e passa a ser particular a esse serviço.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder