• 0
Sign in to follow this  
Ademar Izu

Python - Can't get oauth_token

Question

Olá, estou tentando conseguir o oauth_token para minha aplicação (server side), consigo o code a partir do https://auth.mercadolibre.com/authorizationou usando o próprio SDK python fornecido (MELI-PYTHON-SDK-1.0.0), mas ao pedir o oauth_token, recebo o seguinte erro:



ERROR:tornado.application:Uncaught exception GET /callback?code=TG-XXXXXXXXXXXXXXXX-11893996&state=xbQC3nPIqp3sB1zWiWAMDB1OGYa0HO (XXX.XXX.XXX.XXX)
HTTPServerRequest(protocol='http', host='xxx.xxxx.com', method='GET', uri='/callback?code=TG-XXXXXXXXXXXXXXXX-11893996&state=xbQC3nPIqp3sB1zWiWAMDB1OGYa0HO', version='HTTP/1.1', remote_ip='XXX.XXX.XXX.XXX', headers={'Accept-Language': 'pt,en;q=0.8,en-US;q=0.6,es;q=0.4', 'Accept-Encoding': 'gzip, deflate, sdch', 'X-Forwarded-Host': 'xxx.xxxxx.com', 'X-Forwarded-For': 'XXX.XXX.XXX.XXX', 'Upgrade-Insecure-Requests': '1', 'Host': 'xxx.xxxxx.com', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36', 'Connection': 'Keep-Alive', 'Cookie': 'fbm_XXXXXXXXXX=base_domain=.xxxxxx.com; fbm_XXXXXXXX=base_domain=.xxxxxx.com; _ga=XXXXXXX; msid=XXXXXXXXXXXXX', 'X-Forwarded-Server': 'xxx.xxxxx.com'})
Traceback (most recent call last):
File "/Users/ademarizu/Dev/virtualEnvs/google/lib/python2.7/site-packages/tornado/web.py", line 1443, in _execute
result = method(*self.path_args, **self.path_kwargs)
File "/Users/ademarizu/Dev/git/com.xxxxxx.oauth/src/main/py/myoauth/handler/authorization.py", line 51, in get
oauth_token = ml.authorize(self.extract_code(), "https://xxx.xxxxx.com/ademar/oauth/result")
File "/Users/ademarizu/Dev/git/com.xxxxxxx.oauth/src/main/py/myoauth/meli.py", line 50, in authorize
response.raise_for_status()
File "/Users/ademarizu/Dev/virtualEnvs/google/lib/python2.7/site-packages/requests/models.py", line 840, in raise_for_status
raise HTTPError(http_error_msg, response=self)
HTTPError: 400 Client Error: Bad Request for url: https://api.mercadolibre.com/oauth/token?code=TG-XXXXXXXXXXXXXXXX-11893996&client_secret=xxxxxxxxxxxxxxxxxxx&grant_type=authorization_code&client_id=XXXXXXXXXXXXXXX&redirect_uri=https%3A%2F%2Fxxxx.xxxxxxx.com%2Fademar%2Foauth%2Fresult

Tentei tanto com o Meli Python SDK quanto usando uma solução própria (com a qual consigo autenticar normalmente no Facebook, LinkedIn e Github), mas com o MercadoLibre está impossível. 


 


Tentei até via cURL 



curl -X POST -H 'User-Agent: MELI-PYTHON-SDK-1.0.0' -H 'Content-Type: application/json' -H 'Accept: application/json' 'https://api.mercadolibre.com/oauth/token?grant_type=authorization_code&client_id=<my_client_id>&client_secret=<my_client_secret>&code=TG-<code_received>&redirect_uri=<my_callback>'

Infelizmente informa que apenas que faltam parâmetros no request, será que alguém poderia me informar que parâmetros são esses?


 


Ah, se eu especificar a API VERSION, 3.0, mas sem o redirect_uri, o mesmo lança uma mensagem a mais, dizendo que alguns parâmetros são obrigatórios:



{"message":"The following parameters are required: client_id,client_secret,grant_type,code,redirect_uri,caller.admin. Missing parameter redirect_uri","error":"invalid_request","status":400,"cause":[]}

A chamada via cURL:



curl -X POST -H 'User-Agent: MELI-PYTHON-SDK-1.0.0' -H 'Content-Type: application/json' -H 'Accept: application/json' 'https://api.mercadolibre.com/oauth/token?grant_type=authorization_code&client_id=<my_client_id>&client_secret=<my_client_secret>&code=TG-<code_received>&version=3.0'

Mesmo se eu adicionar esses parâmetros que dizem ser obrigatórios (o caller.admin eu coloco como null, pois não faço a menor idéia do que seja), continuo recebendo o mesmo erro de que falta parâmetros no request.



{"message":"Wrong number of parameters","error":"invalid_request","status":400,"cause":[]}

Alguém tem a solução para isso?!


Share this post


Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Refiz meu teste usando a biblioteca "requests" para tal, 

import requests

url = "https://api.mercadolibre.com/oauth/token?grant_type=authorization_code&client_id=%s&client_secret=%s&code=%s&redirect_uri=%s" %(self.config.client_id, self.config.client_secret, self.extract_code(), "https://myserver.com/result")

result = requests.post(url)

Então com esse código (ou algo bem próximo disso), recebi esse resultado:

DEBUG:myoauth.handler.authorization:RESULT {"message":"The redirect_uri does not match the original","error":"invalid_grant","status":400,"cause":[]}

Finalmente uma mensagem de erro útil!

 

Alterei o redirect_uri para o mesmo valor que estava configurado na minha aplicação e finalmente consegui o bendito token!

DEBUG:myreksoauth.handler.authorization:RESULT {"access_token":"APP_USR-JAoijaoidfjaoidsjsaoijfaoj","token_type":"bearer","expires_in":21600,"scope":"offline_access read","user_id":XXXXXXXX,"refresh_token":"TG-asdjfoaisdjfoaisdjfaosijfaosi"}

Espero que isso consiga ajudar mais alguém!

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