使用PHP SDK的页面上发布的Facebook帖子

问题描述:

我想在页面上发帖 - 通过我的网站。 。我没有找到任何可以帮助我处理文档的东西。谷歌的结果也没有给出答案。使用PHP SDK的页面上发布的Facebook帖子

function post_facebook($data=null){ 
     $result = ""; 
     require_once (ROOT. "/apps/configuration/models/ConfigurationItem.php"); 
     require_once (ROOT . "/components/facebook/facebook.php"); 

     $this->ConfigurationItem = new ConfigurationItem($this->getContext()); 

     $row=$this->ConfigurationItem->findByCatKeyItemKey('system','facebook_login'); 
     $apiid=$row['value']; 

     $row=$this->ConfigurationItem->findByCatKeyItemKey('system','facebook_pass'); 
     $secret=$row['value']; 

     $facebook = new Facebook(array(
      'appId' => $apiid, 
      'secret' => $secret, 
      'cookie' => true, 
     )); 

     $session = $facebook->getSession(); 
     print_r($session); 
     $me = null; 
     if ($session) { 
      try { 
       $uid = $facebook->getUser(); 
       $me = $facebook->api('/me'); 
      } catch (FacebookApiException $e) { 
       error_log($e); 
      } 
      $message=$data['facebook_text']; 
      $attachment = array(
       'message' => $data['facebook_text'], 
       'name' => $data['name'], 
       'link' => $this->getLinkToLatestNews(), 
       'description' => '', 
      ); 

      if($data['thumb_file_tree_id'] !== NULL) $attachment = $_SERVER['HTTP_HOST']."media/file/image_by_id/".$data['thumb_file_tree_id']."/?w=400&h=500"; 

      try { 
       $facebook->api('/162618213751448/feed/', 'post', $attachment); 
       $result = "Facebook: Sent"; 
      } catch (FacebookApiException $e) { 
       $result = "Facebook: Failed"; 
       error_log($e); 
      } 
     } else { 
      $login_url = $facebook->getLoginUrl(); 
      header("Location: ".$login_url); 
      exit; 
     } 

     return $result; 

    } 

错误的部分是:

$session = $facebook->getSession(); 
$me = null; 
if ($session) { 
    (...) 
} else { 
$login_url = $facebook->getLoginUrl(); 
    header("Location: ".$login_url); 
    exit; 
} 

我想允许用户登录指定FB帐户(以页面),然后发送。应用设置只允许这个帐户发布,所以它应该没问题......但不是。当我注销FB账户时,会话仍然存在,但返回异常。怎么了?

,如果你想发布你在哪里管理员联系..做下

  1. 您的应用程序需要有此权限最小的粉丝页面上:

    $this->loginUrl = $this->facebook->getLoginUrl(
          array(
           'scope'   => 'manage_pages,offline_access,publish_stream', 
           'redirect_uri' => $url, 
          ) 
        ); 
    
  2. 后您登录成:

    //get pages or applications where you are administrator 
    $accounts = $this->facebook->api('/me/accounts'); 
    
    //page where i want to post 
    $page_id = '227870047252297'; 
    
    foreach($accounts['data'] as $account) 
    { 
        if($account['id'] == $page_id) 
        { 
         $token = $account['access_token']; 
        } 
    } 
    
    
    $attachment = array(
         'access_token' => $token, 
         'message' => 'mensaje', 
         'name' => 'titulo', 
         'link' => 'http://...', 
         'description' => 'xxxxx', 
         'picture'=> 'http://...', 
    ); 
    
    
    try{ 
    $res = $this->facebook->api('/'.$page_id.'/feed','POST',$attachment); 
    
    } catch (Exception $e){ 
    
        echo $e->getMessage(); 
    } 
    
+0

谢谢!优秀。 – Memochipan 2013-02-07 12:21:05

如果我正确理解这一点,您希望在用户登录时通过您的网站向您的应用程序连接到用户的墙上发送消息?如果是这样,试试这个。重写脚本以防止不断发布,但理论上这种模型应该可行。

if ($session) { 
     try { 
      $uid = $facebook->getUser(); 
      $me = $facebook->api('/me'); 

//将消息传递部分放在这里。

$message = $facebook->api('/me/feed', 'post', array(
                  'message'=> '<Message>', 
                  'picture' => '<Picture URL>', 
                  'link'=> '<URL>', 
                  'description'=>'Description', 
                  'name'=> '<Name of Post>', 
                  'privacy'=> '<ALL_FRIENDS (Default)>', 
                  'caption'=> '<Caption>',               

                  ) 
            ); 

      } catch (FacebookApiException $e) { 
       error_log($e); 
      } 

因此,如果用户与您的应用程序连接和会话是有效的,它会自动发送讯息到他们的新闻源(墙)。