vk.com获取令牌始终给access_token已过期

时间:2017-06-14 13:01:57

标签: python vk

我正在测试vk.com api以便能够执行搜索。 我可以获得令牌,但是当我使用它时,它总是返回错误:" access_token已过期" 请您帮忙看看代码是否错误,或者是vk配置?

非常感谢

import vk
import requests

url = 'https://oauth.vk.com/access_token?client_id=myClient&client_secret=mySecret&v=5.65&grant_type=client_credentials'
request = requests.get(url).json()
access_token = request["access_token"]

session = vk.Session(access_token)
api = vk.API(session)
search = api.search.getHints(q='python')

错误:

File "C:\Users\gabri\AppData\Local\Programs\Python\Python36-32\lib\site-packages\vk\api.py", line 173, in __call__
    return self._api._session.make_request(self)
  File "C:\Users\gabri\AppData\Local\Programs\Python\Python36-32\lib\site-packages\vk\api.py", line 102, in make_request
    raise error
vk.exceptions.VkAPIError: 28. Application authorization failed: access_token has expired.. request_params = {'oauth': '1', 'method': 'search.getHints', 'q': 'python'}

1 个答案:

答案 0 :(得分:6)

我们可以手动获取令牌跟踪网址

https://oauth.vk.com/authorize?client_id=APPLICATION_CLIENT_ID&display=page&redirect_uri=https://oauth.vk.com/blank.html&scope=SCOPE&response_type=token&v=5.65

,其中

  • APPLICATION_CLIENT_ID是您的应用程序ID之一,可以找到托管应用程序的完整列表here

  • SCOPE是逗号分隔permissions

  • 的列表

如果我们查看有关search.getHints method的文档,我们会发现

  

可以通过Implicit Flow在Standalone-app中收到用户令牌来调用此方法。所需的访问权限:朋友和群组

所以我们的SCOPE可能与friends,groups一样(我们也可以添加offline权限来制作“永恒”令牌,但这不安全)

因此,我们用于为ID为1的应用生成令牌的网址可能类似于

https://oauth.vk.com/authorize?client_id=1&display=page&redirect_uri=https://oauth.vk.com/blank.html&scope=friends,groups&response_type=token&v=5.65

在关注此链接后,将会有类似

的表单

accessing request from application

我们必须检查它是否是我们的应用程序并单击Allow,之后我们将被重定向,并且令牌将位于重定向页面URL中,我们最终可以从中获取令牌:

redirect