2011-05-17 80 views
47

我一直在努力找出發生了什麼事情。 我的腳本工作得很好,突然一半停下來。facebook未捕獲的OAuthException:必須使用活動的訪問令牌來查詢有關當前用戶的信息。

我正在訪問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); 

回答

31

只要查看當前的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); 
} 

我已經寫了關於如何上傳圖片到用戶的牆tutorial

+2

+1 ...謝謝你的回答..我的頭在這...'我'尋找一個有效的facebook會話...而'facebook user_id'不..只是我想要 – Ninja 2012-05-23 11:36:50

+0

這裏我們正在檢查應用程序的權限?首次顯示了facebook的對話框,以便轉到App.i點擊它。現在,當我打開頁面時,它顯示空白頁面 – 2012-08-02 09:43:44

+0

@VIJESH,您是否使用上面的代碼作爲是什麼?你知道這是不完整的代碼,只是爲了讓你開始。 – ifaour 2012-09-28 16:35:18

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 ...) 
+1

我愛你這個答案!這節省了我關於新的十二月第五次突破變化的問題。我正在研究這個好幾天。 – 2012-11-30 00:55:10

+1

親愛的上帝,只花了2個小時尋找這個,我也是bleh。 – Ryan 2013-03-22 18:40:44

27

用途:

$facebook->api('/'.$facebook_uid) 

,而不是

$facebook->api('/me') 

它的工作原理。

+3

它不是一個bug;因爲對接受的答案的第一個評論說...'我'尋找一個有效的facebook會話,而'facebook user_id'不會 – Mike 2013-01-07 09:31:47

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> 

保存的項目,並打開了我的測試環境和一切又恢復了。和我一樣,你可以評論你以前的代碼並嘗試。

0

我試圖在沒有身份驗證的情況下獲取用戶信息時遇到了同樣的問題。

檢查您是否有任何請求之前有loggen。

$uid = $facebook->getUser(); 

if ($uid){ 
     $me = $facebook->api('/me'); 
} 

上面的代碼應該可以解決您的問題。

0

我有同樣的問題,但我可以通過清除我的瀏覽器中的cookie和緩存來解決此問題(ctrl+shift+R)。另外,您必須確保您的訪問令牌處於活動狀態。

希望這會幫助你解決你的問題。