Ir para conteúdo
  • Cadastre-se

dev botao

Iniciando no uso da API do Mercado Livre


  • Este tópico foi criado há 694 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Estou começando uma integração com o Mercado Livre. Tenho como ferramentas para trabalhar o Delphi 7 + Indy 9.
Seguindo o tutorial deles, iniciei os teste da API usando a minha conta pessoal. Criei um app usando o exemplo deles em Node.js e publiquei no Heroki. De posse o ID do aplicativo, fiz a etapa de Autenticação e obtive um token.
Estou parado na etapa de Autorização, usando o código a seguir, não otenho o JSOn de resposta:

procedure TForm1.bt_PostClick(Sender: TObject);
var
  st_URL : string;
  lParams: TStringList;
  lResponse: TStringStream;
begin

  st_URL := 'https://api.mercadolivre.com.br/oauth/token';

  lParams := TStringList.Create;
  lResponse := TStringStream.Create('');
  try
    try

      lParams.Add('grant_type=authorization_code');
      lParams.Add('client_id=1855429386918006');
      lParams.Add('client_secret=G6GxJmvOOwTrXnKNXv4a1whydOQzuoMo');
      lParams.Add('code=TG-5f493b5c2d38620006aa18f8-201010794');
      lParams.Add('redirect_uri=https://minhaappteste0.herokuapp.com/');

      IdHTTP1.Response.ContentType := 'application/json';

      IdHTTP1.Post(TIdURI.URLEncode(st_URL), lParams, lResponse);

      lResponse.Position := 0;
      mmResultado.Lines.LoadFromStream(lResponse);

    except
      on E: Exception do
      begin
        mmResultado.Lines.Add('Error on request: '#13#10 + e.Message);
        Exit;
      end;
    end;
  finally
    lParams.Free();
    lResponse.Free();
  end;
end;

Algúem poderia me ajudar com alguma dica?


 

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...

Ola boa noite tb estou començando a fazer a integração com o Mercado livre, delphi 7, e esbarrei em 2 coisas:
1ª  essa parte  da resposta do codigo de autorização q sempre da bad request;
2ª tentei desenrolar de uma outra forma com um código de autorização, porem não consigo fazer uma simples atualização de estoque.

alguém tem alguma sugestão ?? para me ajudar,


muito obrigado

Link para o comentário
Compartilhar em outros sites

19 horas atrás, Ricardo Salvador Jurado disse:

Ola boa noite tb estou començando a fazer a integração com o Mercado livre, delphi 7, e esbarrei em 2 coisas:
1ª  essa parte  da resposta do codigo de autorização q sempre da bad request;
2ª tentei desenrolar de uma outra forma com um código de autorização, porem não consigo fazer uma simples atualização de estoque.

alguém tem alguma sugestão ?? para me ajudar,


muito obrigado

Olá Ricardo A parte de token consegui fazer sem problema, agora só estou enrolado mesmo é com usuários teste.

dbase oHTTP = CreateObject("MSXML2.ServerXMLHTTP")  
//dbase oHTTP = CreateObject("Microsoft.XMLHTTP")
//Carrega serviço do windows para conexões http

//Buscar TOKEN
&curl = 'https://api.mercadolibre.com/oauth/token?client_id='+trim(ID_API)+'&client_secret='+trim(SecretKeyAPI)+'&grant_type=client_credentials'
dbase oHTTP.Open("POST", [!&curl!], .F.)
dbase oHTTP.Send()
dbase [!&nretorno!] = oHTTP.status
dbase [!&cretornotxt!] = oHTTP.responseText
dbase [!&cretornoxml!] = oHTTP.responseXML 
 

 

Link para o comentário
Compartilhar em outros sites

Em 06/11/2020 at 19:03, alvaro.hoffmann disse:

Olá Ricardo A parte de token consegui fazer sem problema, agora só estou enrolado mesmo é com usuários teste.

dbase oHTTP = CreateObject("MSXML2.ServerXMLHTTP")  
//dbase oHTTP = CreateObject("Microsoft.XMLHTTP")
//Carrega serviço do windows para conexões http

//Buscar TOKEN
&curl = 'https://api.mercadolibre.com/oauth/token?client_id='+trim(ID_API)+'&client_secret='+trim(SecretKeyAPI)+'&grant_type=client_credentials'
dbase oHTTP.Open("POST", [!&curl!], .F.)
dbase oHTTP.Send()
dbase [!&nretorno!] = oHTTP.status
dbase [!&cretornotxt!] = oHTTP.responseText
dbase [!&cretornoxml!] = oHTTP.responseXML 
 

 

entendi, legal dessa forma tb.
ref. ao usuario de teste nem tentei, estou usando com o meu usuario mesmo
vou tentar fazer alteração de produtos, e aproveitar essa sua dica tb.
pq qdo tento atualizar produto ele retorna com bad request, tenho q ver o q esta errado
deve ser uma coisa muito simples, mas vamos la,

assim q eu tiver mais informações coloco aqui .

vlww

 

Link para o comentário
Compartilhar em outros sites

  • 5 semanas depois ...

Saudações Senhores...

Também estou engajado no desenvolvimento de uma solução em Lazarus com INDY... já consegui inclusive baixar os pedidos realizados por compradoes e vendedores (Teste)...

para a criação do Usuário teste Utilizem essa URL no Post: https://api.mercadolibre.com/users/test_user?access_token=accesToken e no body o seguinte Json: 

{
   	"site_id":"MLB"
}

a Resposta será os dados do Usuário TESTE... 

Voçe também pode utilizar os cartões de crédito Teste: https://www.mercadopago.com.br/developers/en/guides/resources/localization/local-cards/

Mas algo que gostaria de saber se algum de vocês que estão trabalhando no projeto conseguiu e como pegar o retorno dentro do seu aplicativo o TG_KEY? Pois só consigo altenticar na página do navegador e logo depois copiando a TG e colando a mesma na URL que preciso para gerar o TOKEN.

Editado por Edvaldo Soares da Silva
Link para o comentário
Compartilhar em outros sites

Em 07/12/2020 at 15:51, Edvaldo Soares da Silva disse:

Saudações Senhores...

Também estou engajado no desenvolvimento de uma solução em Lazarus com INDY... já consegui inclusive baixar os pedidos realizados por compradoes e vendedores (Teste)...

para a criação do Usuário teste Utilizem essa URL no Post: https://api.mercadolibre.com/users/test_user?access_token=accesToken e no body o seguinte Json: 


{
   	"site_id":"MLB"
}

a Resposta será os dados do Usuário TESTE... 

Voçe também pode utilizar os cartões de crédito Teste: https://www.mercadopago.com.br/developers/en/guides/resources/localization/local-cards/

Mas algo que gostaria de saber se algum de vocês que estão trabalhando no projeto conseguiu e como pegar o retorno dentro do seu aplicativo o TG_KEY? Pois só consigo altenticar na página do navegador e logo depois copiando a TG e colando a mesma na URL que preciso para gerar o TOKEN.

Como voce conseguiu fazer os usuarios testes? 

Estou fazendo o teste e me retorna erro

{
    "message": "Invalid Client Id",
    "error": "bad_request",
    "status": 400,
    "cause": []
}
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
Em 22/12/2020 at 08:05, Edvaldo Soares da Silva disse:

Caro colega Natan

você já tem o access Token? é preciso essa "chave" para gerar os usuário testes que deverá ser enviado  um POST com a URL mencionada acima.

Nao tenho pois segundo a documentacao do ml eu preciso ja ter um usuario para ter essa chave

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...
Em 10/09/2020 at 10:14, wilsonaaugusto disse:
Em 10/09/2020 at 10:14, wilsonaaugusto disse:

Estou começando uma integração com o Mercado Livre. Tenho como ferramentas para trabalhar o Delphi 7 + Indy 9.
Seguindo o tutorial deles, iniciei os teste da API usando a minha conta pessoal. Criei um app usando o exemplo deles em Node.js e publiquei no Heroki. De posse o ID do aplicativo, fiz a etapa de Autenticação e obtive um token.
Estou parado na etapa de Autorização, usando o código a seguir, não otenho o JSOn de resposta:

procedure TForm1.bt_PostClick(Sender: TObject);
var
  st_URL : string;
  lParams: TStringList;
  lResponse: TStringStream;
begin

  st_URL := 'https://api.mercadolivre.com.br/oauth/token';

  lParams := TStringList.Create;
  lResponse := TStringStream.Create('');
  try
    try

      lParams.Add('grant_type=authorization_code');
      lParams.Add('client_id=1855429386918006');
      lParams.Add('client_secret=G6GxJmvOOwTrXnKNXv4a1whydOQzuoMo');
      lParams.Add('code=TG-5f493b5c2d38620006aa18f8-201010794');
      lParams.Add('redirect_uri=https://minhaappteste0.herokuapp.com/');

      IdHTTP1.Response.ContentType := 'application/json';

      IdHTTP1.Post(TIdURI.URLEncode(st_URL), lParams, lResponse);

      lResponse.Position := 0;
      mmResultado.Lines.LoadFromStream(lResponse);

    except
      on E: Exception do
      begin
        mmResultado.Lines.Add('Error on request: '#13#10 + e.Message);
        Exit;
      end;
    end;
  finally
    lParams.Free();
    lResponse.Free();
  end;
end;

Algúem poderia me ajudar com alguma dica?


 

Estou começando uma integração com o Mercado Livre. Tenho como ferramentas para trabalhar o Delphi 7 + Indy 9.
Seguindo o tutorial deles, iniciei os teste da API usando a minha conta pessoal. Criei um app usando o exemplo deles em Node.js e publiquei no Heroki. De posse o ID do aplicativo, fiz a etapa de Autenticação e obtive um token.
Estou parado na etapa de Autorização, usando o código a seguir, não otenho o JSOn de resposta:

procedure TForm1.bt_PostClick(Sender: TObject);
var
  st_URL : string;
  lParams: TStringList;
  lResponse: TStringStream;
begin

  st_URL := 'https://api.mercadolivre.com.br/oauth/token';

  lParams := TStringList.Create;
  lResponse := TStringStream.Create('');
  try
    try

      lParams.Add('grant_type=authorization_code');
      lParams.Add('client_id=1855429386918006');
      lParams.Add('client_secret=G6GxJmvOOwTrXnKNXv4a1whydOQzuoMo');
      lParams.Add('code=TG-5f493b5c2d38620006aa18f8-201010794');
      lParams.Add('redirect_uri=https://minhaappteste0.herokuapp.com/');

      IdHTTP1.Response.ContentType := 'application/json';

      IdHTTP1.Post(TIdURI.URLEncode(st_URL), lParams, lResponse);

      lResponse.Position := 0;
      mmResultado.Lines.LoadFromStream(lResponse);

    except
      on E: Exception do
      begin
        mmResultado.Lines.Add('Error on request: '#13#10 + e.Message);
        Exit;
      end;
    end;
  finally
    lParams.Free();
    lResponse.Free();
  end;
end;

Algúem poderia me ajudar com alguma dica?


 

Bom dia, estou criando o projeto em C# e estou com uma dúvida. A variável "Code" é criada ou o mercado livre envia?

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois ...
  • Moderadores
5 minutos atrás, Guilherme Martin Ewz disse:

Requires indyCore70, é necessário instalar outro indy? 

exatamente Indy e para Delphi 7 pelo que percebi

  • Curtir 1
Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...

Acabei de autenticar agora aqui..

O processo é bem documentado aqui: https://developers.mercadolivre.com.br/pt_br/autenticacao-e-autorizacao#Enviar-access-token-no-header

 

Alguns passos pra resumir

  1. Gerar o teu app lá dentro do ML com a opção offline_write!
  2. Requisitar um REFRESH TOKEN , passando o APPID e APPSECRET e URLREDIRECT 
  3. Com esse REFRESH TOKEN gerar um ACCESS TOKEN, válido por 6 meses
  4. COm o ACCESS TOKEN é só partir pro abraço

O certo seria fazer um componente TAuthMeli pra facilitar tudo, estou pensando em fazer essa!

 

Forte abraço a todos

 

Ambiente testado: Rad Studio 10.3.3 com componentes REST

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

Lembrando que o ML devolve o teu primeiro REFRESH TOKEN no NAVEGADOR, na URL!

Não utilizei o TWebBrowser padrão do delphi por não ser compativel com o mercadolivre.com.br. Utilizei o ChromiumFX , projeto de código aberto para fazer um navegador a parte do sistema!

Link do navegador chromium , packages e etc:

https://github.com/salvadordf/CEF4Delphi

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Boa tarde.

Também estou tentando desenvolver a integração e já fiz todos os testes pelo Postman mas ao tentar importar uma ordem usando Delphi/Indy com o código abaixo:

 

var
  lHTTP: TIdHTTP;
  IdSSLIOHandlerSocketOpenSSL: TIdSSLIOHandlerSocketOpenSSL;
begin
  pUrl:= https://api.mercadolibre.com/orders/search?seller=99999999999&order.status=paid

  lHTTP:= TIdHTTP.Create(nil);
  try
    IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method:= sslvTLSv1_2;
    try
      lHTTP.IOHandler := IdSSLIOHandlerSocketOpenSSL;
      Try
        lHTTP.Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + pToken);
        Result:= lHTTP.Get(pUrl);

Recebo a mensagem abaixo:

Result '<!DOCTYPE html><!--if lt IE 7 ]><html class="ie ie6" lang="en">--><!--if IE 7 ]><html class="ie ie7" lang="en">--><!--if IE 8 ]><html class="ie ie8" lang="en">--><!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]--><head><meta charset="utf-8"><title></title><meta name="description"><meta name="author" content="MercadoLibre"><link rel="stylesheet" href="/apidoc/assets/css/pygments.css"><link rel="stylesheet" href="/apidoc/assets/css/api_options.css"></head><body><div class="content"><h1></h1><h2></h2><nav class="tabs"><ul><li><a tabindex="1" href="#json">Results</a></li><li><a tabindex="2" href="#options">API Documentation</a></li></ul></nav><div class="tabcontents"><section id="json"><p class="expand-controls"><a id="collapse-all">collapse all</a><a id="expand-all">expand all</a></p><div class="highlight"><pre>'#$A'<span class="p">{<span class="collapsible">'#$A'  <span class="nt">"error"</span><span class="p">:</span> <span class="s2">"resource not found"</span>,'#$A'  <span class="nt">"message"</span><span class="p">:</span> <span class="s2">"Si quieres conocer los recursos de la API que se encuentran disponibles visita el Sitio de Desarrolladores de MercadoLibre (http://developers.mercadolibre.com)"</span>'#$A'</span>}</span></pre></div></section><section id="options"><dl class="glossary"></dl></section></div></div><footer>Copyright &copy; 2021 - MercadoLibre</footer><script src="/apidoc/assets/js/api_options.js"></script><script src="/apidoc/assets/js/require-jquery.js"></script><script>var collapseAll = $(''.highlight pre span:first'').html()[0]==''{'';'#$A'$(''.collapsible:not(:first)'').each(function(index, e) {'#$A' var e = $(e);'#$A' if(e.children().length > 0) {'#$A'  var expander = $(''<a class="expander"></a>'');'#$A'   expander.click(function() {'#$A'    e.trigger(''expand'');'#$A'   });'#$A'   e.before(expander);'#$A'  var collapser = $(''<a class="collapser"></a>'');'#$A'   collapser.click(function() {'#$A'    e.trigger(''collapse'');'#$A'   });'#$A'   e.parent().prepend(collapser);'#$A'   '#$A'  e.on(''collapse'', null, null, function() {'#$A'   collapser.hide();'#$A'   expander.show();'#$A'   $(this).hide();'#$A'   return false;'#$A'  });'#$A'  e.on(''expand'', null, null, function() {'#$A'   expander.hide();'#$A'   collapser.show();'#$A'   $(this).show();'#$A'   return false;'#$A'  });'#$A'  if(collapseAll) {'#$A'   e.trigger(''collapse'');'#$A'  } else {'#$A'   e.trigger(''expand'');'#$A'  }'#$A' }'#$A'});'#$A'$(document).ready(function() {'#$A' if(collapseAll) {'#$A'  $(''#expand-all'').css("display","inline-block");'#$A'  $(''#collapse-all'').css("display","none");'#$A' } else {'#$A'  $(''#collapse-all'').css("display","inline-block");'#$A'  $(''#expand-all'').css("display","none");'#$A' }'#$A' '#$A' $(''#collapse-all'').click(function() {'#$A'  $(''.collapsible:not(:first)'').trigger(''collapse'');'#$A'  $(this).css("display","none");'#$A'  $(''#expand-all'').css("display","inline-block");'#$A' });'#$A' $(''#expand-all'').click(function() {'#$A'  $(''.collapsible:not(:first)'').trigger(''expand'');'#$A'  $(this).css("display","none");'#$A'  $(''#collapse-all'').css("display","inline-block");'#$A' });'#$A' '#$A' '#$A' $(".collapsable").each (function (index, e) {'#$A'  var content;'#$A'  var next = e.nextSibling;'#$A'  while (next) {'#$A'   var dl = next.querySelector("dl");'#$A'   if (next.tagName == "DD" && dl) {'#$A'    content = dl;'#$A'    '#$A'    content.parentElement.insertBefore(document.createTextNode("\u00a0"), content);'#$A'    break;'#$A'   }'#$A'   '#$A'   next = next.nextSibling;'#$A'  }'#$A'  '#$A'  if (content) {'#$A'   e.content = content;'#$A'  }'#$A'  '#$A'  $(e).on ("click", function () {'#$A'   $(this).toggleClass("collapsed");'#$A'   $(this.content).toggleClass("hidden");'#$A'  });'#$A' });'#$A'});'#$A'</script></body><!-- </html>-->'

Pelos diversos testes que fiz percebi que passando ou não o Bearer token retorna o mesmo erro. Pelo Postman retorna corretamente o JSON com os dados da ordem.

Alguém sabe me dizer no que estou errando ?

Obrigado,

Marcello Cainelli

Doutor Byte Sistemas

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...

Tive um problema parecido para funciona no NuvemShop que so aceita com Bearer.

No meu caso eu tinha que passar no handle

 

    RESTRequest1.Params.Clear;

    RESTClient1.Authenticator := nil;

    RESTRequest1.Method         := TRESTRequestMethod.rmGET;
    RESTRequest1.AddAuthParameter('Authentication','bearer ' +
         FTOKEN,
         TRESTRequestParameterKind.pkHTTPHEADER, [poDoNotEncode]);

No meu caso tinha que passar: Authentication  no seu se for

    RESTRequest1.AddAuthParameter('Authorization','bearer ' +
         FTOKEN,
         TRESTRequestParameterKind.pkHTTPHEADER, [poDoNotEncode]);  se precisar de outros campos adicionar manulamente

 

tem caso que o "bearer" deve ser minusculo e com um espaço entre o FToken e com poDoNotEncode
    //  RESTRequest1.Accept     := 'application/json';
    // RESTClient1.ContentType := 'application/json';

    with RESTRequest1.Params.AddItem do
    begin
      name  := 'Content-Type';
      Value := 'application/json';
      ContentType := ctMULTIPART_FORM_DATA;
      Kind  := TRESTRequestParameterKind.pkREQUESTBODY;
    end;
    with RESTRequest1.Params.AddItem do
    begin
      name  := 'Accept';
      Value := 'application/json';
      ContentType := ctMULTIPART_FORM_DATA;
      Kind  := TRESTRequestParameterKind.pkREQUESTBODY;
    end;

    with RESTRequest1.Params.AddItem do
    begin
      name  := 'User-Agent';
      Value := 'SeApiWs ([email protected])';
      ContentType := ctMULTIPART_FORM_DATA;
      Kind  := TRESTRequestParameterKind.pkREQUESTBODY;
    end;

 


    RESTRequest1.Execute;

 

Funciona até no Rest Debuguer , so não pode usar o OAuth2AuthenticatorOauth diretamente

 

 

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...

Olá Pessoal !

Na API do Mercado Livre, alguem saberia me informar como faço para colocar a informação de garantia como "sem garantia" ? Pois os atributos encontrados somente mostram que devo informar valor numérico ( 1, 2, 3 etc ) e depois o tipo ( dias, meses ou anos ) mas não achei no site do ML a informação para colocar SEM GARANTIA. Alguem saberia como fazer ?

Grato,

Eduardo

Editado por Eduardo.Fonseca
Link para o comentário
Compartilhar em outros sites

  • Consultores
7 horas atrás, Eduardo.Fonseca disse:

Olá Pessoal !

Na API do Mercado Livre, alguem saberia me informar como faço para colocar a informação de garantia como "sem garantia" ? Pois os atributos encontrados somente mostram que devo informar valor numérico ( 1, 2, 3 etc ) e depois o tipo ( dias, meses ou anos ) mas não achei no site do ML a informação para colocar SEM GARANTIA. Alguem saberia como fazer ?

Grato,

Eduardo

Não sei dizer, mas tentou 0 ou -1 ?

Consultor SAC ACBr

Victor H Gonzales - Pandaaa
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

Link para o comentário
Compartilhar em outros sites

  • 5 meses depois ...

Boa tarde meus amigos, como estão?

 

Estou tentando subir uns anúncios pelo ERP aqui da minha empresa e estou com o seguinte problema,

Se o anúncio for maior do que R$ 79,00 funciona perfeitamente, porém, se o anúncio for menor do que esse valor, da um erro

 

"Free shipping costs exceeds sale"

 

Acontece que para o frete sair grátis o produto precisa ter um valor maior ao mencionado, e pra piorar eu não estou achando a forma de entrega 

para produtos com valores menores na documentação da API, alguém que fez implementação pode me auxiliar por favor? 

 

Obrigado!

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...
Em 04/07/2021 at 22:39, Thobias Sobczak disse:

Lembrando que o ML devolve o teu primeiro REFRESH TOKEN no NAVEGADOR, na URL!

Não utilizei o TWebBrowser padrão do delphi por não ser compativel com o mercadolivre.com.br. Utilizei o ChromiumFX , projeto de código aberto para fazer um navegador a parte do sistema!

Link do navegador chromium , packages e etc:

https://github.com/salvadordf/CEF4Delphi

Oi, que bacana, tenho um importador de pedidos do mercado livre, funciona muito bom com componentes nativos... 

esbarrei na impressão de etiquetas, retorna um "Resposta" diferente... não sei como tratar..

no POSTMAN quando mando o GET mostra a etiqueta bonitinha na aba BODY... como fazer isso com o Delphi?

Muito obrigado por qualquer retorno.

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 694 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.