Detectar si un usuario ha hecho Like en Facebook

En este artículo explicamos como detectar con PHP si un usuario ha hecho «Like» o «Me Gusta» en una página en Facebook, esto sirve para mostrar información diferente a los visitantes si es que son seguidores de nuestra página en Facebook.

Cada vez que uno carga un «Page Tab» este carga el contenido de nuestra página en un iframe y para mantener la comunicación Facebook le pasa el parámetro signed_request, veamos que contiene utilizando código PHP:

  1. print_r($_REQUEST["signed_request"]);

El cual devuelve el siguiente resultado:

  1. iP42q6CeqojKjTV8XSWFcbaShHFtqqreb93rPz2Byew.eyJhbGdvcml0aG0iOiJITUFDLVNI
  2. QTI1NiIsImlzc3VlZF9hdCI6MTM5OTM1MjE0OSwicGFnZSI6eyJpZCI6IjU3MjY5NzYyNDYw
  3. IiwibGlrZWQiOnRydWUsImFkbWluIjp0cnVlfSwidXNlciI6eyJjb3VudHJ5IjoicGUiLCJs
  4. b2NhbGUiOiJlbl9VUyIsImFnZSI6eyJtaW4iOjIxfX19

Como podemos el resultado está codificado y no se puede entender a simple vista. Pero gracias a las multiples contribuciones de los desarrolladores en internet, tenemos la función parse_signed_request que sirve para decodificar esta información.

  1. function parse_signed_request($request) {
  2.     list($sig, $pay) = explode('.', $request, 2);
  3.     $data = json_decode(base64_decode(strtr($pay, '-_', '+/')), true);
  4.     return $data;
  5. }

Utilizando esta función para decodificar la información que viene de Facebook:

  1. $fbdata = parse_signed_request($_REQUEST["signed_request"]);
  2. print_r($fbdata);

Este código devuelve el siguiente resultado:

  1. Array
  2. (
  3.     [algorithm] => HMAC-SHA256
  4.     [issued_at] => 1399352590
  5.     [page] => Array
  6.         (
  7.             [id] => 57269762460
  8.             [liked] => 1
  9.             [admin] => 1
  10.         )
  11.     [user] => Array
  12.         (
  13.             [country] => pe
  14.             [locale] => en_US
  15.             [age] => Array
  16.                 (
  17.                     [min] => 21
  18.                 )
  19.         )
  20. )

Ahora si podemos identificar que el resultado devuelto es un array el cual contiene un parámetro llamado liked que contiene el valor de «1» cuando se ha dado like a la página o vacío cuando no se ha dado like a la página.

Finalmente en base a toda la información podemos detectar si un usuario le ha dato like a una página:

  1. function parse_signed_request($request) {
  2.     list($sig, $pay) = explode('.', $request, 2);
  3.     $data = json_decode(base64_decode(strtr($pay, '-_', '+/')), true);
  4.     return $data;
  5. }
  6.  
  7. $fbdata = parse_signed_request($_REQUEST["signed_request"]);
  8.  
  9. if ($fbdata["page"]["liked"] == 1) {
  10.     echo "LIKED";
  11. } else {
  12.     echo "NO LIKED"; 
  13. }

Para los usuarios que necesitan todo terminado les dejo el archivo con el ejemplo básico para descarga.

[download id=»61″ format=»2″]

Comentarios Total 3 comentarios


Angel Cabrera
Publicado: 07/05/2014 9:03 pm

Gracias por el aporte, que bien que ya hay temas nuevos, tu blog me ha servido como una guia respecto de muchos temas. Saludos!

Angel luis
Publicado: 21/05/2014 10:56 pm

Hola he comprobado el script y no funciona si pudierais ilustrarlo mas completo en conjunto con el código html php o un ejemplo de funcionamiento con vuestra propio blog.
Saludos gracias

Cristopher Inostroza- paginas web
Publicado: 13/09/2014 1:31 pm

Muy buena la información , gracias por el aporte.

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)