2

使用我的应用程序在 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>");
      }
    ?>
4

3 回答 3

4

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

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

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

我认为,诀窍是将整个事物包装在一个 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>");
}

?>

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

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

顺便说一句,offline_access 权限正在逐步淘汰。

于 2013-01-26T02:56:32.147 回答
1

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

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

于 2013-07-15T09:35:23.460 回答
0

如果你这样做

if (!empty($user)) {}

那应该有帮助...

于 2013-10-05T00:32:04.437 回答