2010-10-29 40 views
13

Đó là thử cuối cùng với PHP, nếu nó không thành công, tôi sẽ thử với JS. Vì vậy, mục tiêu của tôi là để đăng bài trên trang FB là "tên Trang" thông qua PHP: đây là những gì tôi muốn để có đượcFacebook Graph API PHP SDK đăng trên trang dưới dạng trang

View 1

Nhưng tất cả tôi nhận được hiển thị pic dưới đây. Ngoài ra, nó chỉ hiển thị cho hồ sơ này (không cho bạn bè/ppl người thích/etc.).

View 2

Đây là mã hiện tại của tôi

function post_facebook($data=null, $redir = 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']; <= Correct apiid 

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

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

     $session = $facebook->getSession(); 
     $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' => '', 
      ); 

      try { 
       $facebook->api('/PAGE ID/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; 
     } 

     echo $result; 
     exit; 
     //return $result; 

    } 

Những gì tôi đang làm sai? Tôi không thể tìm thấy bất kỳ điều gì trong tài liệu API/kết quả tìm kiếm hàng đầu của Google, chỉ dành cho JS. Cảm ơn vì sự giúp đỡ!

Trả lời

20

Bạn cần đảm bảo rằng bạn đang yêu cầu quyền 'manage_pages' cho người dùng. Khi bạn đã nhận được rằng bạn có thể thực hiện $facebook->api('/me/accounts') và bạn sẽ nhận được mã thông báo (cùng với thông tin trang) mà bạn có thể sử dụng để đăng trên trang làm trang.

+0

Chìa khóa để giải quyết vấn đề này là nhận mã thông báo truy cập - Tôi đã bỏ lỡ phần đó trước đó. Tôi nợ bạn! – Misiur

+0

Xin chào, bạn đã quản lý để có thể đăng liên kết có hình ảnh (như trang làm poster) ?? – user3329793

0

Tôi đã vật lộn với hầu hết thời gian trong ngày, sau đó thấy rằng không sử dụng setAccessToken (page_access_token) là điều duy nhất ngăn nó hoạt động cho tôi. Tôi thấy rằng trong một bài đăng stackoverflow từ 18 tháng trước. Tôi sẽ đặt giải pháp của tôi ở đây, cho bất kỳ ai có câu hỏi này trong tương lai:

protected $scope = "email,publish_stream,manage_pages"; 

    $url = "{$api_url}/{$fbusername}/accounts?access_token=".$access_token; 
    $response = json_decode(file_get_contents($url)); 
    foreach($response->data as $data) { 
     try 
     { 
      $res = $this->SDK->setAccessToken($data->access_token); 
      $res = $this->SDK->api(
       "{$data->id}/feed", 
       "POST", 
       array('link' => 'www.example.com', 
         'message' => 'This is a test message from php',) 
      ); 
      log::debug(__FUNCTION__, print_r($res,true)); 
     } 
     catch (Exception $e) 
     { 
      log::debug(__FUNCTION__, $e->getType().": ".$e->getMessage()); 
     } 

    } 
Các vấn đề liên quan