Twitter 1.1 OAuth authenticity_token_error(99)

Ale*_*mar 6 php curl twitter-oauth

我使用以下代码来获取持票人令牌:

$token = base64_encode($client_id.':'.$client_sec);

$data = array ('grant_type' => 'client_credentials');
$data = http_build_query($data);

$header = array(
    'Authorization: Basic '.$token,
    'Content-type: application/x-www-form-urlencoded;charset=UTF-8',
    'Content-Length: ' . strlen($data)
);

$options = array(
    CURLOPT_HTTPHEADER => $header,
    CURLOPT_HEADER => false,
    CURLOPT_URL => 'https://api.twitter.com/oauth2/token',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POSTFIELDS => $data
);

$ch = curl_init();
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
curl_close($ch);
print_r($result);
exit;
Run Code Online (Sandbox Code Playgroud)

但是一直输出:

{"errors":[{"label":"authenticity_token_error","code":99,"message":"Unable to verify your credentials"}]}

我做错了什么?

Phi*_*ley 16

在与这个问题斗争了一段时间后我发现问题是我正在使用Advanced Rest Client从我已经登录到Twitter的浏览器中调用/ oauth2/token.退出Twitter并再次进行API调用后,它运行正常.

简短回答:确保在尝试请求承载令牌时,您还没有登录到Twitter的活动会话.


Rad*_*ire 5

我挣扎了一段时间,我找到的答案似乎都没有帮助.错误的文档也是一个模糊的"出错了".

我的问题是我使用的是我找到的代码mashup,并且标头未正确使用:

$headers = array(
    'Authorization' => 'Basic ' . base64_encode($appid . ':' . $secret), // WRONG!!!

    'Authorization: Basic ' . base64_encode($appid . ':' . $secret),     // Correct!
    'Content-Type: application/x-www-form-urlencoded;charset=UTF-8',     // Correct!
);
Run Code Online (Sandbox Code Playgroud)

对我来说,问题是Authorization标头使用的是键值格式,而内容类型标头则不是.这打破了授权标题.

以下是要检查的其他一些与错误99相关的事情:

  1. 验证您的凭据是否正确并且是base64编码的(参见上文)
  2. 确保请求使用POST
  3. 确保设置了内容类型(见上文)
  4. 确保将grant_type = client_credentials作为帖子字段包含在内.
  5. SSL是必需的,请确保正在使用(https://)
  6. 尝试详细日志记录以帮助调试.它应包括SSL证书信息,授权标头和内容类型标头.这不会显示grant_type字段,只显示标题.
  7. 如果一切看起来都不错但仍然无效,那么您可能会受到速率限制.每15分钟重置一次限额.

当您最终获得访问令牌时,请确保将其缓存以避免速率限制.我相信你每15分钟就会收到450个请求.如果您不缓存它,其中一半将用于获取访问令牌!