0

我正在試圖爲question2answer(知識不必要)構建插件,當發佈新問題時,它會將該問題作爲Facebook頁面上的活動發佈。實現這一點不成問題。我遇到的是堅持。Php Facebook API頁面訪問令牌

根據我的理解,如果我錯了,請糾正我的錯誤,是您只能通過管理員用戶的帳戶直接獲取頁面的訪問令牌。當存儲訪問令牌的頁面的管理員從註銷時過期時,這會造成發佈時的問題。那麼,我們不能指望他們永遠保持登錄狀態,對吧?

還有另外一種方法可以解決這個問題嗎?也許可以讓用戶在該頁面上發帖?

這是我目前使用的代碼(這不是最終的,沒有錯誤處理)。凡是說qa_opt只是存儲在數據庫question2answer東西

$facebook2 = new Facebook(array(
                'appId' => qa_opt('facebook_app_id'), 
                'secret' => qa_opt('facebook_secret') 

         )); 

         $facebook2->setAccessToken(qa_opt('facebook_page_access_code')); 

         // Try to extend token 
         $access_token = $facebook2->getExtendedAccessToken(); 



         // As is, with the extended token, we currently post as the user, not the page. Let's fix that 
         $accounts = $facebook->api('/me/accounts?access_token='.$access_token); 
         foreach ($accounts as $account) 
         { 
          if ($account['id'] == qa_opt('facebook_page_id')) 
          { 
           $page_access_token = $account['access_token']; 
           break; // Stop processing foreach 
          } 

         } 

         $fbPageArgs = array('access_token' => $page_access_token, 
            'message' => 'A new question has been created!', 
            'link' => qa_q_path($params['postid'], $params['title'], true), 
            'name' => $params['title'], 
            'description' => $params['text'] 
         ); 

         $facebook2->api("/".qa_opt('facebook_page_id')."/feed?fields=access_token","post",$fbPageArgs); 
+0

有想法的人嗎?肯定有人遇到過這個。 – Eric

回答

3

你可以有一個從來沒有到期標記爲您的粉絲專頁,將解決你的問題,我猜。

按照簡單的步驟:

  1. 獲取管理員的擴展標記(2個月的有效期)(即你的)。去鏈接去獲得long-lived token

    Extending tokens

  2. 獲取永不過期的訪問令牌使用此令牌的

    $facebook->api("/PAGE_ID?fields=access_token"); 
    

(可以使用Facebook's Debug Tool檢查令牌的有效性)的任何頁面。

+0

儘管推薦使用的每年保持它在註銷時不會斷開連接,但它仍將所有新問題作爲管理員登錄,而不是頁面本身。現在我似乎無法找到一種方法來實現這一目標。 – Eric

+0

這可能對你有用 - http://stackoverflow.com/a/7649048/1343690 –