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 –