2010-10-24 15 views
6

Vorrei pubblicare sulla pagina - attraverso il mio sito. . Non ho trovato nulla che potesse aiutarmi nella documentazione. Inoltre nessuno dei risultati di google mi ha dato risposta.Post di Facebook sulla pagina con 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; 

    } 

La parte sbagliata è:

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

voglio permettere all'utente di effettuare il login a causa FB specificato (questo con la pagina), e quindi inviare. Le impostazioni dell'app consentono solo questo account di pubblicare, quindi dovrebbe essere ok ... Ma non lo è. Quando esco dall'account FB, la sessione esiste ancora, ma restituisce un'eccezione. Cosa c'è che non va?

risposta

16

se si desidera pubblicare su una pagina fan dove siete amministratore .. fare la prossima

  1. L'applicazione ha bisogno di avere questa autorizzazione minima:

    $this->loginUrl = $this->facebook->getLoginUrl(
          array(
           'scope'   => 'manage_pages,offline_access,publish_stream', 
           'redirect_uri' => $url, 
          ) 
        ); 
    
  2. Dopo aver effettuato l'accesso in:

    //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

Grazie! Eccellente. – Memochipan

1

Se ho capito bene, vuoi inviare un messaggio alla bacheca dell'utente che è connesso alla tua applicazione tramite il tuo sito web al momento dell'accesso? Se è così, prova questo. Rielaborare lo script per impedire la pubblicazione costante, ma questo modello, in teoria, dovrebbe funzionare.

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

// porzione di messaggistica posto qui invece.

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

Quindi, se l'utente è connesso con l'applicazione e la sessione è valida, si invia automaticamente il post per il loro news feed (parete).

Problemi correlati