Página 2 de 3

Gateway de Pagamentos

Enviado: 20 Mai 2021 18:10
por ctoas
Olá!

Consegui fazer com linha de comando

Código: Selecionar todos

curl --location --request POST "https://sandbox.gerencianet.com.br/v1/authorize" --header "Authorization: Basic Q2..." --header "Content-Type: application/json" --data-raw "{  \"grant_type\":\"client_credentials\"}"
Agora é passar para os comando da lib

Gateway de Pagamentos

Enviado: 21 Mai 2021 11:47
por JoséQuintas
Tá me lembrando a API do IFood.
Ela não funcionava se não enviasse primeiro o comando de liberação.

A API nova ainda estou testando, mas tem parte parecida.
Uma API só é liberada se primeiro chamar outra.
E o manual mostra vários webservices, inclusive os que não precisa, e isso confunde.

Gateway de Pagamentos

Enviado: 21 Mai 2021 15:04
por ctoas
Exatamente isso Jose Quintas, essa linha é somente para liberação e possui diversas outras...

Gateway de Pagamentos

Enviado: 21 Mai 2021 15:08
por ctoas
Outra coisa, o WINEXEC() não executa esta linha, acho que é muito grande.....

Gateway de Pagamentos

Enviado: 21 Mai 2021 15:54
por Itamar M. Lins Jr.
Olá!
Use um .BAT
START CURL ...

Saudações,
Itamar M. Lins Jr.

Gateway de Pagamentos

Enviado: 21 Mai 2021 16:05
por ctoas
Opa Itamar....

Estou criando o .BAT em execução e executando com WAITRUN()

Código: Selecionar todos

WAITRUN("TESTE.BAT",0)

Gateway de Pagamentos

Enviado: 23 Mai 2021 11:20
por JoséQuintas
ctoas escreveu:Exatamente isso Jose Quintas, essa linha é somente para liberação e possui diversas outras...
Ainda apanhando um pouco com IFood.
A comunicação igual a essa NÃO é pra obter liberação, é pra obter o token de liberação.
Depois usa o token nas demais comunicações.

O manual se limita a dizer que é autenticação do tipo Bearer, mas tá difícil de achar os detalhes disso.
À primeira vista é passar no header, mas.... com certeza existe um nome pra isso, não basta acrescentar o token.

Gateway de Pagamentos

Enviado: 23 Mai 2021 11:44
por JoséQuintas
Assim retorna Nil, agora não sei se é Nil porque não tem pedidos, ou se tá com erro.

Código: Selecionar todos

METHOD Post( cProtocolo, cUrl, cEnvio, lWithToken ) CLASS IFoodClass

   LOCAL oServer

   hb_Default( @cProtocolo, "POST" )
   hb_Default( @lWithToken, .F. )
   oServer := win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
   oServer:Open( cProtocolo, cUrl, .F. )
   oServer:SetRequestHeader( "Accept", "application/json" )
   IF lWithToken
     oServer:SetRequestHeader( "Content-Type", "application/json" )
     oServer:SetRequestHeader( "Authorization", "Bearer " + ::aRespToken[ "accessToken" ] )
   ELSE
      oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
   ENDIF
   oServer:Send( cEnvio )
   oServer:WaitForResponse( 2000 )
   ::cResposta := oServer:ResponseBody()
   ::aJson     := hb_JsonDecode( ::cResposta )

   RETURN ::aJson

Gateway de Pagamentos

Enviado: 23 Mai 2021 11:47
por JoséQuintas
Por enquanto, a única coisa que sei é que sem o Authentication retorna:

{
"message": "no jwt token"
}

Gateway de Pagamentos

Enviado: 23 Mai 2021 13:00
por ctoas
Bom dia José Quintas,

Você tem razão, me expressei mal quando disse liberação, o que retorna é como você disse o token que usado no resto das requisições.

Com relação ao erro que você colocou, pode ser na formação da string do JSON, pois o retorno deveria ser:

Código: Selecionar todos

{
  "accessToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJzdWIiOiJlNjkwYjczZC01OTI4LTRkMTctODE2ZC01Y2Y5YjgyZTJhOWUiLCJhdWQiOiJvcmRlciIsInVzZXJfbmFtZSI6ImU2OTBiNzNkLTU5MjgtNGQxNy04MTZkLTVjZjliODJlMmE5ZSIsInNjb3BlIjpbIm9yZGVyIl0sInRlbmFudElkIjoiNmFjNjkxZDEtMjZjNi00ZmVkLWJmN2ItOTEwMzJkNTM4NWZkIiwiaXNzIjoiaUZvb2QiLCJtZXJjaGFudF9zY29wZSI6WyI2YjQ4N2EyNy1jNGZjLTRmMjYtYjA1ZS0zOTY3YzIzMzE4ODI6b3JkZXIiXSwiZXhwIjoxNjEyMjMwNDU5LCJpYXQiOjE2MTIyMDg4NTksIm1lcmNoYW50X3Njb3BlZCI6dHJ1ZSwiY2xpZW50X2lkIjoiZTY5MGI3M2QtNTkyOC00ZDE3LTgxNmQtNWNmOWI4MmUyYTllIiwiYXV0aG9yaXRpZXMiOlsiUk9MRV9DTElFTlQiXX0.lYqdxjHoOksq8COqJ-VZxzd524MhVzH7hkMfp5zGTpqzp26z5XJwOPHAy7L6oyagUgRfxntKeu0Up_JHgJ-Vr0h5Y9wY4XHcK1yxpFXFB5f5ilGDB0hVN3UGa4GBqeVpCbAPQUl4VhbF2byeL9PuO4TfTZmoWyuec9-xEH_nbHg",
  "type": "bearer",
  "expiresIn": 21600
}
Agora, eu fugiria da API e usaria a linha de comando o CURL.EXE, muito mais simples e prático.

Aqui esta os ENDPOINTS para uso com o CURL.EXE
https://developermercado.ifood.com.br/r ... e#pedido-1

O pessoal da GerenciaNet me passou um site que converte p JSON para string, segue o link:
https://tools.knowledgewalls.com/jsontostring

[]'s

Gateway de Pagamentos

Enviado: 23 Mai 2021 13:23
por JoséQuintas
O retorno da solicitação do token está ok, é nesse formato mesmo.
Agora estou no próximo processo, que é solicitar novos pedidos.
Justamente aonde vai usar o token recebido.

Gateway de Pagamentos

Enviado: 23 Mai 2021 13:33
por ctoas
Processo: Retorna os eventos

A chamada /api/v1/pedido/eventos trás todos os eventos dos pedidos da rede de lojas com seus status, por exemplo, se uma rede de lojas possui mais que uma loja cadastrada no nosso sistema essa chamada trará todos os eventos.

Se for esse processo, pelo ENDPOINT ficaria assim:

Código: Selecionar todos

curl --request GET --url "https://service.sitemercado.com.br/api/v1/pedido/eventos" --header "Accept: application/json" --header "access_token: seu_token"
Retorno

Código: Selecionar todos

[
  {
    "id": 0,
    "codigoPedido": "string",
    "status": "CAN",
    "idLoja": 0
  }
]
Testa ai...

Gateway de Pagamentos

Enviado: 23 Mai 2021 14:09
por JoséQuintas
Se eu passar diferente daquilo, o retorno é:

{"message": "no jwt token"}

Gateway de Pagamentos

Enviado: 23 Mai 2021 14:10
por JoséQuintas
O que eu já percebi é que:
O que no curl indica -H ou --header, no msxml é :SetRequestHeader( "nome", conteudo )

Isto no curl:

Código: Selecionar todos

curl --request GET --url "https://service.sitemercado.com.br/api/v1/pedido/eventos" --header "Accept: application/json" --header "access_token: seu_token"
seria:

Código: Selecionar todos

:Open( "GET", "https://service.sitemercado.com.br/api/v1/pedido/eventos", .T. )
:SetRequestHeader( "Accept", "application/json" )
:SetRequestHeader( "access_token", seu_token )
:Send( xValue )
cRetorno := :ResponseBody()

Gateway de Pagamentos

Enviado: 23 Mai 2021 14:18
por JoséQuintas
exemplo.png
Um exemplo que encontrei na net com o padrão "bearer"