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 105 vezes
Manual de Integração - AverbePorto (1).pdf
Manual
(212.39 KiB) Baixado 113 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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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