Facebook Graph Api – Posting to Fan Page as an Admin

To post as Page not as User, you need the following:
Permissions:

  • publish_stream
  • manage_pages

Requirements:

  • The page id and access_token (can be obtained since we got the required permissions above)
  • The current user to be an admin (to be able to retrieve the page’s access_token)
  • An access_token with long-lived expiration time of one of the admins if you want to do this offline (from a background script)

PHP-SDK Example:

<?php
/**
 * Edit the Page ID you are targeting
 * And the message for your fans!
 */
$page_id = 'PAGE_ID';
$message = "I'm a Page!";


/**
 * This code is just a snippet of the example.php script
 * from the PHP-SDK <http://github.com/facebook/php-sdk/blob/master/examples/example.php>
 */
require '../src/facebook.php';

// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
  'appId'  => 'app_id',
  'secret' => 'app_secret',
));

// Get User ID
$user = $facebook->getUser();

if ($user) {
  try {
    $page_info = $facebook->api("/$page_id?fields=access_token");
    if( !empty($page_info['access_token']) ) {
        $args = array(
            'access_token'  => $page_info['access_token'],
            'message'       => $message 
        );
        $post_id = $facebook->api("/$page_id/feed","post",$args);
    } else {
        $permissions = $facebook->api("/me/permissions");
        if( !array_key_exists('publish_stream', $permissions['data'][0]) ||
           !array_key_exists('manage_pages', $permissions['data'][0])) {
                // We don't have one of the permissions
                // Alert the admin or ask for the permission!
                header( "Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream, manage_pages")) );
        }
    }
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
}

// Login or logout url will be needed depending on current user state.
if ($user) {
  $logoutUrl = $facebook->getLogoutUrl();
} else {
  $loginUrl = $facebook->getLoginUrl(array('scope'=>'manage_pages,publish_stream'));
}
// ... rest of your code
?>

Here the connected $user is supposed to be the admin.

Result:
enter image description here

More in my tutorial

Leave a Comment