我必须为 twitter 提要实现 oAuth2 不记名访问令牌方法。我正确遵循了 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 并且仍然可以工作......