Facebook的。致命错误:未捕获OAuthException:必须使用活动访问令牌来查询有关当前用户的信息

时间:2013-01-25 16:12:55

标签: facebook facebook-graph-api access-token fatal-error

我的应用程序管理员帐户在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>");
      }
    ?>

3 个答案:

答案 0 :(得分:4)

在这种情况下,它甚至没有进入你的$ facebook-&gt; getUser()调用 - 它一到达此行就会抛出异常:

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

$ facebook-&gt; api()使用起来有点棘手,因为如果它不知道谁是“/我”就会立即引发异常......即使你以后尝试修复它也是如此

我认为,诀窍是将整个事物包装在try ... catch块中。像这样:

<?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>");
}

?>

这会立即将用户重定向到登录网址,然后将所有内容都拖回来。您不必使用此设置设置accessToken。

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

顺便说一下,它的价值是the offline_access permission is being phased out.

答案 1 :(得分:1)

我停止使用“me”关键字来获取登录用户的个人资料。 而不是$ facebook-&gt; api('/ me','GET'),我改为$ facebook-&gt; api('/用户的脸书ID','GET');

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

答案 2 :(得分:0)

如果你这样做

if(!empty($ user)){}

那应该有帮助...