Gateway de Pagamentos

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

Avatar do usuário
ctoas
Usuário Nível 2
Usuário Nível 2
Mensagens: 52
Registrado em: 09 Mai 2005 16:22
Localização: São Paulo
Contato:

Gateway de Pagamentos

Mensagem 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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gateway de Pagamentos

Mensagem 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.
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
ctoas
Usuário Nível 2
Usuário Nível 2
Mensagens: 52
Registrado em: 09 Mai 2005 16:22
Localização: São Paulo
Contato:

Gateway de Pagamentos

Mensagem por ctoas »

Exatamente isso Jose Quintas, essa linha é somente para liberação e possui diversas outras...
Avatar do usuário
ctoas
Usuário Nível 2
Usuário Nível 2
Mensagens: 52
Registrado em: 09 Mai 2005 16:22
Localização: São Paulo
Contato:

Gateway de Pagamentos

Mensagem por ctoas »

Outra coisa, o WINEXEC() não executa esta linha, acho que é muito grande.....
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Gateway de Pagamentos

Mensagem por Itamar M. Lins Jr. »

Olá!
Use um .BAT
START CURL ...

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
ctoas
Usuário Nível 2
Usuário Nível 2
Mensagens: 52
Registrado em: 09 Mai 2005 16:22
Localização: São Paulo
Contato:

Gateway de Pagamentos

Mensagem por ctoas »

Opa Itamar....

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

Código: Selecionar todos

WAITRUN("TESTE.BAT",0)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gateway de Pagamentos

Mensagem 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.
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

Gateway de Pagamentos

Mensagem 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
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

Gateway de Pagamentos

Mensagem por JoséQuintas »

Por enquanto, a única coisa que sei é que sem o Authentication retorna:

{
"message": "no jwt token"
}
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
ctoas
Usuário Nível 2
Usuário Nível 2
Mensagens: 52
Registrado em: 09 Mai 2005 16:22
Localização: São Paulo
Contato:

Gateway de Pagamentos

Mensagem 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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gateway de Pagamentos

Mensagem 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.
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
ctoas
Usuário Nível 2
Usuário Nível 2
Mensagens: 52
Registrado em: 09 Mai 2005 16:22
Localização: São Paulo
Contato:

Gateway de Pagamentos

Mensagem 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...
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gateway de Pagamentos

Mensagem por JoséQuintas »

Se eu passar diferente daquilo, o retorno é:

{"message": "no jwt token"}
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

Gateway de Pagamentos

Mensagem 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()
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

Gateway de Pagamentos

Mensagem por JoséQuintas »

exemplo.png
Um exemplo que encontrei na net com o padrão "bearer"
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