Integração com IFOOD não retornando token

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

Moderador: Moderadores

Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Integração com IFOOD não retornando token

Mensagem por ANDRIL »

Alguem conseguiu fazer a integração com o IFOOD, não estou conseguindo passar do primeiro passo que é obter o token que será usado nas demais requisições.

Código: Selecionar todos

cUrl:="https://pos-api.ifood.com.br/oauth/token"
cMetodo="POST"

oServer := win_OleCreateObject( "MSXML2.ServerXMLHTTP.5.0" )
oServer:Open( cMetodo, cURL, .F. )
oServer:SetRequestHeader("accept", "application/json")
oServer:SetRequestHeader("Content-Type", "x-www-form-urlencoded")
cJson = '{"client_id":"usersofthose",;
             "client_secret":"senhasofthouse",; 
             "grant_type":"password",;
             "username":"userRestaurante",; 
             "password","senhaRestaurante"}
oServer:Send( cJson )
cRetorno := oServer:ResponseBody() 
Recebo como retorno caracteres estranhos quando deveria receber o Jason com o token possivelmente em base64. Se mudo content-type recebo erro HTTP 401.

Enfim, se alguém tiver alguma dica. O suporte do IFOOD é só via formulário e demora muito, para quem esta desenvolvendo ter um canal direto é o ideal, via formulário mata o pião.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
welington
Usuário Nível 1
Usuário Nível 1
Mensagens: 15
Registrado em: 24 Ago 2019 15:21
Localização: são paulo

Integração com IFOOD não retornando token

Mensagem por welington »

Ola Bom dia, estou tentando fazer a integração do ifood acontece o mesmo problema Que o seu. Se alguém poder ajudar Da uma dica.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Integração com IFOOD não retornando token

Mensagem por JoséQuintas »

Na comunicação json, tem horas que é POST e tem horas que é GET
Confirmou isso?
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/
Giovany Vecchi
Usuário Nível 1
Usuário Nível 1
Mensagens: 19
Registrado em: 28 Mai 2014 17:32
Localização: Jales / SP

Integração com IFOOD não retornando token

Mensagem por Giovany Vecchi »

Ola Quintas, boa tarde.
Nunca mexi com IFOOD, mais a logica tem que ser apenas 2
Sistema oAuth1 ou oAuth2
Hoje todos usam o sistema oAuth2

Tenta esta logica aqui

Código: Selecionar todos

cJson := '{"client_id":"usersofthose",;
           "&client_secret":"senhasofthouse",;
           "&grant_type":"client_credentials",;
           "&username":"userRestaurante",;
           "&password","senhaRestaurante"}'
oServer:Send( cJson )
Se não der certo tenta tirar o &

Mais a lógica do oAuth2 é primeiramente buscar o Token com apenas client_id e client_secret.
Depois de adquirir o token voce loga com o token assim neste exemplo:

Código: Selecionar todos

  ::cBodyTxt := hb_base64Encode(userRestaurante+":"+senhaRestaurante)

  ::oHttpRegistro := TOleAuto():New("Msxml2.ServerXMLHTTP.5.0")

  ::oHttpRegistro:SetTimeouts(40000,40000,40000,40000)

  uRet := ::oHttpRegistro:Open("POST",::cUrlPostRegistro,.f.)

  ::oHttpRegistro:SetRequestHeader( "Content-Type"     , "application/x-www-form-urlencoded" )
  ::oHttpRegistro:SetRequestHeader( "Authorization"    , "Bearer "+::cAccessTokenReturn ) //cAccessTokenReturn é o token de autenticação
  
  Try
    ::oHttpRegistro:Send(::cBodyTxt)
  Catch oError
    cErrorTmp :="Error: "  + Transform(oError:GenCode, nil) + CRLF +;
                "SubC: "   + Transform(oError:SubCode, nil) + CRLF +;
                "OSCode: "  + Transform(oError:OsCode,  nil) + CRLF +;
                "SubSystem: " + Transform(oError:SubSystem, nil) + CRLF +;
                "Mensagem: " + oError:Description

    MsgStop("Erro ao chamar metodo SEND de HttpRequest (Registro envio)."+CRLF+;
            Replicate("-",79)+CRLF+cErrorTmp,"Procedimento Abortado")
    Return nil
  End Try

Agora se for oAuth1 não sei
Quando precisei implantar no sistema ja foi no oAuth2 direto.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Integração com IFOOD não retornando token

Mensagem por JoséQuintas »

Não seria algo assim:

Código: Selecionar todos

VAR cLogin      INIT "https://pos-api.ifood.com.br/oauth/token?client_id=xxx&client_secret=xxx&username=xxx&password=xxx&grant_type=password"
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/
Giovany Vecchi
Usuário Nível 1
Usuário Nível 1
Mensagens: 19
Registrado em: 28 Mai 2014 17:32
Localização: Jales / SP

Integração com IFOOD não retornando token

Mensagem por Giovany Vecchi »

Oi Quintas
Procura saber qual tipo de autenticação usa
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Integração com IFOOD não retornando token

Mensagem por Vlademiro »

https://app.swaggerhub.com/apis/daniela ... d-apis/1.0

Da uma olhada no swaggerhub , talvez a documentação esteja lá.

Outras pessoas já passaram pelo mesmo problema e postaram a documentação lá.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Integração com IFOOD não retornando token

Mensagem por ANDRIL »

Não creio que seja questão de documentação.

O método requerido é o POST, esta correto. O formato é JSON, está correto. O content-type diz que é multipart/form-data, já tentei e não deu. Tentei com x-www-form-urlencoded e application/json e não deu também.

É algo com o Harbour usando MSXML2.ServerXMLHTTP.5.0 que não consegue usar o oAuth. Não consigo descobrir o porque.
Digo isto por que consegui fazer a comunicação normalmente com o código PHP abaixo usando cUrl.

Código: Selecionar todos

$cUrl = 'https://pos-api.ifood.com.br/oauth/token'; 
	$senha1="111111";

	curl_setopt($cr, CURLOPT_URL, $cUrl); 
	//definindo a url de busca 
	curl_setopt($cr, CURLOPT_RETURNTRANSFER, true);   
	//definino que o método de envio, será POST 
	curl_setopt($cr, CURLOPT_POST, TRUE);   
	//definindo os dados que serão enviados 
	curl_setopt($cr, CURLOPT_POSTFIELDS, "client_id=".$client_id."&client_secret=".$client_secret."&grant_type=password"."&username=$senha1&password=$senha1"); 
	
	curl_setopt($cr, CURLOPT_HTTPHEADER, array(
	  "Accept: application/json",
	  "content-type", "multipart/form-data"));

$retorno = curl_exec($cr);   
//fechando-o para liberação do sistema. 
curl_close($cr); 
//fechamos o recurso e liberamos o sistema...   
//mostrando o conteúdo... 
echo $retorno; 
Só com Harbour não estou conseguindo a comunicação.
Harbour Make (hbmk2) 3.2.0dev (r2015-02-20 10:40)
Copyright (c) 1999-2013, Viktor Szakáts
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Integração com IFOOD não retornando token

Mensagem por ANDRIL »

Tentei portar o código PHP para Harbour usando cUrl.

Código: Selecionar todos

 cr := curl_easy_init() 
   	  	       curl_easy_setopt(cr, HB_CURLOPT_URL, cURL)
		   	   //definindo a url de busca
		   	   curl_easy_setopt(cr, HB_CURLOPT_RETURNTRANSFER, .t.)
		      //definino que o método de envio, será POST
		   	   curl_easy_setopt(cr, HB_CURLOPT_POST, .t.)
		   	   //definindo os dados que serão enviados
		   	   curl_easy_setopt(cr, HB_CURLOPT_POSTFIELDS, Lista)
		   	    
		   	   curl_easy_setopt(cr, HB_CURLOPT_HTTPHEADER, array("Accept: application/json","content-type", "multipart/form-data"))
	             
	           cStr = curl_easy_perform( cr )
			   curl_easy_reset( cr )
  			   curl_easy_cleanup( cr )
Porem não consigo compilar. Embora conste no harbour as funções instaladas não reconhece.
hbmk2 -find curl

hbcurl.hbc (instalado):
curl_easy_cleanup()
curl_easy_dl_buff_get()
curl_easy_duplicate()
curl_easy_escape()
curl_easy_getinfo()
curl_easy_init()
curl_easy_pause()
curl_easy_perform()
curl_easy_recv()
curl_easy_reset()
curl_easy_send()
curl_easy_setopt()
curl_easy_strerror()
curl_easy_unescape()
curl_escape()
curl_getdate()
curl_global_cleanup()
curl_global_init()
curl_unescape()
curl_version()
curl_version_info()
__HBEXTERN__HBCURL__()
Ao compilar da a sugestão
hbmk2: Dica: Adicionar opçπo 'hbcurl.hbc' faltando nas funç⌡es:
curl_global_cleanup(), curl_easy_cleanup(), curl_easy_reset(),
curl_easy_perform(), curl_easy_setopt(), curl_easy_init()
Ao colocar na compilação o hbcurl.hbc da falta da lib
hbmk2: Linkando... monitorPARCEIRO-IFOOD.exe
e:/hb32/comp/mingw/bin/../lib/gcc/mingw32/4.6.1-dw2/../../../../mingw32/bin/ld.e
xe: cannot find -llibcurl
collect2: ld returned 1 exit status
hbmk2[junta-IFOOD]: Erro: Executando linkeditor. 1
e:\hb32\comp\mingw\bin\gcc.exe ".hbmk/win/mingw/monitorPARCEIRO-IFOOD.o" .hbmk/w
in/mingw/erroparceiro.o ".hbmk/win/mingw/_hbmkaut_monitorPARCEIRO-IFOOD.o" -m
windows -Wl,--start-group -lgtwvg -lhbwin -lpng -lhbcurl -llibcurl -lhbct -lhbti
p -lhbxpp -lhbextern -lhbdebug -lhbvm -lhbrtl -lhblang -lhbcpage -lgtcgi -lgtpca
-lgtstd -lgtwin -lgtwvt -lgtgui -lhbrdd -lhbuddall -lhbusrrdd -lrddntx -lrddcdx
-lrddnsx -lrddfpt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon
-lhbmainwin -lkernel32 -luser32 -lgdi32 -ladvapi32 -lws2_32 -liphlpapi -lwinspoo
l -lcomctl32 -lcomdlg32 -lshell32 -luuid -lole32 -loleaut32 -lmpr -lwinmm -lmapi
32 -limm32 -lmsimg32 -lwininet -lhbpcre -lhbzlib -Wl,--end-group -s -o"monitor
PARCEIRO-IFOOD.exe" -Le:/hb32/lib/win/mingw
Na minha pasta \hb32\lib\win\mingw constam
-libhbcurl.a
-libhbcurls.a

más não reconhecem.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Integração com IFOOD não retornando token

Mensagem por JoséQuintas »

Código: Selecionar todos

METHOD MicrosoftPost( cProtocol ) CLASS IFoodClass

   LOCAL oServer

   hb_Default( @cProtocol, "POST" )
   oServer := win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
   oServer:Open( cProtocol, ::cLogin, .F. )
   oServer:Open( cProtocol, ::cURL, .F. )
   oServer:SetRequestHeader( "Content-Type", "application/json" )
   oServer:Send( ::cTxtEnvio )
   oServer:WaitForResponse( 2000 )
   ::cTxtRetorno := oServer:ResponseBody()

   RETURN NIL
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/
AutomoSistema
Usuário Nível 2
Usuário Nível 2
Mensagens: 87
Registrado em: 27 Nov 2015 22:09
Localização: Jardim-MS

Integração com IFOOD não retornando token

Mensagem por AutomoSistema »

Boa tarde, desculpa em entrar neste assunto, IFOOD comprou uma SoftHouse grande em São Paulo e vai ofertar para as empresas que trabalha no seguimento Gastronômico ERPs por R$ 50,00 Mensal com carência de 6 meses para começar PAGAR !!!
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

Integração com IFOOD não retornando token

Mensagem por Itamar M. Lins Jr. »

Ola!
ERPs por R$ 50,00 Mensal com carência de 6 meses para começar PAGAR !!!
Tem um post meu no bate papo, exatamente sobre isso. Como eu vou investir em uma ferramenta de 6Mil reais se o mercado está dessa maneira ?
Não sei qual é a mágica de atendimento desse pessoal. Devem está pagando menos de um salário para o analista de suporte.
50,00 por mês, quantas lojas(clientes) tem que ter, para pagar um salário ao funcionário deles ? A conta não fecha.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Integração com IFOOD não retornando token

Mensagem por asimoes »

Quintas,

O teu código funcionou?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Integração com IFOOD não retornando token

Mensagem por janio »

Boa tarde, desculpa em entrar neste assunto, IFOOD comprou uma SoftHouse grande em São Paulo e vai ofertar para as empresas que trabalha no seguimento Gastronômico ERPs por R$ 50,00 Mensal com carência de 6 meses para começar PAGAR !!!
É por isso que não quero nem papo com iFood, assim como nao quero com Bematech
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Integração com IFOOD não retornando token

Mensagem por ANDRIL »

AutomoSistema escreveu:Boa tarde, desculpa em entrar neste assunto, IFOOD comprou uma SoftHouse grande em São Paulo e vai ofertar para as empresas que trabalha no seguimento Gastronômico ERPs por R$ 50,00 Mensal com carência de 6 meses para começar PAGAR !!!
Não sabia desta informação. Acho que vão dar um tiro no pé e começar a sujar a marca deles. Estão atualmente em negócio muito lucrativo com pouca manutenção ao cliente o que parece. Já com um software com R$ 50,00 mensal só vão arrumar para cabeça e terão que melhorar em muito a infraestrutura deles para aguentar a demanda.
Também relutei muito em integrar com eles, mas meus clientes do segmento 95% usam eles e já não aguentam mais tirar pedido lá e passar para o sistema, então, ou voce integra ou mudaremos para um que já tem isso. Infelizmente é assim, tem aos montes programas já integrados com ele.

José, no seu código colocou Open 2 vezes, está correto?

Código: Selecionar todos

oServer:Open( cProtocol, ::cLogin, .F. )
08	   oServer:Open( cProtocol, ::cURL, .F. )
No caso cLogin seria montado de que forma, se no código original no Json passa-se
{"client_id":"usersofthose",;
"client_secret":"senhasofthouse" }
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Responder