2010-10-24 2 views
6

Я хотел бы опубликовать на странице - через мой сайт. , Я не нашел ничего, что могло бы помочь мне в документации. Также ни один из результатов Google не дал ответ mi.Facebook сообщение на странице с PHP SDK

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, сеанс все еще существует, но возвращает исключение. Что не так?

ответ

16

, если вы хотите разместить на фан-странице, где вы .. сделать Администратора следующий

  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

1

Если я правильно понял это, вы хотите отправить сообщение на стену пользователя, которое подключилось к вашему приложению через ваш сайт, как только они войдут в систему? Если да, попробуйте это. Исправьте сценарий, чтобы предотвратить постоянную публикацию, но эта модель, теоретически, должна работать.

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); 
      } 

Таким образом, если пользователь связан с приложением, а сессия является действительным, он будет автоматически отправлять сообщения в их ленте новостей (Wall).

Смежные вопросы