我使用以下代码来获取持有者令牌:
$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;但是一直在输出:
{"errors":[{"label":"authenticity_token_error","code":99,"message":"Unable to verify your credentials"}]}
我哪里做错了?
发布于 2015-08-19 08:44:44
在与这个问题斗争了一段时间后,我发现问题是我从已经登录到Twitter的浏览器使用高级Rest客户端调用/oauth2/token。注销Twitter并再次调用API后,它工作得很好。
简而言之:在尝试请求持有者令牌时,请确保您还没有登录到Twitter的活动会话。
发布于 2015-09-10 03:42:14
我在这个问题上挣扎了一段时间,我找到的答案似乎都没有帮助。该错误的文档也是一个模糊的“有些地方出了问题”。
我的问题是,我使用的是我找到的代码的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!
);对我来说,问题是Authorization头使用的是键-值格式,而content-type头不是。这破坏了授权头。
以下是与错误99相关的其他一些需要检查的内容:
>H112,确保正在使用verbose logging以帮助调试。它应该包括SSL证书信息、授权头和内容类型头。这不会显示grant_type字段,只会显示headers。
当您最终获得访问令牌时,请确保将其缓存以避免速率限制。我相信你每15分钟就会收到450个请求。如果你不缓存你的访问令牌,其中的一半将会花在获取它上!
发布于 2018-09-30 06:28:15
这里已经有了一个公认的答案,但以防有人漫步到这篇文章,遇到了和我一样的问题……
供参考的推特文档-> OAuth 2.0 docs
误解#1:授权字符串是使用消费者密钥(又称API-Key)和消费者密钥代码(又称API Secret Key<>E210)生成的。与apps.twitter.com相比,这些凭据在developer.twitter.com上的UI中的显示不那么明显。尽管如此,常见的RIF问题。
误解#2:当base64对url连接的Consumer Key+":"+Consumer Secret进行编码时,这并不是一个误解,而是一个实现错误。如果不是以编程的方式执行此操作,请确保在base64编码的连接字符串中的任何位置(尤其是在:周围)检查处的空格。
还有一点建议postman有一个很棒的实用程序,它可以调用rest来检索oauth2.0令牌(以及其他身份验证令牌),当我试图使用需要oauth1.0令牌的api时,这个实用程序非常有用
https://stackoverflow.com/questions/23183050
复制相似问题