我必须为twitter Feed实现oAuth2 bearer访问令牌方法。我正确地关注了twitter开发者网站上的详细信息,但我一直得到“无法验证你的凭据twitter”......
如果我将我的凭据复制到我的开发服务器(5.3.10机器)我可以实际登录,获取令牌,检索推文,但在另一个客户端的服务器(5.2.17机器)我无法得到它使用完全相同的代码。
下面的代码中有任何关于PHP差异的事情吗?我相信它必须与file_get_content https流包装选项有关,但我在文档中找不到任何关于它的内容。 (Openssl支持安装在客户端服务器上)
$twitter_bearer_access_token = get_option('twitter_bearer_access_token', null);
if($twitter_bearer_access_token == null)
{
//Request a bearer access token
$encodedAccessToken = base64_encode(TWITTER_CONSUMER_KEY.':'.TWITTER_CONSUMER_SECRET);
//Setup the stream context options and create the stream to POST to twitter
$options = array(
'http' => array(
'method' => 'POST',
'header' => 'Authorization: Basic '.$encodedAccessToken,
'content' => 'grant_type=client_credentials',
),
);
$context = stream_context_create($options);
$result = json_decode(@file_get_contents('https://api.twitter.com/oauth2/token', false, $context));
if(isset($result->token_type) && $result->token_type == 'bearer')
{
$twitter_bearer_access_token = $result->access_token;
update_option('twitter_bearer_access_token', $twitter_bearer_access_token);
}
else
{
$twitter_bearer_access_token = false;
}
}
编辑#1
我事先确认两台服务器上的所有变量都是相同的,我输出并比较它们。只有file_get_contents返回不同的结果。
另外,我尝试将5.3服务器上获取的承载访问令牌复制到5.2服务器,但值仍然匹配,但我一直收到有关无效身份验证的错误...
编辑#2
更多信息,它似乎与我发送的标题没有任何关系,我添加了几乎所有标题,除了那些与我无关的标题,如代理标题。它与PHP 5.2或5.3没有任何关系,在我们的登台服务器主机上测试并切换到5.2并且仍然有效...
答案 0 :(得分:0)
似乎使用cURL工作正常。考虑到我们想要限制我们的依赖关系,我们只需要使用两个版本的代码(或者最终使用可交换组件来检索远程数据)
//Init curl
$request = curl_init();
curl_setopt($request, CURLOPT_SSLVERSION, 3);
curl_setopt($request, CURLOPT_URL, 'https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name='.TWITTER_ACCOUNT.'&count=100');
curl_setopt($request, CURLOPT_HTTPHEADER, array('Authorization: Bearer '.$twitter_bearer_access_token));
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
$result = json_decode($content = curl_exec($request));
curl_close($request);
多数民众赞成
PS:这仍然没有任何理由失败,这只是一个后备!