2011-01-06 92 views
2

我有用戶授予的離線訪問權限,會話過期= 0,因此它永不過期。我已將所有會話值(如access_code等)存儲在數據庫中。在存儲這些值之後,我可以立即閱讀新聞源。 2秒後,當我嘗試使用這些存儲的會話值讀取用戶的新聞傳送時,它不起作用。 OAuthException:激活的訪問令牌必須用於查詢當前用戶Facebook API離線新聞傳送訪問

在PHP中,我使用這條線來讀取新聞源信息:$result=$facebook->api("/me/home?access_token=".$access_token);

奇怪的是,當我輸入接入碼的網址它正在工作:

https://graph.facebook.com/me/home?access_token= $ access_token。

記住,當用戶給你的權限,你得到這個網址:http://example.it/home/newsfeed.php?perms=<permissionlist>&selected_profiles=<uid>&installed=1&session={session_key:<session_key>,uid:<uid>,expires:0,secret:<secret>,access_token:<firstpart>|<secondpart>|<third part>,sig:<sig>}

我的允許名單是這樣的:

「friends_about_me,friends_education_history,friends_likes,friends_interests,friends_location, friends_religion_politics, friends_work_history,publish_stream,friends_activities,friends_events, friends_hometown,friends_location,user_interests,user_likes,user_events, user_about_me,user_status ,user_work_history,read_requests,read_stream,offline_access,user_religion_politics,電子郵件,user_groups「;

當我輸入上面的任何瀏覽器的URL ,它給我的UID的新聞提要,因爲newsfeed.php有PHP代碼輸出的新聞源。用戶是否登錄無關緊要。 IE甚至下載json結果作爲文件

所以會話信息沒有真正過期,它正在工作。但不知何故,我無法讓Facebook相信我有正確的憑據來閱讀新聞源。

任何幫助,非常感謝。請寫下我如何重建會話價值並讓Facebook相信我。

我的最終解決方案可以在我更新的博客上找到:http://akcora.wordpress.com/


我也忘了提,即使進給不工作,我仍然可以發佈狀態信息到用戶的個人資料。這沒有任何意義。我幾乎可以肯定,我在編碼方面犯了一個錯誤。例如,這是可以工作的狀態發佈代碼:

$attachment = array(
     'access_token' => $access_token, 
      'message' => 'Did a Test Post :', 
       'name' => "Offline posting using stored tokens", 
       'link' => "http:somelink.com", 
       'description' => "This post was made using a stored access token", 
      'picture'=>"some.jpg", 
     ); 

$ret_code=$facebook->api('/'.$target.'/feed', 'POST', $attachment); 

但是獲取提要不起作用。安全性應該比張貼新聞源更緊張,對嗎?

+0

您使用的庫函數時URL編碼的訪問令牌?在使用該功能之前可能需要對其進行編碼。 – 2011-01-06 02:57:01

回答

0

將access_token作爲api函數的參數發佈,而不是作爲url中的get參數。

不用擔心Facebook庫會爲你做這項工作......

$facebook->api("me/feed",array(
    "access_token"=>$access_token 
)); 

並且順便說一句 - 會話參數在新的OAuth身份驗證方法中不再可用。

的會議轉移到signed_request參數(或代碼在服務器端)