脸书.致命错误:未捕获 OAuth异常:必须使用活动访问令牌来查询有关当前用户的信息



我的应用程序的管理员在Facebook上计数,我的应用程序工作正常,但使用其他帐户时,我收到错误:Fatal error: Uncaught OAuthException: An active access token must be used to query information about the current user.我之前在其他应用程序(在用户墙上发布文本)遇到过这个问题,但在我添加后修复了 $user = $facebook->getUser(); 这是怎么回事?我已经添加了offline_access权限...如果可以的话,请帮助我,非常感谢。

<?php
    require_once('images/Facebook.php');
      $facebook = new Facebook(array(
        'appId'  => '456080124457246',
        'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
      ));
      $user_profile = $facebook->api('/me','GET');
    $accessToken = $facebook->getAccessToken();
      # Get User ID
      $user = $facebook->getUser();
      $facebook->setAccessToken($accessToken);
      $facebook->api(456080124457246);

     if ($user) {
        try {
      # Photo Caption
      $photoCaption = $user_profile['name'] . ' patarimų plaukams sužinojo čia http://goo.gl/otwhf';
      # Absolute Path to your image.
      $imageUrl = 'http://padekime.wu.lt/plaukai/images/PlaukaiNeuzvedus.jpg'; // Example URL
      # Post Data for Photos API
      $post_data = array(
          'message' => $photoCaption,
          'url' => $imageUrl
      );
          $apiResponse = $facebook->api('/me/photos', 'POST', $post_data);
      } catch (FacebookApiException $e) {
        error_log($e);
      }
    } else {
        $loginUrl = $facebook->getLoginUrl( array(
            'scope' => 'publish_stream,photo_upload'
        ));
        echo("<script>top.location.href = '" . $loginUrl . "';</script>");
      }
    ?>
在这种情况下,

它甚至没有到达您的 $facebook->getUser() 调用 - 一旦到达此行,它就会抛出异常:

$user_profile = $facebook->api('/me','GET');

$facebook->api() 有点棘手,因为如果它不知道"/me"是谁,它会立即抛出异常......即使您稍后尝试修复它。

我认为,诀窍是尝试将整个事情包装起来......捕获块。 这样:

<?php
require_once('images/facebook.php');
$facebook = new Facebook(array(
  'appId'  => '456080124457246',
  'secret' => 'xxxxx',
));
try {
  $user_profile = $facebook->api('/me','GET');
  # Get User ID
  $user = $facebook->getUser();
 if ($user) {
    try {
  # Photo Caption
  $photoCaption = $user_profile['name'] . ' patarimų plaukams sužinojo čia http://goo.gl/otwhf';
  # Absolute Path to your image.
  $imageUrl = 'http://padekime.wu.lt/plaukai/images/PlaukaiNeuzvedus.jpg'; // Example URL
  # Post Data for Photos API
  $post_data = array(
      'message' => $photoCaption,
      'url' => $imageUrl
  );
  $apiResponse = $facebook->api('/me/photos', 'POST', $post_data);
  } catch (FacebookApiException $e) {
    error_log($e);
  }
} else {
    $loginUrl = $facebook->getLoginUrl( array(
        'scope' => 'publish_stream,photo_upload'
    ));
    echo("<script>top.location.href = '" . $loginUrl . "';</script>");
  }      
} catch (Exception $e) {
    $loginUrl = $facebook->getLoginUrl( array(
        'scope' => 'publish_stream,photo_upload'
    ));
    echo("<script>top.location.href = '" . $loginUrl . "';</script>");
}
?>

这会立即将用户重定向到登录 URL,然后返回所有内容。 您不必使用此设置来设置访问令牌。

这实际上可能会不必要地重复某些功能,但希望这是开始的东西。

顺便说一下,为了值得offline_access许可,正在逐步取消。

我停止使用"me"关键字来获取登录用户的个人资料。而不是$facebook->api('/me','GET'),我改为$facebook->api('/the facebook ID of the user','GET');

这减少了进行第二次尝试捕获的需要

如果你这样做

if (!empty($user)) {}

这应该有帮助...

相关内容

最新更新