使用PIN式OAuth调用Twitter REST API home_timeline接口报220错误求助
解决Twitter API Error 220: 凭证无权访问资源的问题
看到你遇到了error: Your credential not allow to access this resource; error code :220的问题,虽然已经设置了应用读写权限并通过PIN式流程获取了令牌,这个错误还是挺常见的,咱们一步步排查:
1. 先确认访问令牌的实际权限范围
你说应用设置了读写权限,但令牌本身的权限可能和应用设置不匹配——比如用户授权时,应用的权限还没更新,或者PIN流程中没有正确请求到读取权限。
你可以调用account/verify_credentials.json接口来验证令牌的权限:
# 示例Python代码(根据你的实际开发语言调整) import requests from requests_oauthlib import OAuth1 auth = OAuth1( 'YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET', 'YOUR_ACCESS_TOKEN', 'YOUR_ACCESS_TOKEN_SECRET' ) response = requests.get('https://api.twitter.com/1.1/account/verify_credentials.json', auth=auth) print(response.json().get('scope'))
如果返回的scope里没有read,说明令牌没有读取时间线的权限,需要重新走PIN授权流程,确保用户授权时应用的读写权限已经生效。
2. 检查OAuth签名是否正确
PIN式流程的签名很容易踩坑,这是错误220的高发原因:
- 确保所有OAuth参数(
oauth_consumer_key、oauth_token、oauth_signature_method等)按字母顺序排序后再参与签名生成 - 所有参数值和URL都要做正确的URL编码(比如空格转
%20,特殊字符转对应编码) - 签名方法必须是
HMAC-SHA1(Twitter v1.1默认要求)
你可以用Postman等工具手动构造请求,对比你代码生成的签名是否一致,排除代码里的签名逻辑错误。
3. 确认应用的回调设置是否正确
PIN式授权要求应用的回调地址设置为oob("out of band"),如果你的应用后台回调地址填了其他值,会导致授权流程生成的令牌权限异常。去Twitter开发者后台的应用设置里,检查Callback URI / Redirect URL是否设为oob。
4. 重新生成访问令牌试试
有时候令牌生成过程中会出现隐性错误,比如请求令牌和访问令牌的配对出错。建议你重新走一遍完整的PIN授权流程:
- 获取请求令牌(确保回调是
oob) - 引导用户访问授权URL,获取PIN码
- 用PIN码交换访问令牌
- 用新生成的令牌测试
home_timeline接口
5. 检查开发者账号和应用状态
如果以上都没问题,去Twitter开发者后台看看:
- 应用是否处于"激活"状态,有没有被限制访问API
- 你的开发者账号是否通过了基础审核(新账号可能需要完成一些验证步骤才能访问全部接口)
先从权限验证和签名检查这两点入手,这是解决错误220最有效的方向。
内容的提问来源于stack exchange,提问作者Anand
相关产品推荐
相关产品推荐

