59

我一直在努力找出发生了什么。我的脚本运行得很好,突然一半停止了。

我正在访问 api 并取回访问令牌。使用访问令牌,我可以很好地访问用户的公共信息。但是,当我尝试将信息发布到他们的 FB 帐户时,我收到此错误。

Fatal error: Uncaught OAuthException: An active access token must be used to query information about the current user. 

知道这里发生了什么吗?我还在我的网站上使用会话来跟踪内部用户 ID。不确定我的会话是否会导致问题。

这是我遇到错误的上传脚本。

require 'facebook/src/facebook.php';


// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
  'appId'  => '12345678',
  'secret' => 'REMOVED',
  'fileUpload' => true, 
  'cookie' => true,
));
$facebook->setFileUploadSupport(true); 

$me = null;
// Session based API call.
if ($session) {
  try {
    $uid = $facebook->getUser();
    $me = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
  }
}


// login or logout url will be needed depending on current user state.
if ($me) {
  $logoutUrl = $facebook->getLogoutUrl();
} else {
  $loginUrl = $facebook->getLoginUrl();
}


$photo_details = array('message' => 'my place');
$file='photos/my.jpg'; //Example image file
$photo_details['image'] = '@' . realpath($file);
$upload_photo = $facebook->api('/me/photos', 'post', $photo_details);
4

7 回答 7

32

只需检查当前的 Facebook 用户 ID $user,如果它返回 null,那么您需要重新授权用户(或使用自定义$_SESSION用户 ID 值 - 不推荐)

require 'facebook/src/facebook.php';


// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
  'appId'  => 'APP_ID',
  'secret' => 'APP_SECRET',
));

$user = $facebook->getUser();

$photo_details = array('message' => 'my place');
$file='photos/my.jpg'; //Example image file
$photo_details['image'] = '@' . realpath($file);

if ($user) {
  try {
    // We have a valid FB session, so we can use 'me'
    $upload_photo = $facebook->api('/me/photos', 'post', $photo_details);
  } catch (FacebookApiException $e) {
    error_log($e);
  }
}


// login or logout url will be needed depending on current user state.
if ($user) {
  $logoutUrl = $facebook->getLogoutUrl();
} else {
// redirect to Facebook login to get a fresh user access_token
  $loginUrl = $facebook->getLoginUrl();
  header('Location: ' . $loginUrl);
}

我写了一篇关于如何将图片上传到用户墙上的教程。

于 2011-05-17T18:02:44.730 回答
32

采用:

$facebook->api('/'.$facebook_uid)

代替

$facebook->api('/me')

有用。

于 2012-12-12T17:25:53.533 回答
18

所以我遇到了同样的问题,但这是因为我保存了访问令牌但没有使用它。这可能是因为我因为到期日而超级困,或者也许我只是没有考虑过!但万一其他人处于同样的情况:

当我登录用户时,我保存访问令牌:

$facebook = new Facebook(array(
    'appId' => <insert the app id you get from facebook here>,
    'secret' => <insert the app secret you get from facebook here>
));

$accessToken = $facebook->getAccessToken();
//save the access token for later

现在,当我向 facebook 提出请求时,我只是做这样的事情:

$facebook = new Facebook(array(
    'appId' => <insert the app id you get from facebook here>,
    'secret' => <insert the app secret you get from facebook here>
));

$facebook->setAccessToken($accessToken);
$facebook->api(... insert own code here ...)
于 2012-05-25T00:06:19.033 回答
4

一定时间后,您的访问令牌会过期。

为防止这种情况,您可以在身份验证期间请求“offline_access”权限,如下所述:Facebook Oauth 2.0 访问令牌是否过期?

于 2011-05-17T17:54:51.163 回答
0

有同样的问题,解决方案是重新授权用户。在这里检查:

<?php

 require_once("src/facebook.php");

  $config = array(
      'appId' => '1424980371051918',
      'secret' => '2ed5c1260daa4c44673ba6fbc348c67d',
      'fileUpload' => false // optional
  );

  $facebook = new Facebook($config);

//Authorizing app:

?>
<a href="<?php echo $facebook->getLoginUrl(); ?>">Login con fb</a>

保存项目并在我的测试环境中打开,它再次工作。正如我所做的那样,您可以评论您以前的代码并尝试。

于 2013-11-14T15:35:07.170 回答
0

尝试在没有身份验证的情况下获取用户信息时,我遇到了同样的问题。

在任何请求之前检查您是否已登录。

 $uid = $facebook->getUser();

 if ($uid){
      $me = $facebook->api('/me');
 }

上面的代码应该可以解决您的问题。

于 2013-11-21T14:19:51.523 回答
0

我有同样的问题,但我可以通过从浏览器中清除 cookie 和缓存来解决这个问题(ctrl+shift+R)。此外,您必须确保您的访问令牌处于活动状态。

希望这将帮助您解决您的问题。

于 2017-10-30T08:32:32.927 回答