• 0
Sign in to follow this  
rafael

Dúvida sobre a página de redirecionamento de autenticação

Question

Senhores, boa noite.

Trabalhamos com uma ferramenta que envia os produtos de nossos clientes para diversos marketplaces e o processo de seleção de categorias do mercadolivre ocorre após digitação de todos os dados do produto no nosso sistema. 
Ocorre que ao chegar na parte de seleção das categorias o token pode ter expirado ou pode existir qualquer problema e com isso precisamos autenticar novamente e aí começa o problema.

A autenticação do mercadopago não ocorre por trás, exigindo que nós façamos uma chamada para o endereço de autenticação e este endereço retorna com o code na querystring e isso quebra toda nossa lógica.

A solução que criamos foi : Se ao chegar na parte de digitação de dados o token tiver expirado, surge um botão que ao ser clicado abre um pop-up onde o usuário irá fazer a autenticação. Após autenticação o mercadopago retorna para uma página específica e salvamos  o code em banco de dados para então usarmos no restante da aplicação porém, por alguma razão que não entendemos, nós só conseguimos usar o token gerado , dentro da própria página de redirecionamento.

Se eu chamar isso :      ML.Authorize(code, "http://XXXX.com.br/marketplace/autenticacao.aspx")e salvar o code no banco, eu não consigo abrir uma página chamada cadastro.aspx e usar este token, mas em compensação o mesmo código da www.com.br/cadastro.aspx , se estiver na autenticacao.aspx roda normalmente.

Por acaso o token do mercadolivre não é válido para toda a aplicação ? Cada página que vai usar o código precisa de uma autorização ?
 

Share this post


Link to post
Share on other sites

6 answers to this question

Recommended Posts

  • 0

Faça refresh_token, assim não terá query string, nem necessidade de janela de autenticação.

mantenha uma tabela das categorias e a atualize uma vez por dia.

É mercadopago ou mercadolivre??

Cada página verifica o access_token, guarde-o e só faça o refresh_token se tiver mensagem de token expirado

Share this post


Link to post
Share on other sites
  • 0

Rodrigo, desculpe mas não entendi como funciona o processo de autenticação sem redirect.

Atualmente antes de enviar um produto para o mercadolivre eu faço este processo de autenticação que envio abaixo : 
 

Function autenticar(ByVal conexao As conexao) As Boolean
 
        Dim client_id As String 
        Dim client_secret As String 
        Dim code As String 
 
        Using MarketPlace As New MarketPlace(conexao)
            With MarketPlace
                .ID = MarketPlaces.mercadolivre
                .CarregarDados()
                client_id = .usuario.Trim
                client_secret = .senha.Trim
                code = .token.Trim
            End With
        End Using
 
        ML = New MercadoLivre.MercadoLivre(client_id, client_secret)
        Try
            ML.Authorize(code, Empresa.url & "/marketplace/mercadolivre_autorizar.aspx")
            Return True
        Catch ex As Exception
            Response.Write("o token não é mais válido, tem que autenticar novamente")
            Return False
        End Try
        Return False
    End Function

Quando ele não autoriza eu faço isso : 

   Dim ML As MercadoLivre.MercadoLivre = New MercadoLivre.MercadoLivre(client_id, client_secret)
   Dim redirectUrl As String = ML.GetAuthUrl(Empresa.url & "/marketplace/mercadolivre_autorizar.aspx")
   Response.Redirect(redirectUrl)
 
 
Como é que eu consigo o token sem ser por este processo do getAuthURL ?
 
Obrigado

 
 

Share this post


Link to post
Share on other sites
  • 0

Rodrigo,

Achei na API como obter o token via server side mas quando tento acionar ele reclama que o code está expirado e para obter um novo só consigo via post para aquela URL que tem acima.
Isso ocorre toda hora.. Passa alguns minutos e ele expira e faz eu gerar outro CODE.

Ainda estou confuso com este processo de autenticação. Pelo que entendi primeiro é preciso obter o CODE e isso é sempre via post e client side.
( este code não deveria ser único e eu só precisar autorizar uma vez ?? )

Depois de obtido o code é feito um post para obter o access_token e o refresh_token

Depois tem uma informação muito esquisita na documentação que explica que usa o refresh_token pra obter outro refresh_token , e aí eu não entendi mais nada :

>Once the access token expires, a consumer can use the refresh token to refresh that token and get a new *refresh_token* to refresh it again when it expires.

 

Será que alguém consegue me dar uma explicação mais clara sobre isso ? Porque quando mando autenticar ele fica me obrigando a gerar novo CODE toda hora ?

Share this post


Link to post
Share on other sites
  • 0

Pessoal,

Finalmente consegui entender a lógica do negócio e achei meu erro. 
Eu havia entendido que a autenticação é um processo que precisava ser feito sempre que fosse acessar qualquer coisa do ML mas na verdade a lógica é outra.
Se alguém passar pela mesma dificuldade segue o que entendi e o que deu certo para mim. Administradores fiquem a vontade para corrigir se estiver errado.

1 - Acessa https://auth.mercadolibre.com.ar/authorization?response_type=code&client_id="& ClientId & "&redirect_uri="
2 - Esta URL vai retornar para a url do parâmetro redirect_uri com um parâmetro chamado CODE
3 - Fazer um post para /oauth/token?grant_type=authorization_code&client_id={client_id}&client_secret={client_secret}&code={code}&redirect_uri={redirect_uri}" com o CODE recebido
4 - este post vai retornar um json com access_token e refresh_token. Estes dois dados devem ser salvos no banco de dados

 Agora na hora de acionar qualquer método da API basta instanciar a classe passando o cliente_id, secret_id e o acess token e usar o método normalmente.

E quando o token expirar, deve usar o /oauth/token?grant_type=refresh_token&client_id={client_id}&client_secret={client_secret}&refresh_token={refresh_token} com o REFRESH TOKEN para obter um novo token e um novo refresh token que devem ser salvos no banco de dados.

Abralos
 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this