Skip to content

Instantly share code, notes, and snippets.

@dpasqua
Last active February 18, 2016 13:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save dpasqua/5911a0746397e853a347 to your computer and use it in GitHub Desktop.
Save dpasqua/5911a0746397e853a347 to your computer and use it in GitHub Desktop.
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
Copy link

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
Copy link

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
Copy link
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