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 に答える