调用Twitter API request_token接口返回500内部错误问题求助
问题原因及修复方案
你遇到的500错误核心是OAuth签名生成逻辑存在多处不符合Twitter OAuth 1.0a规范的问题,具体错误点和修复方法如下:
- 错误1:request_token阶段错误携带oauth_token参数
OAuth 1.0a流程中,调用request_token接口是获取用户授权的第一步,此时你还未获得任何用户级的access token和对应的secret,不需要在签名的参数列表中加入oauth_token字段,签名密钥也只需要拼接<MY_CONSUMER_SECRET>&即可,末尾的&不需要跟token secret,留空即可。 - 错误2:签名基串中的API路径错误
你实际请求的接口是https://api.twitter.com/oauth/request_token,但签名基串中写入的路径多了/1.1前缀,修改为正确的编码后路径https%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token即可。 - 错误3:签名参数中加入了不存在的
include_entities=true
你本次request_token请求的所有参数(URL参数、Authorization头参数)中都没有include_entities字段,签名时加入不存在的参数会直接导致签名校验失败,删除该字段即可。 - 错误4:时间戳格式错误
OAuth 1.0规范要求的时间戳是Unix秒级时间戳,而JavaScript的Date.now()返回的是毫秒级时间戳,需要修改为Math.floor(Date.now() / 1000)生成秒级时间戳。 - 额外优化建议
不需要把oauth_callback放在URL参数中,仅在Authorization头中携带即可,同时确保签名前所有参数已经按照ASCII码顺序升序排列后再拼接。
内容的提问来源于stack exchange,提问作者Mike Luken
相关产品推荐
相关产品推荐

