Página 1 de 2

Integração com IFOOD não retornando token

Enviado: 10 Set 2020 14:02
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.

Integração com IFOOD não retornando token

Enviado: 14 Set 2020 11:36
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.

Integração com IFOOD não retornando token

Enviado: 14 Set 2020 15:13
por JoséQuintas
Na comunicação json, tem horas que é POST e tem horas que é GET
Confirmou isso?

Integração com IFOOD não retornando token

Enviado: 14 Set 2020 16:52
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.

Integração com IFOOD não retornando token

Enviado: 14 Set 2020 17:48
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"

Integração com IFOOD não retornando token

Enviado: 14 Set 2020 19:19
por Giovany Vecchi
Oi Quintas
Procura saber qual tipo de autenticação usa

Integração com IFOOD não retornando token

Enviado: 14 Set 2020 22:53
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á.

Integração com IFOOD não retornando token

Enviado: 15 Set 2020 08:47
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

Integração com IFOOD não retornando token

Enviado: 15 Set 2020 11:53
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.

Integração com IFOOD não retornando token

Enviado: 15 Set 2020 12:24
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

Integração com IFOOD não retornando token

Enviado: 15 Set 2020 15:34
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 !!!

Integração com IFOOD não retornando token

Enviado: 15 Set 2020 16:11
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.

Integração com IFOOD não retornando token

Enviado: 15 Set 2020 16:11
por asimoes
Quintas,

O teu código funcionou?

Integração com IFOOD não retornando token

Enviado: 15 Set 2020 17:30
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

Integração com IFOOD não retornando token

Enviado: 15 Set 2020 18:09
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" }