Comunicando-se com o Facebook usando PHP

Com o crescimento do Facebook como rede social, o desejo de desenvolvedores e donos de sites em conectar suas aplicações web com a mais famosa rede social do mundo vem se tornando cada vez mais comum.

Se você se enquadra nesse grupo de desenvolvedores, então veio ao lugar certo, pois nesse post irei explicar como conectar o seu site feito em PHP com o Facebook seguindo alguns passos e usando uma classe de comunicação escrita em PHP.

1º Passo – Criando uma App no Facebook

Antes de começarmos, precisaremos criar uma App do Facebook, ela servirá como um canal de comunicação entre o nosso script PHP e a rede social.

Entre no Facebook e efetue login usando seu usuário e senha, logo após, acesse a página de desenvolvedores do Facebook pelo endereço https://developers.facebook.com/ e clique em Aplicativos.

Na próxima página, clique em + Criar Novo Aplicativo.

Uma caixa de formulário se abrirá no meio da tela, preencha a mesma de acordo com os dados (nome) do aplicativo que você deseja criar e clique em Continuar.

Na próxima página, preencha o campo de validação de acordo com o texto que aparece na imagem e clique em Enviar.

Para garantir que sua conta de usuário no Facebook está realmente ligada a uma pessoa e que ela não é uma conta fake, o Facebook dirá que a conta precisa ser verificada. Você poderá fazer isso adicionando seu número de celular o cartão de credito (se você for usuário das operadoras Vivo ou Oi, aconselho optar pela validação por cartão de crédito)

Observação: Se sua conta no Facebook já foi validada anteriormente, você será redirecionado para a pagina final da criação do App.

Validação por Celular

Ao escolher a validação por celular, uma janela para adicionar seu telefone será exibida. Preencha a mesma como seu telefone e clique em Confirmar.

Na próxima tela, um código será requisitado, provavelmente você recebeu esse código por SMS. Preencha o campo com tal código e clique novamente em Confirmar.

Observação: Talvez o SMS demore alguns minutos, mas se o mesmo não chegar, clique em reenviar código ou refaça o procedimento optando pela validação por cartão de crédito.

Validação por Cartão de Crédito

Ao escolher a validação por cartão de crédito, sua senha poderá ser novamente requisitada. Preencha o campo Senha e clique em Continuar

Preencha o formulário de acordo com os dados do seu cartão de crédito e clique em Salvar.

Se tudo correu bem com a validação via cartão, o Facebook irá exibir os dados do seu cartão na próxima pagina.

Voltando para a criação do aplicativo

Após os passos de validação da conta, tanto via telefone ou cartão de credito, volte a página de criação do aplicativo. Se você não fechou a mesma, a página de criação da APP deve estar aberta em paralelo com a de validação da conta, caso contrario, terá que recomeçar o processo de criação do App (o processo de validação da conta não se repetirá)

Na tela mostrada pela imagem abaixo, clique em Continuar.

Novamente, você deve preencher o campo de validação de acordo com o texto que aparece na imagem mostrada pelo Facebook e clicar em Enviar.

Se tudo correu bem até agora, uma página com os dados da sua App do Facebook será mostrada. Nela você poderá modificar os dados da aplicação e fazer upload de um ícone.

Nessa página, preencha o campo App Domain com o domínio do seu site e o campo Site Url com a url de onde seu código de integração se encontra. No meu caso, o meu dominio é digitaldev.com.br e a pasta onde coloquei o script de integração é http://digitaldev.com.br/facebook, por esse motivo, preenchi os campos como mostra a imagem abaixo.

Ainda na mesma página, anote os números de App ID e App Secret. Pois eles serão usados pelo nosso script PHP para fazer referencia ao App do Facebook. Veja a localização dos mesmos visualizando a imagem abaixo.

Ao final do processo, clique em Salvar alterações

2º Passo – Escrevendo o script PHP

Para facilitar o nosso trabalho, iremos usar uma classe para gerenciar a comunicação entre nossa aplicação e o Facebook. Efetue o download da mesma clicando aqui.

Ao descompactar o pacote, constataremos a existência de alguns exemplos de uso da classe, mas os arquivos que realmente serão usados são os que se encontram dentro da pasta src. Copie-os para uma pasta dentro da sua aplicação, pois você precisará efetuar um include ou require deles dentro do arquivo de integração.

Vamos ao código PHP

<?php
//incluindo a classe de conexão com o facebook
require_once 'FacebookApi/facebook.php';

/*
* ID da App, vocé obteve isso na ultima
* página de geração do seu aplicativo no facebook
*/
$App_ID = '';

/*
* App Secret, você obteve isso na ultima
* página de geração do seu aplicativo no facebook
*/
$App_Secret = '';

//Instanciando o Objeto da classe do facebook
$facebook = new Facebook(array(
	    'appId'  => $App_ID ,
	    'secret' => $App_Secret
));

//Pegando Id do usuário Logado
$o_user = $facebook->getUser();

/*
* Verificando se está conectado
*/
if($o_user == 0)
{

	//Envia para a página de permissão do facebook, nela voce irá dar permissão ao aplicativo
	//acessar dados da sua conta
	$url = $facebook->getLoginUrl(array('scope' => array('publish_stream','read_stream')));
	header("Location:".$url);
}
else
{
	//Verificando se o comando de logout foi enviado
	if($_GET['action'] == 'finish' )
	{
		//Retirando a permissão do Aplicativo à sua conta no facebook
		session_destroy();
		header('Location: '.$facebook->getLogoutUrl());
	}
	else
	{
		//Atualizando seu status no facebook
		if( $_GET['action'] == 'publish' && strlen($_POST['status']) > 0 )
		{
			$post =  array('message' => $_POST['status']);
			$feed = $facebook->api('/me/feed', 'POST', $post);
		}
		else
		    //pegando as publicações do seu mural
			$feed = $facebook->api('/me/feed');
			//Use var_dump($feed) ou print_r($feed)
			//para ver todos os campos retornados

		//pegando as informações do usuário conectado
		$me = $facebook->api('/me');
		//Use var_dump($me) ou print_r($me)
		//para ver todos os campos retornados

		//pegando as publicações da sua home
		$home = $facebook->api('/me/home');
		//Use var_dump($home) ou print_r($home)
		//para ver todos os campos retornados
	}
}

?>

<!DOCTYPE unspecified PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
   <title>Integração com o Facebook</title>
   <meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
  </head>
  <body>
  <div align="center">
	<table width='600' border='1'>
		<tr>
			<td colspan="4" align="center">
				<a href="<?php echo $me['link']?>">
					<?php echo $me['name']?>
				</a>
			</td>
		</tr>
		<tr>
			<td align="right">
				Primeiro Nome:
			</td>
			<td align="center">
				<?php echo $me['first_name']?>
			</td>
			<td align="right">
				Ultimo Nome:
			</td>
			<td align="center">
				<?php echo $me['last_name']?>
			</td>
		</tr>
		<tr>
			<td align="right">
				Cidade Natal:
			</td>
			<td align="center">
				<?php echo $me['hometown']['name']?>
			</td>
			<td align="right">
				Cidate onde mora:
			</td>
			<td align="center">
				<?php echo $me['location']['name']?>
			</td>
		</tr>
	</table>
	<br/>

	<?php
	//Imprimindo publicações do mural do usuário
	if(is_array($feed['data']))
	{
	?>
		<table width="700" border="1">
			<tr>
				<td align="center">
					Seu Mural
				</td>
			</tr>
			<?php
			foreach($feed['data'] AS $hist)
			{
			?>
			<tr>
				<td align="center">
					<?php
					if(isset($hist['story']))
						echo $hist['story'];
					else
					{
						echo $hist['message'].'<br/>';
						if(isset($hist['picture']))
						?>
						<img src='<?php echo $hist['picture']?>'>
						<?php
					}
					?>
				</td>
			</tr>
			<?php
			}
			?>
		</table>
		<br/>
	<?php
	}
	?>

	<?php
	//imprimindo publicações da home do usuário
	if(is_array($home['data']))
	{
	?>
		<table width="700" border="1">
			<tr>
				<td align="center">
					Home
				</td>
			</tr>
			<?php
			foreach($home['data'] AS $hist)
			{
			?>
			<tr>
				<td align="center">
					<?php
					if(isset($hist['story']))
						echo $hist['story'];
					else
					{
						echo $hist['message'].'<br/>';
						if(isset($hist['picture']))
						?>
						<img src='<?php echo $hist['picture']?>'>
						<?php
					}
					?>
				</td>
			</tr>
			<?php
			}
			?>
		</table>
		<br/>
	<?php
	}
	?>

	<div>
		<form action="?action=publish" method="POST">
			<textarea name="status" rows="4" cols="20"></textarea>
		<br/>
		<button type="submit">Enviar</button>
		</form>
	</div>

	<a href="?action=finish">Sair</a>
</div>
</body>
</html>

Como você pode observar no código acima, eu copiei todo o conteúdo da pasta src do pacote que fizemos download para uma pasta chamada FacebookApi na raiz da pasta do meu script.

Para ver esse código funcionando, acesse http://digitaldev.com.br/facebook

Para fazer o download do código fonte do exemplo acima, clique aqui

Para melhorar o seu entendimento do código do exemplo, leia as documentações abaixo.
Graph API – https://developers.facebook.com/docs/reference/api/
PHP SDK overview – https://developers.facebook.com/docs/reference/php/

Espero ter ajudado aos leitores que desejam efetuar a integração entre uma aplicação em PHP e o Facebook. Qualquer dúvida, entre em contato usando a área de perguntas e respostas desse post.

145 comentários

Pular para o formulário de comentário

    • Leandro Celini em 28 de janeiro de 2012 às 17:41
    • Responder

    Parabéns pelo artigo funfo aqui legal estava procurando algo pra começar com integração do php com o facebook

    1. Valeu Leandro. Se tiver qualquer sugestão ou dúvida em relação ao post ou ao blog, sinta-se a vontade para escrever ai na área de perguntas e respostas…

        • andre em 5 de junho de 2012 às 2:05
        • Responder

        Tarcisio bom dia !!!

        Vc tem alguma ideia de como postar automaticamente uma foto no album do face, sempre que ela for gravada ?

        Tenho um xml com os enderecos das fotos, um diretorio com as imagens e quero sempre que uma nova gravar , salvar diretamente no meu album .

        Valeu

    • Mariana em 30 de janeiro de 2012 às 10:07
    • Responder

    Muito bom o artigo, Tarcísio! Ajudou bastante! Valeu!

    1. Valeu Mariana. Se você tiver alguma sugestão, dúvida ou critica sobre esse post ou o blog, pode escrever ai na área de perguntas e resposta. 😉

    • Thiago em 1 de fevereiro de 2012 às 1:26
    • Responder

    Olá Tarcísio, parabéns pelo post, fiz um app no facebook
    coloquei esse código na index.php onde o ta hospedado e tals
    editei o meu ID e o Scret lá, fiz upload de tudo, mas quando abro a página do app da esse erro
    Fatal error: Uncaught OAuthException: (#200) Requires extended permission: read_stream thrown in /app/www/base_facebook.php on line 1106

    Fiz tudo certinho, não editei mais nada, quero colocar outro conteúdo
    mas preciso dessa confirmação para publicar no mural da pessoa, ele pediu para ir até o aplicativo né?! até ai tudo bem, aceitei pra ir no aplicativo, na hora de ir para permitir acesso ao mural e tals, deu esse erro..

    Valew irmão..
    abraço

    1. Bom dia Thiago

      Observe a linha de código abaixo

      //Envia para a página de permissão do facebook, nela voce irá dar permissão ao aplicativo
      //acessar dados da sua conta
      $url = $facebook->getLoginUrl(array(‘scope’ => array(‘publish_stream’,’read_stream’)));
      header(“Location:”.$url);

      O problema é que você está tentando executar alguma requisição sem permissão necessária. Ainda está dizendo ai que a permissão que está faltando é a read_stream. A parte do seu código que gera a url de pedido de permissões está igual à desse artigo?

        • Alex em 21 de março de 2012 às 22:07
        • Responder

        Não sei oque fiz, apenas comesou a dar o mesmo erro

        Fatal error: Uncaught OAuthException: (#200) Requires extended permission: read_stream thrown in /home/www/fb/php-sdk/src/base_facebook.php on line 1106

        1. Veja se a opção ‘read_stream’ está presente na linha equivalente à instrução abaixo

          $url = $facebook->getLoginUrl(array(‘scope’ => array(‘publish_stream’,’read_stream’)));

        • Alex em 21 de março de 2012 às 22:15
        • Responder

        Opa, como sou chato hehehe, consegui resolver este erro, fica na pagina Graph API Explorer clica em Get Access Token e ae abre um popup e você vai na aba Extended Permissions e seleciona read_stream, pronto, o erro não aparece mais, mas Tarcísio você para oque server esse Get Access Token ele faz alguma modificação em meu app? abrçss

        1. Quando um usuário permite que um aplicativo acesse sua conta, o Facebook gera um Access Token. Ele é a chave usada pelo aplicativo para gerenciar a conta do usuário. Apesar de já ter abordado isso na área de perguntas e respostas, não cheguei a falar dessa chave nenhuma vez no código escrito acima, mas a mesma está mplícita nas chamadas do PHP SDK à API do Facebook.

          Agora imagine que você queira escolher um usuário do seu aplicativo e gerenciar a conta dele. Será que você pode fazer isso?
          Enquanto a chave ou Access Token gerado no pedido de acesso entre o aplicativo e a conta for válido, você poderá gerenciar a conta do usuário de acordo com as permissões dadas por ele ao seu aplicativo.

          É ai que entra o GetAccessToken e o SetAccessToken, a primeira serve para capturar a chave de acesso ou Access Token e a segunda para dizer ao seu aplicativo para usar uma chave de acesso ou Access Token.

          Você poderia, por exemplo, usar o GetAccessToken para capturar tal chave de acesso, gravá-la em uma tabela do banco de dados, juntamente com alguns dados do usuário, e posteriormente usar o SetAccessToken para acessar novamente a conta do usuário.

          //pegando a chave de acesso
          $st_chave_acesso = $facebook->GetAccessToken();
          
          //definindo a chave de acesso posteriormente
          $facebook->GetAccessToken('Chave de Acesso');
          

          Falta de segurança?

          Talvez. Por esse motivo, um usuário deve ficar atento às permissões requisitadas por um aplicativo à sua conta.

          Outra coisa digna de atenção. Um usuário pode retirar uma permissão de um aplicativo a qualquer momento, basta que o mesmo navegue até a página de aplicativos em sua conta no Facebook e exclua tal aplicativo indesejado. Nesse momento, a chave de acesso ou Access Token gerado pelo Facebook quando o usuário permitiu o acesso da conta pelo aplicativo não terá mais validade.

          Sim, você pode. Para isso, você só tem que saber qual o Access Token gerado

        2. Tche, amigão. Eu fiz isso mas persiste o erro… E agora?

            • Vinicius em 14 de junho de 2012 às 14:09

            Olá, de novo! Ok, consegui.
            Uma pequena dúvida (prometo, não incomodar mais). Como faço para APENAS pegar os mes posts no Face?

            Abraços e obrigado novamente.
            Vinícius

    • Daniel em 1 de fevereiro de 2012 às 2:06
    • Responder

    Ola amigo! Eu queria fazer um aplicativo igual essa “modinha” que está rolando no facebook agora do tipo: CLIQUE EM CURTIR E DESCUBRA QUE TIPO DE BEBIDA VOCÊ É ! … dai a pessoa clica em curtir aparece essa tela que você ensinou ae e publica na pagina da pessoa, a foto e o link do aplicativo para outras pessoas curtirem a pagina e fazer o teste. Como que faz isso ? Tentei fazer de tudo ja mas ta complicado.

    Veja esse exemplo:

    http://www.facebook.com/EleVsEla

    abraços, aguardo resposta 🙂

    1. Bom dia Daniel.

      Infelizmente, o que você está tentando fazer está além desse simples exemplo de como se comunicar com o Facebook usando PHP. Mas o segredo de tudo está nos links abaixo.

      Graph API – https://developers.facebook.com/docs/reference/api/
      PHP SDK overview – https://developers.facebook.com/docs/reference/php/

      Você vai ter que estudar um pouco pra conseguir construir um pequeno software como esse que você quer.

    2. Daniel. Dá uma olhada no que eu escrevi sobre um pedido parecido do Thiago nesse mesmo post.

      Vocês querem fazer aplicativos parecidos. Mas a finalidade e o jeito de fazer é o mesmo.

    • Thiago em 1 de fevereiro de 2012 às 3:55
    • Responder

    Tarcísio, consegui ajustar esse detalhe, era confirmação de token..
    Gostaria de saber de você que entende perfeitamente disso,
    consegui fazer tudo certinho, é um app para o face, de qual personagem você é, queria que para não fãs, colocar um banner e ao clicar em curtir vir outra página, tenho uma página já feita em html, como posso fazer isso ?
    agradeço se você ajudar, te pago se quiser..

    1. Bom dia Thiago.

      Como você resolveu o problema de permissões?

      Sobre o App. A parte mais difícil seria escrever no mural do cara. Assim, os amigos dele veriam e clicariam no link e assim você estaria encadeando o link. A parte de “Qual personagem você é”, teria que ser gerada com um script PHP à parte.

      Resumindo.
      – Script PHP + HTML pra gerar o “Qual personagem você é” (No seu site, fora do facebook)
      – Script PHP + Facebook onde você escreveria no mural do cara. Quando o esse Script for postar no facebook, tem que mandar o link para que os amigos do cara sejam encaminhados para a sua página de “Qual personagem você é”.

      Infelizmente, posso apenas te ajudar tirando dúvidas ou até mesmo dar dicas de planejamento.

      Dê uma olhada nos links abaixo pra ter mais domínio do código.
      Graph API – https://developers.facebook.com/docs/reference/api/
      PHP SDK overview – https://developers.facebook.com/docs/reference/php/

    • Rezende em 23 de fevereiro de 2012 às 0:34
    • Responder

    Oi Tarcisio.
    tem algum email que eu possa entrar em contato com você.
    Ou pode me add no meu msn tambem se puder.
    abraços

    1. O e-mail de contato é contato@digitaldev.com.br

  1. olá,

    parabéns pelo artigo..era o que estava procurando.
    copie seu fonte index.php, coloquei meu id e senha e a pasta..para meu site. (numa sub pasta facebookapp

    mas quando eu chamo.. não aparece aquela tela de autorização que tem no seu aplicativo..e dá uma mensagem “Ocorreu um erro. Tente novamente mais tarde.”

    Na hora de criar o app no facebook será que tem que configurar mais alguma coisa lá ?

    por exempol app domain ?
    ou selecione o modo como seu aplicativo se integra com Facebook ?

    1. Se você estiver rodando o aplicativo na sua maquina local e acessando o app com o endereço “http://localhost…”. O facebook nao vai conseguir checar a origem do acesso.

      Você precisa usar um IP válido de Internet, por exemplo, http://200.176.25.10/… ou hospedar o App em seu site.
      Obs: Usar no-ip tambem dá certo.

      • Ricardo em 8 de fevereiro de 2013 às 11:15
      • Responder

      Na verdade voce nao precisa hospedar o site para chamar o facebook, como voce mesmo perguntou dá pra configurar no APP, é só ir em Aplicativos->Devlance->Basic-> Website with Facebook Login
      Site URL: “citar aqui seu localhost”

      1. Já tentou na prática? Acredito que ele irá retornar um erro quando você tentar fazer isso.

  2. Olá,

    Consegui publicar e funcionou muito bem.
    Mas eu queria publicar no meu proprio facebook, não a pessa ter que instalar o aplicativo que fiz.
    Gostaria que elas quando tivesse navegando no meu site ao clicar num link..automaticamente publicava no meu facebook.. Não preciso saber quem clicou..só que o post apareça no meu mural como se eu tivesse digitado entende ?

    1. Achei duas funções interessantes na documentação do Framework do Facebook

      https://developers.facebook.com/docs/reference/php/facebook-setAccessToken/
      e
      https://developers.facebook.com/docs/reference/php/facebook-getAccessToken/

      Quando você concede permissão para o aplicativo acessar uma conta, a API gera um id / hash de acesso.

      Voce pode pegar o seu hash de acesso usando o getAccesToken e depois usar o setAcessToken pra deixa-lo fixo no aplicativo.

      Assim o aplicativo sempre usará a sua conta.

  3. Tarcísio
    Me tira uma dúvida.
    Gostaria de saber como determinar o post para a fanpage e não para o meu perfil, tem como?
    Abs

    1. Você vai precisar de permissão para gerenciar as fanpages.

      Para isso, substitua a linha abaixo

      $url = $facebook->getLoginUrl(array(‘scope’ => array(‘publish_stream’,’read_stream’)));

      por

      $url = $facebook->getLoginUrl(array(‘scope’ => array(‘publish_stream’,’read_stream’,’manage_pages’)));

      Agora, você precisará do Page Access Token da fanpage.

      O mesmo pode ser obtido usando o metodo abaixo.
      $accounts = $facebook->api(‘/me/accounts’);

      dentro da variável $accounts estão contidos os dados das fanpages do seu usuário, juntamente com os respectivos “Page Access Token”.

      Obs: Use var_dump($accounts) ou print_r($accounts) para imprimir tais dados.

      Após obter o “Page Access Token”, use o metodo setAccessToken($access_token) para alternar do seu profile para o profile da página

      $facebook->setAccessToken($access_token_da_pagina) ;

      Qualquer dúvida, entre em contato.

      1. Boa Tarde Tarcisio,
        usei seu exemplo para pegar os dados do perfil, porém alterando pra pegar os dados da Página não consigo exibir os dados, nem nome, nem posts… conseguie pegar os Token da pagina normalmente.

      2. ahh, muito bom seu artigo, obrigado e aguardo…

  4. E ae Tarcísio, tranquilo? belo artigo, show de bola!

    Vamos la, to com um problema aqui, sou programador PHP ja faz um tempo, ae agora resolvi dar uma olhada na PHP-SDK do face, achei meio confuso a parte de pegar dados do usuario que esta no meu app, é uma query, que na verdade no face é um Face Query hehe, mas então, ta tudo certo, to conseguindo pegar os dados do usuario e tals, porem o que esta me retornando é um array com os dados, ja fiz de tudo pra separar ou quebrar este array, nada do que eu conheço funcionou, queria postar ela aqui mas não vai dar, estou no trabalho e não lembro a senha de meu FTP para acessar a FQ, vc ja fez isso, de pegar os dados do usuario utilizando a Face Query? Eu vi que você falou ali em usar var_dump($accounts) ou print_r($accounts), eu ja utilizei estes dois, mas sempre me retornam uma porrada de dados, queria separar estes dados, tipo:

    Seu Nome:
    Sua Idade:

    e por ae vai, mas do geito que estou fazendo só retorna um array, desde ja agradeço sua pasciencia hehe, até mais

    1. usando a o método var_dump($accounts), obtemos uma resposta compatível com a mostrada abaixo.

      array(2) 
      { 
          ["data"]=> array(2) 
          { 
              [0]=> array(4) 
              { 
                  ["name"]=> string(10) "Tarcísio Ruas" 
                  ["access_token"]=> string(129) "bla bla bla" 
                  ["category"]=> string(8) "Profile" 
                  ["id"]=> string(15) "123" 
              } 
              [1]=> array(4) 
              { 
                  ["name"]=> string(10) "DigitalDev" 
                  ["access_token"]=> string(131) "bla bla bla" 
                  ["category"]=> string(11) "Application" 
                  ["id"]=> string(15) "123" 
              } 
          } 
          ["paging"]=> array(1) 
          { 
              ["next"]=> string(0) "bla bla bla" 
          } 
      }
      

      Podemos acessar os dados do accounts assim.

      echo 'Nome do primeiro usuário é '.$accounts['data'][0]['name'].'<br / >';
      echo 'Nome do segundo usuário é '.$accounts['data'][1]['name'].'<br / >';
      echo 'Nome do terceiro usuário é '.$accounts['data'][2]['name'].'<br / >';
      

      Isso é só um exemplo de como acessar os nodes (nós) do array. Poderíamos implementar tais acessos em parceria com um for ou foreach.

      Eu aconselharia a leitura das documentações abaixo.
      Arrays (Tipos PHP)
      Funções para Arrays

      for
      foreach

      Espero ter ajudado.

      1. Nossssa, e como vc ajudou, eu ja estava tentando usar algo parecido com isso, $accounts[‘data’][0][‘name’] porém me retornava um erro.

        A FQL era mais ou menos assim

        $params = array(
        ‘method’ => ‘fql.query’,
        ‘query’ => “SELECT uid, pic, pic_square, name FROM user WHERE uid me()”,
        );

        $result = $facebook->api($params);

        para printar os resultados eu fazia assim

        print_r($result);
        ou
        print($result[‘query’][‘name’]);

        e ae printava uma porada de dados ou nada hehehe

        mas agora com sua dica devo fazer assim

        echo $result[‘query’][‘name’];

        Bom, estou sem ter como testar aqui, assim que chegar em casa eu testo, vlw ae Tarcísio, té mais, abrçss

        1. Qualquer coisa, use var_dump($result) e me manda o resultado por e-mail
          contato@digitaldev.com.br

          Só que tem que ser var_dump e não print_r

          Só pra eu saber se o que tá retornando é um objeto ou um array.

          Creio que inverter de print pra echo não vai mudar em nada.

            • Alex em 21 de março de 2012 às 19:46

            Ae, deu super certo, vlw, olha como ficou

            echo $result[0][‘uid’];

            té mais

    • Alex em 21 de março de 2012 às 21:29
    • Responder

    Ae Tarcísio, olha eu aqui de novo hahahaah

    minha duvida agora é a seguinte, eu vi que você faz uma verrificação do usuario que esta acesando o app

    if($o_user == 0)

    se ele ainda não “aceitou” o app é redicionado para uma pagina para ele aceitar e tals, é isso mesmo? se sim, queria saber se você tem alguma ideia para editar esta pagina, por que no meu app quando alguem clica nele a 1° pagina que aparece ela vem com uma imagem do face pedindo pra aceitar o aplicativo, ja em outros app essa pagina com o logo do face não aparece, vai logo pro usuario aceitar o aplicativo, não sei se você esta me entendendo, e onde eu (como admin) escolho as opções que meu app vai solicitar do usuario?

    vlw cara

    1. Sobre personalizar a página de permissão, você deve entrar ir até as opções de configuração do app em developers.facebook.com.br.
      Já sobre as opções (estou imaginando que seja permissões de acesso ). Você as configura na chamada da linha abaixo

      $url = $facebook->getLoginUrl(array(‘scope’ => array(‘publish_stream’,’read_stream’)));

      onde ‘publish_stream’ e ‘read_stream’ são as permissões que o seu aplicativo terá sobre a conta do usuário.

      Para saber mais sobre as mesmas, veja a página de descrição de permissões da API do Facebook
      https://developers.facebook.com/docs/authentication/permissions/

    2. Dá uma olhada aqui nesse link
      https://developers.facebook.com/docs/opengraph/authentication/

      Ele mostra como customizar o seu aplicativo. Tá em Inglês, mas se você tiver dificuldade, dá um jeitinho com o tradutor do google….:P

    • Alex em 22 de março de 2012 às 23:12
    • Responder

    Olha eu de novo hehehehe

    Bom, agora é o seguinte, é sobre o access token, não sei bem como ele funciona, acredito que ele era pra ser unico, eu fiz assim, peguei ele $st_chave_acesso = $facebook->GetAccessToken(); e fiz uma verrificação com meu banco de dados $verrificaAccessToken = mysql_query(“SELECT * FROM usuarios WHERE usu_access_token = ‘$st_chave_acesso'”); logo em seguinda eu contei os registro desta forma if(mysql_num_rows($verrificaAccessToken) == 0) fiz isso para ver se o usuario ja tinha o access token dele gravado em minha DB para sempre chamar os dados do usuario logado usando esse access token, porem ele depois de um tempo gera um novo access token, ae não adianta nada eu salvar esses dados se sempre ira mudar o token, acho que ao inves de pegar este token vou pegar o ID do usuario logado, acredito que concigo fazer isso usando esse comendando $o_user = $facebook->getUser(); tambem acredito que esse ID seja unico, teria algum problema futuro se eu não pegar o access token? tipo se eu quiser fazer uma publicação no mural do usuario?

    segue ae meu codigo,

    //verrificando se o usuario ja esta cadastrado em nosso banco
    $verrificaAccessToken = mysql_query(“SELECT * FROM usuarios WHERE usu_access_token = ‘$st_chave_acesso'”);
    //se ele não esta cadastrado ainda
    if(mysql_num_rows($verrificaAccessToken) == 0) {
    //ele vai ser cadastrado agora hehe
    mysql_query(“INSERT INTO usuarios ( usu_nome, usu_access_token, usu_data) VALUES (‘$userNome’, ‘$st_chave_acesso’, ‘$date’)”);
    }else{ //caso ja esteja cadastrado, pegamos os dados do manolo
    $pegaDados = mysql_fetch_object($verrificaAccessToken);
    $userNomeDB = $pegaDados -> usu_nome;
    }

    oque você faria em meu caso? para salvar alguns dados do usuario em seu banco e usar depois no app

    1. É verdade que o Access Token tem um tempo de vida e que ele pode mudar, mas sem a existência dele, o acesso é impossível. Não adianta você forçar o acesse pelo USER_ID.

      Sobre guardar alguns dados do usuário no banco. Eles podem ser adquiridos usando o código abaixo.

      $dados_usuario = $facebook->api(‘/me’);

      mais uma vez, espero ter ajudado.

  5. Cara, gostaria de criar um aplicativo PHP no facebook. Preciso de algumas ajudas, não pode fornecer MSN para mim? Te ofereço algo em troca.

    Abraços! Espero repostas

    1. Bom dia Lucas.

      O que eu posso fazer por você é tentar resolver suas dúvidas sobre como acessar os dados da API e como usar o Framework em PHP.

    • Jonathan em 12 de abril de 2012 às 1:59
    • Responder

    Olá Tarcísio,

    Poderia nos dar uma base pelo menos um pequeno código desses aplicativos populares?
    Exemplo: Descubra qual personagem?..

    Acho que tem muita gente que gostaria de aprender a cria- lo mais não sabe por onde começar..

    Obrigado.

    1. Jonathan, esses aplicativos populares as vezes não usam uma linha de PHP, apesar de você poder usar a API e Framework na construção dos mesmos. Porém, o intuito desse post é mostrar como integrar o seu site ou serviço com o mural do facebook. Isso não impede de escrever um aplicativo popular do tipo “Descubra qual personagem”, mas isso depende de um planejamento, uma outra hora e até mesmo um artigo diferente. Fique atento às novidades do blog.

    • isabela em 16 de abril de 2012 às 11:55
    • Responder

    Boa tarde, Tarcísio!
    Acho que vc vai poder me dar a resposta que a central da Philipis não soube. Pode me fazer este favor?
    Tenho uma tv philips que eu acesso pelo note. Só que quando entro no face, e somente na página inicial, mostra a seguinte mensagem: (#200) Requires extended permission: read_stream. Consigo entrar no meu mural, ver fotos e tal..mas a página inicial não.
    Vc pode me ajudar?
    A assistência técnica da Philips não sabe nem o que é isto…
    Muito obrigada se puder me ajudar!
    Valeu,
    Isabela

    1. Boa tarde Isabela.

      Provavelmente, a TV da Philips usa essa mesma API citada nesse post.

      O conselho que te dou é entrar no Facebook, ir em Configurações de Privacidade, no topo direito e desativar o aplicativo da TV. Após isso, tentar reconfigurar a TV (Excluir / Reincluir a conta do facebook) para ver se o problema é resolvido.

      Se isso não te ajudar, vou começar a acreditar que é um problema no programa da TV.

    2. Tem um link mostrando como remover um aplicativo do seu Facebook

      http://www.tudosobrefacebook.com.br/index.php/2012/02/como-controlar-e-remover-aplicativos-do-seu-facebook/

  6. Muito bom o post e parabéns pela paciência em responder toda essa galera. Você com certeza merece sucesso cara! Abraço!

    1. Obrigado Daniel

  7. Oi tarcísio eu sempre tento fazer um app em php, para o FB mas eu nunca consigo
    sei que e um saco geral deve te pertubar rsrsr
    mas teria como vc me dar uma luz
    eu queria fazer um app
    tipo assim olha vou te mandar um app que tem no face

    esse mostra so o nome http://i.imgur.com/R5ioc.jpg

    esse mostra o nome e a foto http://i.imgur.com/QW0Al.jpg

    eu aprendo super rapido se vc me falar uma vez só eu aprendo

    eu to uns 4 meses tentando achar algo ensinando e vc foi o unico se puder meda uma ajuda passar seu msn essas coisas vai me ajudar bastanteee
    obrigado aguardo o seu contato

    1. Bom dia Leo.

      Eu também nunca cheguei a programar esse tipo de aplicativos para o Facebook. O intuito desse post é ajudar pessoas que queiram integrar seus sites em PHP com o Facebook. Por esse motivo, não foquei em mostrar como construir aplicativos do tipo “Que personagem de desenhos você é?”. Mas se tiver alguma dúvida sobre o uso da API do Facebook ou do Framework, pode postar aqui que eu vou tentar ajudar.

    • Monteiro em 25 de maio de 2012 às 8:51
    • Responder

    Olá Tarcísio,
    Estou com um probleminha que ainda não consegui resolver.
    Estou desenvolvendo um app para uma Fan Page mais não esta conseguindo pegar o access token da mesma automatico, sei o access token tem uma tempo de vida de mais ou menos 2 horas, como que faço para que outros usuários (Que não seja Adm), consiga postar nessa Fan Page por esse app?
    Grato.

    • Zhago em 26 de maio de 2012 às 18:26
    • Responder

    Cara, quero criar um aplicativo desses, mas quero somente gerenciar minhas páginas, tem como você me ensinar? Desde o começo :S

    • bruno br em 30 de maio de 2012 às 12:09
    • Responder

    Cara estou com um problema.
    se eu nao estiver logado e acessar o link do aplicativo ele me pede login e senha ai entro ele pede para eu permitir de postar em nome e tal ate ai tudo bem ai depois disso ele abre o meu link onde esta o meu arquivo da app inves de mostrar dentro do facebook esta como se estivesse por fora. nao esta dentro do iframe do facebook

    e mais uma coisa sem querer ser chato de mais se eu acessar o aplicativo estando logado ele nao pede permissao para poder postar em meu nome ai quando entra o aplicativo da erro por nao ter pedido permissao.

    1. Sobre o aplicativo estar dando erro na hora de postar. Teria como postar o erro aqui?
      Agora, sobre o aplicativo estar abrindo fora do frame. Para isso, você deve preencher o campo App on Facebook, mostrado na imagem abaixo, com um link https.

        • Joao paulo em 1 de dezembro de 2012 às 10:33
        • Responder

        Isso acontece comigo tambem! Tem algum post seu que fala especificamente sobre isso? ou vc poderia explicar melhor essa parada pra gente, sobre httpS. o meu tá dando erro.

    • Jorge Nova em 1 de junho de 2012 às 17:03
    • Responder

    Fala irmão, vê se você pode me ajudar…

    copiei exatamente o seu código no meu app,

    após eu permitir que o aplicativo acesse os meus dados, quando faz o redirecionamento ele retorna esse erro pra mim….

    ERRO ==>> CSRF state token does not match one provided.

    O que será que pode estar acontecendo?

    desde já agradeço pela sua atenção,

    att,

    Jorge Nova

    • bruno br em 4 de junho de 2012 às 12:43
    • Responder

    Cara resolvi meus problemas daqui a pouco vou postar as paradas que eu corrigi.
    para ajudar quem estiver passando por esse problema.

      • Sandro Porto em 6 de junho de 2012 às 8:19
      • Responder

      Bom Dia Bruno,
      vc consegue disponibilizar sua solução pra galera?

    • AManda em 11 de junho de 2012 às 0:28
    • Responder

    Ola

    Segui exatamente o tutorial como tu explicou, mas quando eu tento executar a pagina diz que a pagina tem um loop de redirecionamento.
    copiei os arquivos da pasta src para dentro de uma pasta chamada FacebookApi e esse codigo do script é a index.php

    qual motivo desse erro??

    Obrigada

    1. Bom dia Amanda.

      Como mostra o código abaixo, existe um redirecionamento para a página de autenticação do facebook. Porem o mesmo não está em nenhum controle de fluxo do tipo loop (for, while, do while). Você chegou a fazer alguma alteração no código?

      if($o_user == 0)
      {
       
          //Envia para a página de permissão do facebook, nela voce irá dar permissão ao aplicativo
          //acessar dados da sua conta
          $url = $facebook->getLoginUrl(array('scope' => array('publish_stream','read_stream')));
          header("Location:".$url);
      }
      

      No final do post, existe um link para fazer download dos arquivos exatamente como são encontrados no post. Assim não é preciso dar CTRL+C, CTRL+V do texto no corpo do post.

      Qualquer coisa, entre em contato via e-mail, tarcisioruas@gmail.com

  8. O meu script às vezes demora muito para carregar e eventualmente retorna o seguinte erro:

    Fatal error: Uncaught CurlException: 28: SSL connection timeout thrown in

    O que pode ser isso?

    1. A conexão feita entre o servidor onde está seu código e o servidor do facebook está demorando tanto que o a função de conexão está desistindo e gerando o erro. Isso pode estar acontecendo porque a conexão do seu servidor está sobrecarregada, o link dele pode estar comprometido ou lento por vários motivos, pode haver um bloqueio entre o seu servidor e esse tipo de conexão com o facebook, pode existir um bug no seu código e/ou até mesmo haver um bug na biblioteca de conexão usada pelo PHP (php_curl).

  9. E ae Tarcísio, blz?

    Entao, estou com um problema, meu app vai trabalhar com imagens dos albuns dos usuarios, porem quando eu testo ele meus albuns e imagens aparecem numa boa (acho que é porq sou o administrador) e quando outro alguém acessa ele não aparece nada sobre os albuns do usuario, acredito que tenho que pedir para o usuario aceitar que o app use as imagens e albuns dele, é ae quem vem a questão, como conseguir isto? sei que quando o usuario entra pela 1° vez no app ele (o app) pede para o usuario aceitar algumas coisas, é ae nesta parte que tenho que colocar que iremos usar os albuns do usuario, vou deixar aqui uma img para vc entender melhor oque qeuro falar

    link dela

    http://www.uploadeimagem.net/upload/79cc267f.png

    espero que vc tenha entendido minha duvido, sucesso com seu blog, está muito bom!

    • Francisco em 28 de julho de 2012 às 17:50
    • Responder

    Tarcisio, boa tarde

    Em primeiro lugar parabens pela explicacao… procurei muito pela internet e só essa realmente está bem explicada, atual e funcional… parabens..

    Tenho uma duvida simples… esse aplicativo que voce ensinou permitiu acessar dados de uma site externo nos dados do Facebook, certo… mas ele nao aparece na minha lista de aplicativos que ficam do lado esquerdo do FB, esse seria outro tipo de aplicativo?? esses aplicativos que rodam dentro do facebook seriam outro caso, certo?? ou fiz algo errado??

    obrigado

    Francisco

    • Willian Keller em 20 de agosto de 2012 às 15:39
    • Responder

    Uau cara, poxa, gostei do seu post, foi difícil encontrar uma font que funciona, ainda não testei a sua, mas pelo que li nos comentários, vai funcionar….

    Obrigado, e parabéns!

    • Willian Dutras em 14 de setembro de 2012 às 20:02
    • Responder

    Olá Tarcisio, você pode me dizer como eu faço para mostra a foto do perfil dos amigos de um usuário ?
    Tipo aqueles apps que mostram qual dos seus amigos lhe-amam…
    Eu já sei a função que mostra a foto do perfil do usuário que acessar o app, que no caso é esse print_r($user_profile);

    Obrigado pela paciência, aguardo resposta…

  10. Olá Tarcísio..
    Quero criar um aplicativo de arvore da decisao..
    queria acessar os dados dos amigos usuario e comparar com a resposta dada por cada usuario. E atribuir pontos para cada amigo do usuario na qual a resposta for igual à informaçao na conta deste amigo.

    Como posso fazer isso?

    • William Martins em 26 de outubro de 2012 às 20:35
    • Responder

    Parabens cara, esse artigo me tirou varias duvidas. Show de bola.
    Queria saber se ‘e possivel mandar um link por esse form e aparecer em miniatura, com uma foto e descricão do site igual quando e feito de dentro do proprio face?

    Abraco
    Will Martins

      • William Martins em 26 de outubro de 2012 às 20:44
      • Responder

      Fiz a pergunta e logo depois fui pesquisar, rsrsrs, achei isso no proprio face (http://developers.facebook.com/docs/reference/php/facebook-api/). Vou comecar por aqui.

      $ret_obj = $facebook->api(‘/me/feed’, ‘POST’,
      array(
      ‘link’ => ‘www.example.com’,
      ‘message’ => ‘Posting with the PHP SDK!’
      ));

      Vlw

  11. Cara ta muito bom o seu site. Agora como eu sou uma topeira pra programar, eu fui tentar fazer direitinho o seu tutorial, hospedando a pasta e o arquivo. Mas quando vou executar da um erro. Olha só:

    Fatal error: Uncaught exception ‘Exception’ with message ‘Facebook needs the CURL PHP extension.’ in /srv/disk8/1177867/www/tanqueclassea.dx.am/facebook/FacebookApi/base_facebook.php:19 Stack trace: #0 /srv/disk8/1177867/www/tanqueclassea.dx.am/facebook/FacebookApi/facebook.php(18): require_once() #1 /srv/disk8/1177867/www/tanqueclassea.dx.am/facebook/index.php(3): require_once(‘/srv/disk8/1177…’) #2 {main} thrown in /srv/disk8/1177867/www/tanqueclassea.dx.am/facebook/FacebookApi/base_facebook.php on line 19

    Ah o link é esse: http://tanqueclassea.dx.am/facebook/

    Agradeço se puder me ajudar.

    1. Bom dia Ângelo.

      Em primeiro lugar, quero pedir desculpas por tanta demora em responder. Mas vi, clicando no link, que você ainda não solucionou o problema.

      O que eu tenho a dizer é que, para o framework do Facebook funcionar, é preciso que a extensão “php5-curl” do php esteja ativa no seu servidor. O problema é que, se você estiver usando um servidor contratado, vai ter que entrar em contato com o administrador do mesmo e pedir pra ativar.

      Já na sua maquina, se estiver usando Ubuntu, o comando para instalação é
      apt-get install php5-curl

      Já es estiver usando Windows, abra o arquivo php.ini, que se encontra na pasta do programa PHP e modifique a linha ;extension=php_curl.dll retirando o ; do inicio da mesma, deixando-a assim extension=php_curl.dll

      Para mais informações sobre a biblioteca curl, veja o link http://br2.php.net/manual/pt_BR/book.curl.php

    • Pedro Henrique em 30 de outubro de 2012 às 17:07
    • Responder

    Olá Tarcísio.

    Agradeço por compartilhar seu conhecimento.

    Comecei a pouco a fazer o primeiro aplicativo para o FaceBook, mas já programo em PHP à alguns anos.

    Não sei se já passou por essa situação. Após criar a aplicação, sai da conta do Face para testar o Login e a liberação das permissões do FaceBook, mas ao digitar o endereço do aplicativo, aparece a mensagem no navegador:

    “Este conteúdo não pode ser exibido em um quadro ……..”

    “Você pode tentar: Abrir este conteúdo em uma nova janela”.

    Ao clicar nessa opção de abrir em nova janela, tudo funciona como deveria.

    Como é uma questão de navegador, tem como solucinar essa questão?

    Desde já agradeço qualquer ajuda.

    Abraços e sucesso pra vc.

    Att,

    Pedro

    1. Bom dia Pedro.

      Em primeiro lugar, gostaria de pedir desculpas pela demora em responder.

      Sobre o seu problema, existe algum frame envolvido no seu código? Me parece que esse é o problema.

  12. olá Tarcísio, preciso de uma ajuda, porque não intendi aonde cola os arquivos que estão na pasta ”src” se for possível você me adicionar no facebook para você me explicar melhor eu agradesso desde já.
    me perfil no facebook:https://www.facebook.com/luciano.reiis

    • Allan em 12 de dezembro de 2012 às 23:43
    • Responder

    Olá, Tarcisio!

    Parabéns pelo post, bem didático. Segui suas orientações, baixei o arquivo e subi em meu servidor. Contudo, não consigo fazer funcionar.

    O script está neste endereço: http://www.neros.com.br/web/projetos/facebook (coloquei no App também). Quando acesso esse endereço, o script me redireciona para o endereço http://www.neros.com.br/?state=c64ae81bd524c41d98b11afb8db57684&code=AQAi9BdJBvXyV6p7T4HJWu0E2ec9d-YezyVVVXNMylRBNlBQmlgXz9p_9K3PWcqSQxaBzZYIfFoosz6u4HA6lcJORb5B72cuK99RFwWIgfEfiWB7xfMnwttpK0ScZFxpKLVvPo2SmGHzf5rjWQQqdz1etxxeYd-UGmUfKYOW_ayZucYAul3tpCLYzTLhxDqWiwiKd_axgJwfGPfPMjKIPHEo#_=_ e traz no corpo da página “Directory List denied”. Pode me ajudar?

    Obrigado!

    • Iris em 23 de dezembro de 2012 às 21:23
    • Responder

    Olá amigo, primeiro quero deixar meus parabens pelo seu tutorial. Bom fiz exatamente como rege o texto e pimba, na mosca. tudo Ok aq. Ver meu teste aqui -> http://irispn.com/facebook . Bom agora eu queria adicionar / salva os dados dos usuarios: nome email e cidade em meu banco de dados mysql, como eu posso fazer isso,? Desde já muito obrigado pela atenção sempre desejando sucesso ai em seu site.

    • Rafael em 2 de janeiro de 2013 às 13:26
    • Responder

    Olá, parabéns pelo post, estava procurando há algum tempo como fazer login em um website pelas redes sociais, sua postagem ajudou muito, intençao era receber dados como “nome, username, id, image” para criar um sistema de comentarios no site com avatar do perfil se puder publicar outra versão para google+ e twitter seria muito útil….obrigado.

    • André Gomes Vieira em 2 de janeiro de 2013 às 16:05
    • Responder

    Boa tarde, Amigo.

    Gostaria de saber se pode me ajudar: um cliente deseja saber se um usuário curtiu ou não sua fanpage antes de “registrar” o usuário em promoções (tipo a página da budwiser).
    Sou programador, mas não manjo nada de facebook (api etc.), nem tenho tanto tempo para. Estaria interessado em fazer e, no caso, quanto cobraria.

    Att.

    • EnigmA em 15 de janeiro de 2013 às 16:41
    • Responder

    Muuuito boa explicacao!! o código funciona e me ajudou bastante!
    Deixa eu te perguntar… e pra requisitar o e-mail da pessoa como eu faço?

    1. Para ter acesso ao e-mail do usuário, você vai precisar de permissão pra isso, então
      substitua o código abaixo

      $url = $facebook->getLoginUrl(array(‘scope’ => array(‘publish_stream’,’read_stream’)));

      por

      $url = $facebook->getLoginUrl(array(‘scope’ => array(‘publish_stream’,’read_stream’,’email’)));

      Assim, quando um usuário der permissões de acesso ao seu app, você poderá ter acesso as informações de e-mail do mesmo.

      Se você usar

      $me = $facebook->api(‘/me’);

      poderá pegar o e-mail do usuário usando $me[‘email’]

      Espero ter ajudado, qualquer coisa entre em contato novamente.

    • Sabrina em 30 de janeiro de 2013 às 9:46
    • Responder

    Olá Tarcísio! Muito bom seu tutorial! Parabéns!!!!
    Gostaria de saber como é possivel publicar um texto (tipo artigo) do meu site em php no timeline da minha fanpage no facebook. é possível?
    por exemplo, numa partida de futebol quando um time faz um gol e eu publico no site: “Gol do Brasil. Brasil 1 x 0 Argentina”. Ser publicado automaticamente na fanpage tb.
    Obrigada pelo tuto. Espero que possa me ajudar nesse probleminha tb.

    1. Você vai precisar de permissão para gerenciar as fanpages.

      Para isso, substitua a linha abaixo

      $url = $facebook->getLoginUrl(array(‘scope’ => array(‘publish_stream’,’read_stream’)));

      por

      $url = $facebook->getLoginUrl(array(‘scope’ => array(‘publish_stream’,’read_stream’,’manage_pages’)));

      Agora, você precisará do Page Access Token da fanpage.

      O mesmo pode ser obtido usando o metodo abaixo.
      $accounts = $facebook->api(‘/me/accounts’);

      dentro da variável $accounts estão contidos os dados das fanpages do seu usuário, juntamente com os respectivos “Page Access Token”.

      Obs: Use var_dump($accounts) ou print_r($accounts) para imprimir tais dados.

      Após obter o “Page Access Token”, use o metodo setAccessToken($access_token) para alternar do seu profile para o profile da página

      $facebook->setAccessToken($access_token_da_pagina) ;

      O resto é exatamente igual.

      Qualquer dúvida, entre em contato.

  13. Fala Tarcício, tudo bem? Parabéns pelas explicações, com certeza tiraram muitas dúvidas. Tive um problema ao tentar fazer o app. Eu configurei a aba em Page Tab. Fiz uma página de promoções, o usuário entra na aba, aparece a promoção ele clica no botão “participar” e nessa página o aplicativo pede permissão e grava os dados do usuário em um banco de dados. Dessa forma foi, porém, se eu tiver 10 promoções, vou ter que criar 10 aplicativos e as pessoas terão que ficar dando permissão.

    Pensei em colocar a permissão já de cara na página, assim posso pegar os dados do usuário já na página inicial. O problema é que quando eu coloco a url do app em Website with Facebook Login, a aba retorna em branco. Não aparece erro nenhum. E se eu acessar o link direto pelo navegador, funciona.

    Consegui ser claro?
    Obrigado pela ajuda e mais uma vez parabéns pelas iniciativas.

    Sucesso!

    1. Boa noite Henrique, eu nunca cheguei a explorar as funcionalidades a tal ponto, mas posso te ajudar a debuggar, me manda um e-mail via contato@digitaldev.com.br que eu te respondo com meu e-mail pessoal.

    • Thales Farias em 20 de fevereiro de 2013 às 10:36
    • Responder

    Ola Tarcísio excelente publicação.
    Gostaria de saber se é possível eu postar um código html usando a ideia deste formulário que você criou e o mesmo ser exibido no mural do usuário.

    1. Bom dia Thales. Acredito que assim como uma publicação feita diretamente no facebook, o código html será desprezado ou terá suas tags escapadas.

    • Danilo em 7 de março de 2013 às 16:48
    • Responder

    Olá Parabéns Tarcísio pelo ÓTIMO POST, funcionou perfeitamente.

    Gostaria de tirar uma dúvida, como eu consigo retornar a imagem do perfil, a imagem PRINCIPAL do usuário, ele retorna, nome, cidade, mais a foto do perfil não, tem como me ajudar…. Abraços…

    1. Boa noite Danilo.

      Veja um exemplo de como mostrar a imagem do avatar do usuário que está logado no App

      echo ‘<img src="https://graph.facebook.com/‘. $me[‘id’] .’/picture">’

      Você também pode manipular o tamanho da imagem usando parametros WIDTH e HEIGHT, como abaixo

      echo ‘<img src="https://graph.facebook.com/‘. $me[‘id’] .’/picture?width=140&height=110">’

      Além de tamanhos pré definidos pelo Facebook

      echo ‘<img src="https://graph.facebook.com/‘. $me[‘id’] .’/picture?type=large">’

      Onde type pode assumir os seguintes valores

      square
      small
      normal
      large

      Se tiver outras dúvidas, entre em contato.

        • Danilo em 8 de março de 2013 às 8:50
        • Responder

        E para o retorno de e-mail, eu não consegui tb…. o e-mail não retorna $me[‘email’], como devo proceder

  14. Tentei baixar o arquivo aqui e é um arquivo em formado .MD apenas.. procede isso?

    1. O formato é .zip

  15. Olá Tarcísio, no caso eu trabalho com eventos e tenho 100 contas de facebook que amigos me passam para convidar para festas, eventos no faceboook. Eu queria ter um aplicativo hospedado e outro esses meus amigos terem instalado em seu facebook.
    Quando eu for convidar para um evento no facebook eu só logaria e disparava para essas contas convidarem no evento, e se eles mudarem a senha eu teria do mesmo modo como convidar para o evento por que eles teriam o aplicativo instalado. Como posso fazer isso?

  16. Você foi perfeito na publicação desse artigo!
    Muito bom e ajudou demais!!!

  17. Muuuito boa explicacao!! o código funciona e me ajudou bastante!

  18. Muito bom artigo, Parabéns, e obrigado por compartilhar
    Sucesso.

  19. Muito bom artigo amigo…parabéns…

    Eu preciso fazer o seguinte veja se pode me ajudar.

    Quero que a pessoa possa compartilhar fotos na linha do tempo dela ao instalar o aplicativo, quero que depois dela compartilhar pelo meu site, ela possa validar a publicação depois de compartilhar. É fácil adaptar para isso?

    Agradeço se puder ajudar

    • Marcos em 12 de junho de 2013 às 1:33
    • Responder

    Boa noite!

    Gostaria de saber se é possível fazer o seguinte, ao acessar um aplicativo PHP, verificar se a pessoa existe no Face e colher estes dados, caso exista permitir acesso.
    desde ja grto

    1. Não entendi bem. Verificar se uma pessoa existe no facebook? E se ela existir, permitir acesso? Acesso ao que?

    • Danyllo em 25 de junho de 2013 às 18:29
    • Responder

    É possível com este código pegar Hashtags mais usadas no Face e imprimi-las na tela?

    1. Para isso, seria necessário varrer os post do Facebook. Em momento, não imagino como fazer isso.

  20. Tarcísio, eu tentei usar seu codigo
    mas esta dando erro de certificado
    “Invalid or no certificate authority found, using bundled information”

    tem alguma dica pra mim?

    1. Na verdade, é a primeira vez que estou tendo contato com esse erro. Preciso verificar o por quê do mesmo.

      1. Eu dei uma pesquisada, e encontrei essa resposta
        Facebook::$CURL_OPTS[CURLOPT_CAINFO] = getcwd().’/fb_ca_chain_bundle.crt’;
        ele força usar o certificado, na pasta

      2. vlw pela atenção

    • Tadeu em 19 de julho de 2013 às 0:25
    • Responder

    Boa noite Tarcísio, muito bom seu post, estou aprendendo a trabalhar com a integração de php com o facebook. Executei seu script, rodou legal, porém, digito a mensagem e envio mas não posta nada no meu mural. O que pode ser? Você tem algum exemplo também de como postar em grupos?

      • Tadeu em 19 de julho de 2013 às 12:20
      • Responder

      Já consegui resolver a questão da postagem…Agora só gostaria de saber se poderia me explicar como funciona a parte para postar direto nos meus grupos.

  21. Estou com o mesmo erro do Uhitlei. O que será?

    1. A solução que o Uhitleu postou resolveu meu problema, porém, agora estou com outro, tanto o email quanto a cidade onde mora do usuário estão retornando em branco, só quando acesso com o meu usuário (administrador do app) é que estas informações retornando corretamente. Tem alguma ideia sobre isso? Obrigado.

      1. Para ter acesso ao e-mail do usuário, você vai precisar de permissão pra isso, então
        substitua o código abaixo

        $url = $facebook->getLoginUrl(array(‘scope’ => array(‘publish_stream’,’read_stream’)));

        por

        $url = $facebook->getLoginUrl(array(‘scope’ => array(‘publish_stream’,’read_stream’,’email’)));

        Assim, quando um usuário der permissões de acesso ao seu app, você poderá ter acesso as informações de e-mail do mesmo.

        Se você usar

        $me = $facebook->api(‘/me’);

        poderá pegar o e-mail do usuário usando $me[‘email’]

        Espero ter ajudado, qualquer coisa entre em contato novamente.

        1. Obrigado. Está funcionando perfeitamente agora. Só gostaria de mais uma coisa, mostrar a foto do perfil do usuário. Vi em um post acima que vc explica como fazer isso, mas fiz e não funcionou. Preciso incluir algo na permisão também?

            • Tarcísio em 19 de julho de 2013 às 17:41
              Autor

            Você tentou fazer assim?

            Boa noite Danilo.

            Veja um exemplo de como mostrar a imagem do avatar do usuário que está logado no App

            echo ‘

            Você também pode manipular o tamanho da imagem usando parametros WIDTH e HEIGHT, como abaixo

            echo ‘

            Além de tamanhos pré definidos pelo Facebook

            echo ‘

            Onde type pode assumir os seguintes valores

            square
            small
            normal
            large

    • Tadeu em 19 de julho de 2013 às 17:43
    • Responder

    Alguém poderia me ajudar como faço para postar mensagem diretamente nos meus grupos?

    1. Primeiro, você vai precisar da permissão de acesso aos grupos do usuário

      $url = $facebook->getLoginUrl(array(‘scope’ => array(‘publish_stream’,’read_stream’)));

      por

      $url = $facebook->getLoginUrl(array(‘scope’ => array(‘publish_stream’,’read_stream’,’user_groups’)));

      Agora, seguindo a documentação do Facebook

      Você poderá criar posts no mural do seu grupo enviando uma requisição para /ID_DO_GRUPO/feed com os parâmetros.

      Então, para publicar, ficaria como abaixo

      $post = array(‘message’ => $_POST[‘status’]);
      $feed = $facebook->api(‘/ID_DO_GRUPO/feed’, ‘POST’, $post);

      Se não der certo, vou tentar implementar o código na prática e testar eu mesmo.

        • Tadeu em 19 de julho de 2013 às 18:04
        • Responder

        Como eu pego os ids dos meus grupos? Eu quero postar em todos os meus grupos ao mesmo tempo. Tem como?

  22. Foi assim mesmo que fiz, Tarcísio.

    1. Consegui. Eu tinha esquecido de colocar o echo antes de ”. Muito obrigado. Você me ajudou muito com este tutorial. Abraço.

    • Tadeu em 22 de julho de 2013 às 0:41
    • Responder

    Boa noite pessoal,
    estou tentando realizar postagem para grupos do meu perfil, porém, o sistema envia para alguns grupos e depois me retorna esta mensagem: Fatal error: Uncaught OAuthException: (#200) Must have permission to see group.

    Alguns grupos recebem a mensagem, porém, depois ele me retorna a mensagem acima..acho que uns 7 grupos recebem mais ou menos. Alguém sabe o que poderia ser?

    1. Me parece que você está tentando postar em um grupo que não permissão de postagem. Algum grupo fechado que você não é vinculado. Como você ta fazendo pra pegar os ids dos grupos?

        • Tadeu em 22 de julho de 2013 às 9:33
        • Responder

        //AKI EU RECEBO OS DADOS DA CONEXÃO COM O FACEBOOK
        $user = $facebook->getUser();

        if ($user)
        {
        try
        { //RECEBE OS DADOS DO FACEBOOK DA PESSOA
        $grupos = $facebook->api(‘/me/groups’,’GET’);
        $user_profile = $facebook->api(‘/me’,’GET’);
        }
        catch (FacebookApiException $e)
        {
        error_log($e);
        $user = null;
        }
        }
        else
        {
        $url = $facebook->getLoginUrl(array(‘scope’ => ‘email,user_groups,publish_stream,read_stream,publish_actions’));
        }

        // AKI EU ARMAZENO TODOS OS MEUS GRUPOS

        $tamanho = count($grupos[‘data’])-1;
        while($tamanho>=0)
        {
        $id_grupo = $grupos[‘data’][$tamanho][‘id’];
        $nome_grupo = utf8_decode($grupos[‘data’][$tamanho][‘name’]);
        .
        .
        .
        .
        $tamanho–;
        }

        Assim que eu estou pegando os dados do grupo para postagem..

        1. Tenta pegar o ID do grupo que voce ta postando e não ta funcionando

          try
          {
          $post = array(‘message’ => $_POST[‘status’]);
          $feed = $facebook->api(‘/’.$id_grupo.’/feed’, ‘POST’, $post);
          }
          catch(OAuthException $e)
          {
          echo ‘Id do grupo = ‘.$id_grupo.”;
          }

    • Tadeu em 22 de julho de 2013 às 10:39
    • Responder

    Achei o grupo que ele não está postando… ID: 364690630266101

    A partir deste grupo ele não postou mais…tentei acessar o grupo aqui no face e realmente não abre… tem como eu fazer alguma validação se o grupo está acessivel antes de enviar?

    1. Coloca o bloco try{}catch{} como mostrado anteriormente. Se ele não conseguir postar, não vai parar o laço do while e lançar a exceção OAuthException, vai continuar a postar nos outros grupos…

        • Tadeu em 22 de julho de 2013 às 11:37
        • Responder

        Tentei isso mas não deu certo…continuou dando o mesmo erro…

        $resultado = $MySQLi->query($sql) OR trigger_error($MySQLi->error, E_USER_ERROR);

        while($dados = $resultado->fetch_assoc())
        {
        try{
        $grupo = $dados[‘id_grupo’];
        $feed = $facebook->api(‘/’.$grupo.’/feed’, ‘POST’, $post);
        }
        catch(OAuthException $e) {
        echo “Id do grupo = “.$grupo;
        }
        }

        1. Estranho, porque se a quebra de código é por meio de exceção, o try{}catch{} deveria capturar a mesma. Será que não ta gerando a exceção em outra linha diferente da que está a instrução $feed = $facebook->api(‘/’.$grupo.’/feed’, ‘POST’, $post);?

            • Tadeu em 22 de julho de 2013 às 11:54

            Não estava entrando no Catch{} … troquei o OAuthException por FacebookApiException e ai funcionou perfeitamente. Você é o cara Tarcício… valew meu irmão.

    • Tadeu em 22 de julho de 2013 às 22:47
    • Responder

    Eu de novo…os envios para os grupos estão funcionando beleza…porém, estou com outro prolema agora…

    Quando faço envio para uns 10 ou 15 grupos funciona normal e no final o sistema me mostra uma mensagem que terminou o envio, porém, quando envio para mais grupos, tipo uns 30+- ele faz alguns envios e fica congelado a tela…não da erro nem nada..porém, a página para de processar e não é enviado a mensagem para todos os grupos… o que pode ser?

    1. Eu acho que deve ter alguma coisa ligada ao max_execution_time do PHP onde você ta rodando o código. Por segurança, quando o tempo de execução ultrapassa uma certa quantidade, ele simplesmente para o código. Mas não tenho certeza que é isso.

        • Tadeu em 23 de julho de 2013 às 11:06
        • Responder

        Alterei o max_execution_time do PHP para 600 mas continua com o problema..

        1. Tenta mudar o default_socket_timeout

      • MaxMax em 19 de novembro de 2013 às 10:06
      • Responder

      Parabens pelo artigo

      Só uma pergunta, voce sabe se existem limites de publicações (número de grupos, intervalo entre publicações, etc) ? (procurei e não achei sobre)
      Abraços

      1. Não sei responder MaxMax…

    • Henrique em 28 de julho de 2013 às 18:09
    • Responder

    Criei o aplicativo e adicionei o script acima, porém a página aparece em branco na fan page onde o app foi instalado. Como posso resolver isso?

    Obrigado!

    1. Henrique, para voce rodar um aplicativo dentro do facebook, seu domínio precisa de um certificado SSL, ou seja, tem que ser https://. Alem disso, o script só será executado após o usuário clicar no botão curtir.

        • Tadeu em 29 de julho de 2013 às 21:06
        • Responder

        Estou enviando foto para o perfil e grupos, porém, ela aparece pequena. Como faço para ela aparecer em tamanho grande? Como envio foto junto com a mensagem para grupos?

    • Inaldo Eleuterio em 6 de agosto de 2013 às 8:16
    • Responder

    Olá, Tarcísio.

    Minha dúvida é apenas em relação a capturar preferências do usuário. Por exemplo, livros lidos:

    $books = $facebook->api(‘/me/books.reads’,’GET’);

    Vi pelo open graph que o tipo de permissão seria o publish_actions, mas de qualquer maneira, não funciona. O que poderia estar errado?

    PS.: Ótimo site, cara.

  23. Tarcísio explendido seu post, me ajudou muito, estou iniciando agora, tenho uma duvida: com esse codigo eu consigo logar apenas usando o usuario das credenciais App_ID e App_Secret tem como eu logar com meu outro usuario do facebook e listar por exemplo todos os grupos desse usuario, tentei e o resultado foi que a pagina fica carregando o tempo todo, no chome disse que a pagina caiu em um loop infinito. tentei usar a dica que vi acima com o codigo $url = $facebook->getLoginUrl(array(‘scope’ => array(‘publish_stream’,’read_stream’,’email’))); mas mesmo assim não logou com outro usuario. poderia me ajudar ?

  24. Tarcísio

  25. Gostaria de sabe se consigo utilizar para fazer postagens em uma fanpage através de um CMS

    • Mario em 15 de novembro de 2013 às 18:30
    • Responder

    Boa Noite Tarcísio,

    eu consigo listar os meus contatos do face com e-mail e nome em php?

    Mario

  26. bom dia tarcisio gostei da publicaçao agora com ela estou tentando aqui interligar o sistema de pedido de musica da minha radio que é php com o facebook meu sistema é esse http://pedidos.webradiouniversalfm.com/browse.php com o facebook eu vi isso em uma radio gostei muito a radio que eu vi foi essa http://www.radiocoisavelha.com/ se vc tiver alguma dica por favor agradeceria muito

  27. Tenho um sistema onde os usuários postam fotos de seus trabalho como um portfolio, como faço para que após a publicação no site o algoritmo post direto na FanPage do meu sistema? para automatizar a divulgação?

    esse seu código só me permitiria publica na meu próprio perfil?

    • Rodrigo em 25 de maio de 2014 às 15:45
    • Responder

    Tarcísio, não sei se vc pode me ajudar mas não custa tentar.

    Na parte que é necessário colocar a url do script de conexão, o facebook da erro dizendo que a url foi detectada como maliciosa ou abusivo.

    Eu utilizo um domino gratis da tipo: .url.ph, será que este é o problema?

    • Kátia em 21 de fevereiro de 2015 às 22:54
    • Responder

    Boa noite,
    Eu precisava saber se já existe algum plugin que faz o que estou querendo e caso não tenha o que eu precisaria estudar para cria-lo. O plugin consiste em a pessoa digitar um conteúdo em HTML e esse por sua vez ser publicado no status da pessoa em questão. Desde já agradeço sua atenção e o parabenizo pelo artigo!!!

    • Felipe em 13 de junho de 2016 às 19:25
    • Responder

    Amigo, como consigo pegar a imagem do perfil e enviar para o banco?
    Fazendo o upload dela, tem alguma ideia? Com a URL que retorna a imagem não estou conseguindo.

Deixe uma dúvida, resposta ou sugestão

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.