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:
- print_r($_REQUEST["signed_request"]);
El cual devuelve el siguiente resultado:
- iP42q6CeqojKjTV8XSWFcbaShHFtqqreb93rPz2Byew.eyJhbGdvcml0aG0iOiJITUFDLVNI
- QTI1NiIsImlzc3VlZF9hdCI6MTM5OTM1MjE0OSwicGFnZSI6eyJpZCI6IjU3MjY5NzYyNDYw
- IiwibGlrZWQiOnRydWUsImFkbWluIjp0cnVlfSwidXNlciI6eyJjb3VudHJ5IjoicGUiLCJs
- 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.
- function parse_signed_request($request) {
- list($sig, $pay) = explode('.', $request, 2);
- $data = json_decode(base64_decode(strtr($pay, '-_', '+/')), true);
- return $data;
- }
Utilizando esta función para decodificar la información que viene de Facebook:
- $fbdata = parse_signed_request($_REQUEST["signed_request"]);
- print_r($fbdata);
Este código devuelve el siguiente resultado:
- Array
- (
- [algorithm] => HMAC-SHA256
- [issued_at] => 1399352590
- [page] => Array
- (
- [id] => 57269762460
- [liked] => 1
- [admin] => 1
- )
- [user] => Array
- (
- [country] => pe
- [locale] => en_US
- [age] => Array
- (
- [min] => 21
- )
- )
- )
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:
- function parse_signed_request($request) {
- list($sig, $pay) = explode('.', $request, 2);
- $data = json_decode(base64_decode(strtr($pay, '-_', '+/')), true);
- return $data;
- }
- $fbdata = parse_signed_request($_REQUEST["signed_request"]);
- if ($fbdata["page"]["liked"] == 1) {
- echo "LIKED";
- } else {
- echo "NO LIKED";
- }
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
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!
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
Publicado: 13/09/2014 1:31 pm
Muy buena la información , gracias por el aporte.