Utilizando el API de facebook en nuestras aplicaciones podemos conseguir varios de este datos siempre que este lo autorize, y en está entrada voy a explicar como se realiza.
Con la pantalla de solicitud de permiso que vemos arriba, facebook le está preguntado al usuario los datos a los que va a acceder la aplicación en caso de que este pulse en Permitir.
Para conseguir estos datos debemos crear una aplicación desde el apartado de desarrollador como explicamos en entradas anteriores y añadirla a nuestra página facebook.
El código que debemos subir a nuestro servidor serán los ficheros facebook.php, base_facebook.php que formar el SDK de PHP, y luego el index.php con nuestro código, que sería el siguiente:
<?php
/*en $appBaseUrl guardamos la url de nuestra página para las redirecciones */
$auth=false;
$appBaseUrl = "URL DE NUESTRA PÁGINA!!!";
/*Llamada al fichero facebook.php*/
require 'facebook.php';
/*Introducimos datos de nuestra aplicación anteriormente creada en la parte de desarrollador*/
$app_id = "*************";
$app_secret = "*********************************";
/*y creamos nuestro objeto facebook*/
$facebook = new Facebook(array(
'appId' => $app_id,
'secret' => $app_secret,
'cookie' => true
));
/*obtenemos el user_id de la SIGNED_REQUEST*/
$signed_request = $facebook->getSignedRequest();
$userid = $signed_request["user_id"]["locale"];
/* se realizan 4 comprobaciones previas*/
/* 1) si el usuario se ha auntetificado*/
if (isset($_GET['code'])){
$auth=true;
header("Location: " . $appBaseUrl);
exit;
}
/* 2) que el usuario haga click en no permitir la aplicacion*/
$errorNoPermitir = $HTTP_GET_VARS["error_reason"];
if ($errorNoPermitir=='user_denied'){
header("Location: " . $appBaseUrl);
exit;
}
foreach($_POST as $nombre_campo => $valor)
{
/* 3) El usuario ha hecho click en el enlace de la página a nuestra aplicación*/
if ($nombre_campo=='flag' and $valor== '1' ){
$aux = true;
}
}
/* 4)El usuario haya hecho click pero no haya sido autenticado*/
if ($aux and !$userid){
/*procedemos al proceso de autenticación */
$user = $facebook->getUser();
if ($user) {
try {
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
/* la url de Login o Logout dependerá de si el usuario está autenticado o no en nuestra aplicación */
if ($user) {
$logoutUrl = $facebook->getLogoutUrl();
} else {
$loginUrl = $facebook->getLoginUrl( array(
/* aquí obtenemos los permisos del usuario, por defecto se obtienen unos básicos, pero con...*/
/* ...scope pedimos más*/
'scope' => 'email,publish_stream,user_birthday,user_location,user_work_history,user_about_me,user_hometown'
));
}
if (!$user) {
echo "<script type='text/javascript'>top.location.href = '$loginUrl';</script>";
exit;
}
}
?>
<!-- PARTE DE INTERFAZ DE LA APLICACIÓN -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>datos facebook</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body >
<div id="container" >
<?php
/*si el usuario ha sido autenticado sacamos los datos obtenidos*/ if ($userid){
$objetoUser = $facebook->api('/me');
foreach($objetoUser as $key=>$value){
echo '<strong>' . $key . '</strong> => ' . $value . '<br />';
}
?>
<?php
}else{
/*parte inicial de la aplicación, que llama a la parte de login del código */
echo '<form action="" method="post" name="formulario">';
echo '<input type="hidden" name="flag" value="1" />';
echo '<a href="#" onclick="javascript:document.formulario.submit();return false;">PARTICIPA EN NUESTRA APLICACIÓN</a>';
echo '</form>';
}
?>
</div>
</body>
</html>
/*en $appBaseUrl guardamos la url de nuestra página para las redirecciones */
$auth=false;
$appBaseUrl = "URL DE NUESTRA PÁGINA!!!";
/*Llamada al fichero facebook.php*/
require 'facebook.php';
/*Introducimos datos de nuestra aplicación anteriormente creada en la parte de desarrollador*/
$app_id = "*************";
$app_secret = "*********************************";
/*y creamos nuestro objeto facebook*/
$facebook = new Facebook(array(
'appId' => $app_id,
'secret' => $app_secret,
'cookie' => true
));
/*obtenemos el user_id de la SIGNED_REQUEST*/
$signed_request = $facebook->getSignedRequest();
$userid = $signed_request["user_id"]["locale"];
/* se realizan 4 comprobaciones previas*/
/* 1) si el usuario se ha auntetificado*/
if (isset($_GET['code'])){
$auth=true;
header("Location: " . $appBaseUrl);
exit;
}
/* 2) que el usuario haga click en no permitir la aplicacion*/
$errorNoPermitir = $HTTP_GET_VARS["error_reason"];
if ($errorNoPermitir=='user_denied'){
header("Location: " . $appBaseUrl);
exit;
}
foreach($_POST as $nombre_campo => $valor)
{
/* 3) El usuario ha hecho click en el enlace de la página a nuestra aplicación*/
if ($nombre_campo=='flag' and $valor== '1' ){
$aux = true;
}
}
/* 4)El usuario haya hecho click pero no haya sido autenticado*/
if ($aux and !$userid){
/*procedemos al proceso de autenticación */
$user = $facebook->getUser();
if ($user) {
try {
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
/* la url de Login o Logout dependerá de si el usuario está autenticado o no en nuestra aplicación */
if ($user) {
$logoutUrl = $facebook->getLogoutUrl();
} else {
$loginUrl = $facebook->getLoginUrl( array(
/* aquí obtenemos los permisos del usuario, por defecto se obtienen unos básicos, pero con...*/
/* ...scope pedimos más*/
'scope' => 'email,publish_stream,user_birthday,user_location,user_work_history,user_about_me,user_hometown'
));
}
if (!$user) {
echo "<script type='text/javascript'>top.location.href = '$loginUrl';</script>";
exit;
}
}
?>
<!-- PARTE DE INTERFAZ DE LA APLICACIÓN -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>datos facebook</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body >
<div id="container" >
<?php
/*si el usuario ha sido autenticado sacamos los datos obtenidos*/ if ($userid){
$objetoUser = $facebook->api('/me');
foreach($objetoUser as $key=>$value){
echo '<strong>' . $key . '</strong> => ' . $value . '<br />';
}
?>
<?php
}else{
/*parte inicial de la aplicación, que llama a la parte de login del código */
echo '<form action="" method="post" name="formulario">';
echo '<input type="hidden" name="flag" value="1" />';
echo '<a href="#" onclick="javascript:document.formulario.submit();return false;">PARTICIPA EN NUESTRA APLICACIÓN</a>';
echo '</form>';
}
?>
</div>
</body>
</html>
La aplicación es muy básica, consiste en una pantalla inicial con un formulario y un enlace que al pulsarlo, redirecciona a nuestro mismo index.php. Realiza una serie de comprobaciones de si el usuario está autenticado y de sí ha recibido el flag del formulario inicial que inicia el proceso de autentificación.
En caso de que el usuario no esté logueado en nuestra aplicación se le solicita al usuario permiso para obtener unos parámetros básicos, pero se pueden requerir más con scope => como en este caso, y se muestran por pantalla a partir un objeto usuario con todos los datos solicitados ($objetoUser = $facebook->api('/me');).
Como en el resto de entradas del blog, podéis comentar cualquier duda.

tengo un contacto que esta subiendo informacion falsa.. quiero saber sus datos...
ResponderEliminarel usuario en facebook es canguro azul...
me pueden ayudar a solucioner esto?
saludos
Buenas, puedes obtener obtener datos como nombre, apellidos, amigos, fotos...etc siempre y cuando el usuario te de permisos de tu aplicación.De todas formas es muy probable que si es una cuenta para "fastidiar" estos datos los tenga falsos.
ResponderEliminarEstoy empezando con esto de php + facebook y esta siendo un infierno para mi. Este blog es tremendo pero a mi no me salen las cosas, puedo php pero jamas trabaje con facebook y es una pesadilla porque necesito que haga esto exactamente pero la pagina completa debe tener la sesion del usuario osea para contratar productos de la tienda debe loguearse con facebook y por ende mantener la sesion abierta en todo el sito, por ejemplo, index, contacto,planes, todo el sitio manejado por la sesion de facebook y si esta logueado mostrar ciertas paginas, esto lo logro con una sesion normal pero ni idea de como es con facebook. Crees que con este ejemplo puedo manejar todo el sitio? gracias por la info no tienes idea cuanto busco y casi no hay nada sobre esto po lo menos en español, veo que eres un experto asi que cualquier ayuda aunque sea pequeña me servira.
ResponderEliminarTe dejo mi twitter https://twitter.com/Eri_Pineda
Una idea que se me ocurre, es que una vez que valides al usuario usando Facebook, crees una variable de sesión donde almacenes esa info. La existencia o no de esa variable es la que te va a decir si el usuario ingreso exitosamente... y puedes reutilizar la información a lo largo de tu site sin problemas. Para desconectar al usuario simplemente destruyes la variable
EliminarHola animerika,
ResponderEliminarCon este ejemplo lo que puedes hacer es obtener datos de el usuario, como el nombre, ciudad...etc.
Yo creo que para la configuración de la tienda deberías hacer una de estas dos cosas:
1) Buscar una aplicación prefabricada de facebook y añadirla a tu página.
2) Añadir tu tienda electrónica directamente, no olvidemos que el código va embebido en un frame, y ese código es nuestro.
de donde saco los primeros archivos? facebook.php y base_facebook.php? donde en mi servidor los pongo?
ResponderEliminarMUY BUENA LA EXPLICACION... FELICIDADES!!
ResponderEliminarUna vez que obtengo los permisos... como recupero la informacion que me dio el usuario?
Hola una pregunta y a donde van los datos obtenidos?
ResponderEliminarAhora la red Social Facebook te pide una Url segura como https lo cual complica interactucar con este sitio ya que son muy costosos.Alguien tiene una solución?
ResponderEliminar