• 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

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
  • 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

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