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: 1309
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: 20416
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, 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/
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: 20416
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, 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/
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: 1309
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: 1309
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: 20416
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, 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/
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: 8029
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 2 vezes
Curtiram: 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: 1309
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