Facebook API:/ oauth / access_token无效

时间:2013-03-23 13:39:46

标签: php facebook facebook-php-sdk

我正在尝试使用PHP-SDK从Facebook获取用户访问令牌。服务器端登录过程非常有效,重定向到正确的页面并提供$code

重定向(并检查$code是否存在)后,我调用以下API方法来交换$code用户令牌(此处禁止API参数):

$fb->api('/oauth/access_token',array(
    'client_id'     => APP_ID,
    'client_secret' => APP_SECRET,
    'redirect_uri'  => REDIRECT_URI,
    'code'          => $code
));

$fb_token = $fb->getAccessToken();
echo $fb_token;

不幸的是,我从这个脚本获得的只是app令牌。实际上,将脚本简化为以下内容没有任何区别:

$fb_token_user = $fb->getAccessToken();
echo $fb_token_user;

所以我认为所有关于/oauth/access_token调用都是出于某种原因无法正常工作或至少没有采取任何行动。它也不会返回任何错误。

我已尝试并测试过多种替代方案,例如Facebook教程中建议的get_file_contents()方法,以及在上述API调用中添加其他参数(例如type=client_cred等),但从未成功

有人知道为什么API调用不起作用吗?是脚本还是Facebook上的应用程序设置?

提前致谢!

2 个答案:

答案 0 :(得分:2)

解决了!问题中的代码仍然没有工作,尽管有这么多线程和其他社区声明它(奇怪的是它似乎适用于them

所以我认为我必须回到Facebook所解释的file_get_contents()方法,结果发现此方法以前无效,因为我的服务器上禁用了allow_url_fopen。我不想承担启用它的风险,我发现cURL是一种解决方法。

这是工作代码:

// cURL Load Function
function cURLget ($ch_url) {
  $ch = curl_init();
  curl_setopt($ch,CURLOPT_URL,$ch_url);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
  curl_setopt($ch,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
  $ch_send = curl_exec($ch);
  curl_close($ch);
  return $ch_send;
};

// Obtain User Token
$fb_token_get = cURLget("https://graph.facebook.com/oauth/access_token"
  . "?client_id=" . APP_ID
  . "&client_secret=". APP_SECRET
  . "&redirect_uri=" . urlencode(REDIRECT_URI)
  . "&code=" . $CODE
);
$fb_token_params = null;
parse_str($fb_token_get,$fb_token_params);

// Print Token Data
echo "Token: " . $fb_token_params['access_token']
  . "<br />Expires: " . $fb_token_params['expires'];

感谢@FabioAntunes尝试帮助我使用原始代码,感谢@ShawnECarter为他的script提供了cURL加载函数。

答案 1 :(得分:0)

今天偶然发现了这个问题。似乎我的PHP SDK(v.3.2.2)提供了一个解决问题的函数:setExtendedAccessToken()。 (几乎完全相同的事情:调用图形的“/ oauth / access_token”并将旧标记与“长寿”标记交换。)