Página 1 de 1

Averbação via API (Webservice tipo REST)

Enviado: 10 Jun 2024 18:17
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


Averbação via API (Webservice tipo REST)

Enviado: 11 Jun 2024 08:12
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

Averbação via API (Webservice tipo REST)

Enviado: 11 Jun 2024 09:24
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

Averbação via API (Webservice tipo REST)

Enviado: 11 Jun 2024 10:09
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")

Averbação via API (Webservice tipo REST)

Enviado: 11 Jun 2024 10:14
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 )

Averbação via API (Webservice tipo REST)

Enviado: 11 Jun 2024 11:39
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.

Averbação via API (Webservice tipo REST)

Enviado: 11 Jun 2024 18:43
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

Averbação via API (Webservice tipo REST)

Enviado: 11 Jun 2024 19:03
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.

Averbação via API (Webservice tipo REST)

Enviado: 11 Jun 2024 19:10
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.

Averbação via API (Webservice tipo REST)

Enviado: 11 Jun 2024 19:30
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

Averbação via API (Webservice tipo REST)

Enviado: 11 Jun 2024 19:48
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

Averbação via API (Webservice tipo REST)

Enviado: 11 Jun 2024 20:03
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.

Averbação via API (Webservice tipo REST)

Enviado: 12 Jun 2024 12:02
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.

Averbação via API (Webservice tipo REST)

Enviado: 12 Jun 2024 12:20
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.