Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Exemplo de script de publicação na fanpage, facebook, usando PHP SDK v4.0.x ! Instale o SDK v4 através do composer. Mais detalhes de como instalar o SDK via composer pode ser obtido em: http://www.douglaspasqua.com/2015/05/24/criando-aplicativos-facebook-sdk-v4-em-php/
<?php
session_start(); // Sessao do php deve estar ativa
// datetimezone
date_default_timezone_set('America/Sao_Paulo');
// autoloader gerado pelo composer
require_once "vendor/autoload.php";
// configurar APP_ID e SECRET
define('APP_ID', '');
define('APP_SECRET', '');
// configurar id da fan page que deseja publicar
define('FANPAGE_ID', '');
// url que o facebook redireciona (deve apontar para o próprio script)
$redirect_url = 'http://localhost/publica-fanpage-v4.php';
// importa classes usadas
use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\FacebookRedirectLoginHelper;
// APP_ID e SECRET
FacebookSession::setDefaultApplication(APP_ID, APP_SECRET);
// verifica se já existe uma sessão criada
$helper = new FacebookRedirectLoginHelper($redirect_url);
// verifica sessao existente
if(isset($_SESSION['fb_access_token'])) {
try {
$session = new FacebookSession($_SESSION['fb_access_token']);
// verifica se a sessao continua valida
if(!$session->validate()) {
$session = null;
}
} catch(\Exception $ex) {
$session = null;
}
}
if(!$session) {
$session = $helper->getSessionFromRedirect();
}
if ($session) {
try {
// sessao criada
// armazena token na sessao
$_SESSION['fb_access_token'] = $session->getToken();
// requisita permissioes do usuario e converte o resultado para array
$user_permissions = (new FacebookRequest($session, 'GET', '/me/permissions'))
->execute()
->getGraphObject()
->asArray();
// cria array com as permissoes concedidas
$perms_granted = [];
foreach($user_permissions as $perm) {
if($perm->status == 'granted') {
$perms_granted[$perm->permission] = true;
}
}
// verifica se o usuario concedeu as permissoes desejadas
if(!isset($perms_granted['manage_pages'])
|| !isset($perms_granted['publish_pages'])) {
$login_url = $helper->getLoginUrl(array('scope' => 'manage_pages,publish_pages'));
header('Location: ' . $login_url);
exit;
}
// pega token
$accounts = (new FacebookRequest($session, 'GET', '/me/accounts'))
->execute()
->getGraphObject()
->asArray();
$fanpage_access_token = null;
foreach($accounts['data'] as $account) {
if($account->id == FANPAGE_ID) {
$fanpage_access_token = $account->access_token;
}
}
// publica na fanpage
if($fanpage_access_token) {
$post_data = array(
"message" => "Exemplo de publicação.",
"name" => "Minha Publicação Facebook",
"link" => "http://www.douglaspasqua.com", // link da publiccao
"picture" => "http://www.douglaspasqua.com/wp-content/uploads/2014/04/facebook-150x150.png",
"caption" => "www.douglaspasqua.com",
"access_token" => $fanpage_access_token,
);
(new FacebookRequest($session, 'POST', '/me/feed', $post_data))->execute()->getGraphObject();
}
} catch(FacebookRequestException $ex) {
die(" Error : " . $ex->getMessage());
} catch(\Exception $ex) {
die(" Error : " . $ex->getMessage());
}
} else {
// URL de Login
$login_url = $helper->getLoginUrl(array('scope' => 'manage_pages,publish_pages'));
echo '<a href="'.$login_url.'">Login with Facebook</a>';
}
@WilliamDOliveira

This comment has been minimized.

Copy link

WilliamDOliveira commented Oct 25, 2015

Olá amigo, estou tentando fazer uma aplicação com esse sdk novo do face e não estou conseguindo, eu só queria uma aplicação, de web, que publique um post na pagina do usuário. Na verdade seria algo muito próximo de um compartilhamento da imagem do post e msg, isso não funciona pelo sharing comum porque o cache do face não permite o compartilhamento de imagens dinâmicas...

@Geovanek

This comment has been minimized.

Copy link

Geovanek commented Feb 16, 2016

Olá Doulgas, estou tentando resolver um problema de Sessão e não estou conseguindo.

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/..../_funcoes.php:1388) in /home/..../publica-fanpage-v4.php.

Este erro sempre aparece mesmo testando a publicação em um local separado.
Fatal error: Class 'Facebook\FacebookSession' not found in /home/.../publica-fanpage-v4.php on line 2

@dpasqua

This comment has been minimized.

Copy link
Owner Author

dpasqua commented Feb 18, 2016

Oi Geovanek, Infelizmente esse código esta usando uma versão mais antiga de SDK do que a atual. Para funcionar tente alterar o composer.json da seguinte forma:

{ "require" : { "facebook/php-sdk-v4" : "4.0.*" } }

E rodar o composer update novamente!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.