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

ログインしたユーザーのプロファイルを取得するために「me」キーワードの使用を停止しました。$ facebook-> api('/ me'、'GET')の代わりに、$ facebook-> api('/ユーザーのFacebookID'、'GET');に変更しました。

これにより、2回目のキャッチを行う必要性が減ります

于 2013-07-15T09:35:23.460 に答える
0

もし、するなら

if(!empty($ user)){}

それは役立つはずです...

于 2013-10-05T00:32:04.437 に答える