API Facebook en PHP

Login con Facebook en PHP

Las APIs de las redes sociales son cada vez más utilizadas en los sitios webs, es por ese motivo que en este tutorial aprenderemos a realizar un login con Facebook en PHP utilizando el SDK oficial.

Antes de comenzar a programar en PHP es necesario tener creada una aplicación en Facebook, esto lo podemos hacer desde el sitio https://developers.facebook.com. Luego de crear la aplicación web se proporcionará un APP ID, API Version y un App Secret que utilizaremos luego.

¿Cómo hacer un login con Facebook en PHP?

Primero debemos descargar el SDK de Facebook para PHP desde https://github.com/facebook/facebook-php-sdk-v4/archive/5.0.0.zip, el cual utilizaremos en este tutorial.

Luego de descomprimirlo y ubicarlo en nuestro directorio podemos empezar a programar nuestro login con Facebook en PHP.
Para esto vamos a crear los archivos login.php y fb-callback.php con sus respectivos códigos, luego debemos remplazar el APP ID, API Version y App Secret por los que aparecen en nuestra aplicación de Facebook. Además de incluir los paths correctos según nuestros directorios.

Creamos un archivo login.php e incluimos:

<?php

/* Iniciando la sesión*/
session_start();

/* Cambiar según la ubicación de tu directorio*/
require_once __DIR__ . '/facebook/src/Facebook/autoload.php';

$fb = new Facebook\Facebook([
  'app_id' => 'Su App ID',
  'app_secret' => 'Su App Secret',
  'default_graph_version' => 'v2.4',
]); 
 
$helper = $fb->getRedirectLoginHelper();
 
$permissions = ['email']; // Permisos opcionales
$loginUrl = $helper->getLoginUrl('http://localhost/webs/ejemplos/facebook/fb-callback.php', $permissions);
 
/* Link a la página de login*/
echo '<a href="' . htmlspecialchars($loginUrl) . '">Login con Facebook!</a>';

?>

Creamos un archivo fb-callback.php e incluimos:

<?php

/* Iniciando la sesión*/
session_start();

/* Cambiar según la ubicación de tu directorio*/
require_once __DIR__ . '/facebook/src/Facebook/autoload.php';

$fb = new Facebook\Facebook([
  'app_id' => 'Su App ID',
  'app_secret' => 'Su App Secret',
  'default_graph_version' => 'v2.4',
]); 
  
$helper = $fb->getRedirectLoginHelper();  
  
try {  
  $accessToken = $helper->getAccessToken();  
} catch(Facebook\Exceptions\FacebookResponseException $e) {  
  // Cuando Graph devuelve un error 
  echo 'Graph returned an error: ' . $e->getMessage();  
  exit;  
} catch(Facebook\Exceptions\FacebookSDKException $e) {  
  // Cuando la validación falla  
  echo 'Facebook SDK returned an error: ' . $e->getMessage();  
  exit;  
}  

if (! isset($accessToken)) {  
  if ($helper->getError()) {  
    header('HTTP/1.0 401 Unauthorized');  
    echo "Error: " . $helper->getError() . "\n";
    echo "Error Code: " . $helper->getErrorCode() . "\n";
    echo "Error Reason: " . $helper->getErrorReason() . "\n";
    echo "Error Description: " . $helper->getErrorDescription() . "\n";
  } else {  
    header('HTTP/1.0 400 Bad Request');  
    echo 'Bad request';  
  }  
  exit;  
}  

// Logged in  
echo '<h3>Access Token</h3>';  
var_dump($accessToken->getValue());  
  
// El controlador de cliente de OAuth 2.0 nos ayuda a gestionar los tokens de acceso 
$oAuth2Client = $fb->getOAuth2Client();  
  
$tokenMetadata = $oAuth2Client->debugToken($accessToken);  
echo '<h3>Metadata</h3>';  
var_dump($tokenMetadata);  
  
// Validación (esto lanzará FacebookSDKException cuando falla )  
// $tokenMetadata->validateAppId($config['app_id']);  
// Si se conoce el ID de usuario de este token de acceso, puede validarlo aquí  
// $tokenMetadata->validateUserId('123');  
$tokenMetadata->validateExpiration();   
   
if (! $accessToken->isLongLived()) {  
  // Cambiando un token de acceso de corta duración por uno de larga vida 
  try {  
    $accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);  
  } catch (Facebook\Exceptions\FacebookSDKException $e) {  
    echo "<p>Error getting long-lived access token: " . $helper->getMessage() . "</p>";  
    exit;  
  } 
  echo '<h3>Long-lived</h3>';  
  var_dump($accessToken->getValue());  
}

$_SESSION['fb_access_token'] = (string) $accessToken;  
  
?>

Luego para probar estos códigos debemos ingresar con nuestro navegador a la página de login.php, ahí debemos hacer click en el enlace para iniciar sesión.

Buenos hemos llegado al final de este tutorial, espero que les sea de gran utilidad. Ante cualquier problema no duden en dejar un comentario.

Compartilo en
Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestEmail this to someone

AboutJosé Di Meglio

Apasionado de la tecnología y programación. Aportando información gratuita sobre el mundo de la informática.

2 comments

  1. Hola, super este tutorial.
    Tengo una consulta, para móviles (Android iOS) debo hacer un webservice de login. Me dicen que el apk para estos dos tecnologías no es lo mismo y diferente a como se hace en web, porfa me ayudarías a saber que debo hacer, cuales son los pasos lógicos a tener en cuenta para desarrollar este servicio en php, estoy utilizando Codeigniter framework.

    Gracias.

    1. Hola Gilbert, programar una aplicación nativa para Android y iOS es completamente diferente (incluyendo los lenguajes que se utilizan), pero en tu caso si solamente tenés que desarrollar un webservice simplmemente podés hacer una API, ya que se puede consumir desde las dos plataformas.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *