Category: Programación

Crear un Facebook News Feed para página web

Facebook News Feed es una herramienta gratuita que he desarrollado para poder mostrar noticias de cualquier página de Facebook mediante Iframe.

Este es un «Paso a paso» para los que quieran aventurarse a investigar cómo funciona la API de facebook.

Para empezar hay que tener una cuenta en Facebook (lo más seguro es que ya tengas tu cuenta personal).

Si ya la tienes es hora de empezar creando una APP.

La APP servirá para conectar con los servicios que ofrece la API de Facebook. Yo la he llamado Page Feeder para darle un nombre algo diferente. En prinpcio se llamaría Facebook Page Feeder pero por normas de Facbeook, la APP no puedes utilizar la palabra «Face» dentro del nombre.

Rellenamos todos los datos y continuamos con la documentación:

desarrolladores-de-facebook

Configuración

Ahora toca configurar la APP. Los puntos más importantes son:

  1. Seleccionar»Producto»: Inicio de Sesión con Facebook
  2. Entrar en Configuración -> Básica: configurar el sitio donde haremos las pruebas
  3. Obtener el ID de la aplicación y la Clave Secreta

1. Seleccionamos Producto Inicio de Sesión

Yo he dejado todo deshabilitado porque no lo necesitamos, pero es obligatorio tener aunque sea uno de los productos que nos muestran para configurar la APP.

2. Configurar el sitio donde haremos las pruebas

Añadimos el sitio donde haremos las pruebas. Si estamos haciendo las pruebas utilizando un WAMP o cualquier plataforma desde nuestro ordeandor en «Local» necesitaremos dar permisos para que facebook pueda comunicarse. Rellenamos con la palabra «localhost» en el campo «Dominios de la aplicación».

Creamos la «Plataforma» con la que vamos a trabajar. En nuestro caso un «Sitio web» y en el campo habilitado añadimos el dominio para que nos valide las conexiones.

Ejemplo en «REAL / PRODUCCIÓN»

 

Ejemplo en LOCAL / DESARROLLO

3. Identificador de la aplicación y Clave secreta de la aplicación

Anotamos «Identificador de la aplicación» y «Clave secreta de la aplicación» para utilizarlas en nuestros archivos de prueba.

Testing

Para hacer las pruebas pertinentes en nuestra app de Facebook News Feed he instalado la api de facebook en mi propio espacio web.

Descarga disponible desde SDK para PHP FACEBOOK

El SDK de Facebook para PHP es una biblioteca con funciones eficaces que le permiten a los desarrolladores de PHP integrar fácilmente el inicio de sesión con Facebook y realizar solicitudes a la API Graph. También es compatible con el SDK de Facebook para JavaScript y permite ofrecerle al usuario de administración la mejor experiencia posible. Además, el SDK de Facebook para PHP facilita la subida de fotos y videos, y el envío de solicitudes por lotes a la API Graph, entre otras cosas. Además, el SDK para PHP cuenta con muchos puntos de extensibilidad para que los desarrolladores de PHP tengan el control total de cómo interactúa con entornos de alojamiento y marcos web específicos.

Una vez instalado el SDK y haber revisado la documentación, crearemos los archivos de prueba para crear el FEED.

Os dejo aquí el enlace para poder descargarlo todo: Facebook News Feed – PHP

Login

Lo primero que vamos a hacer es utilizar el Login de Facebook para poder obtener los permisos. Lo guardamos en un archivo llamado loign-fb.php:

// Cargar la configuración de la aplicación
$fb = new Facebook\Facebook([
'app_id' => 'ID-APLICACIÓN', // Sustituir con el Identificador de la aplicación
'app_secret' => 'CLAVE-SECRETA-APLICACIÓN' // Sustituir con la Clave secreta de la aplicación
]);

// Función que nos permitirá obtener el token de acceso para solicitar permisos a nuestra cuenta
$helper = $fb->getRedirectLoginHelper();

// Permisos que deseamos obtener
$permissions = ['manage_pages','user_location','user_posts']; // optional

// Crea la URL para la autenticación con Facebook
$loginUrl = $helper->getLoginUrl('http://url-local/fb-callback.php', $permissions); // Sustituir "url-local" con la url donde harás las pruebas

// Botón de Login
echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>';

Callback

Una vez creado el interfaz para hacer el Login de Facebook y hayamos obtenido los permisos necesarios, crearemos la llamada a la aplicación mediante el archivo que llamaremos fb-callback.php:

// Cargar la configuración de la aplicación
$fb = new Facebook\Facebook([
'app_id' => 'ID-APLICACIÓN', // Sustituir con el Identificador de la aplicación
'app_secret' => 'CLAVE-SECRETA-APLICACIÓN' // Sustituir con la Clave secreta de la aplicación
]);

// Obtener un token de acceso del redireccionamiento
$helper = $fb->getRedirectLoginHelper(); 

try {
$accessToken = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
// When Graph returns an error
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
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());

// The OAuth 2.0 client handler helps us manage access tokens
$oAuth2Client = $fb->getOAuth2Client();

// Get the access token metadata from /debug_token
$tokenMetadata = $oAuth2Client->debugToken($accessToken);
echo '<h3>Metadata</h3>';
var_dump($tokenMetadata);
$accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);

/*
Cuando un usuario inicia sesión en tu aplicación por primera vez, el token de acceso de la
aplicación recibe un token de acceso de corta duración con una vigencia de dos horas aproximadamente.
Una buena idea es cambiar este token por uno de larga duración, que estará activo alrededor de 60 días.
*/
echo '<h3>Long-lived</h3>';
var_dump($accessToken->getValue());

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

// User is logged in with a long-lived access token.
// You can redirect them to a members-only page.
header('Location: http://url-local/login-ok.php');
exit();

Login OK

Ya hemos obtenido los datos necesarios para poder aplicarlo a nuestra herramienta. El último paso es el de mostrar los datos en pantalla que mostraemos en un archivo llamado login-ok.php:

// Cargar la configuración de la aplicación
$fb = new Facebook\Facebook([
'app_id' => 'ID-APLICACIÓN', // Sustituir con el Identificador de la aplicación
'app_secret' => 'CLAVE-SECRETA-APLICACIÓN' // Sustituir con la Clave secreta de la aplicación
]);

/* SUSTITUIR en esta función $_SESSION['fb_access_token'] POR LA CLAVE DE LARGA DURACIÓN(Long-lived TOKEN) QUE SE MOSTRARÁ POR PANTALLA*/
$fb->setDefaultAccessToken($_SESSION['fb_access_token']);

/*
En este ejemplo, enviaremos una solicitud GET al extremo de la API Graph /me.
El extremo /me es un alias especial para el extremo de nodo de usuario que hace referencia al usuario o a la página que realiza la solicitud.
*/
if(empty($_GET['facebook-id'])) $_GET['facebook-id'] = 'me'; // Sustituir via parametro con el id de la página de facebook del cual queremos obtener los posts
if(empty($_GET['num-posts'])) $_GET['num-posts'] = 4; // Limitamos el número de posts utilizando el parámetro num-posts

 

try {
/*
Para que la respuesta que se obtiene tenga la forma de una sofisticada colección, llamamos a getGraphUser().
Este método devuelve una entidad Facebook\GraphNodes\GraphUser que representa un nodo de usuario.
*/
$response = $fb->get('/'.$_GET['facebook-id'].'?fields=id,name,link,picture,location,posts{full_picture,created_time,message,permalink_url}');
$page = $response->getDecodedBody();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
// When Graph returns an error
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}

function getFacebookFeed($page){
$numPosts = 0;
echo '<div id="facebook-page-feeder">';
foreach($page['posts']['data'] as $post){
echo '<div class="page-feed">';
echo '<div class="pf-message">
<p>'.(!empty($post['message']) ? $post['message'] : 'Nuevo post de '.$page['name']).'</p>
<p>'.date('d/m/Y H:i:s',strtotime($post['created_time'])).' - <a href="'.$post['permalink_url'].'" target="_blank">Ver en Facebook</a></p>
</div>';
echo '<div class="pf-picture"><img src="'.$post['full_picture'].'" /></div>';
echo '</div>';
$numPosts++;
if($numPosts == $_GET['num-posts']) break;
}
echo '</div>';
}

echo '<h3>Long-lived Access Token</h3>';
var_dump($_SESSION['fb_access_token']);

<h1><a href="<?php echo $page['link'] ?>" target="_blank"><img src="<?php echo $page['picture']['data']['url'] ?>" />Visitar <?php echo $page['name'] ?> en Facebook</a></h1>

<?php getFacebookFeed($page); ?>

Buscar registros duplicados con MySQL

A veces nos encontramos con el caso de que por error de programación duplicamos sin querer registros en nuestra base de datos.

Vamos a utilizar esta consulta SQL para poder buscar los duplicados de una tabla utilizando un COUNT para hacer el conteo de registros duplicados.

SELECT id_registro, COUNT(*) Total
FROM registros
GROUP BY id_registro
HAVING COUNT(*) > 1

Para hacerlo un poco más complejo, vamos a buscar los valores duplicados dentro de una tabla cuyo problema sería el siguiente:

El problema ha sido con una talla de camiseta en el que se nos ha añadido 3 veces. Al crear el registro se ha creado de forma incorrecta vía PHP.

Desde otra tabla se recuperó 3 valores distintos al hacer una consulta con un where «%L%» y esto fue lo que nos creo los registros duplicados.

Entonces vamos a hacer lo mismo pero en la tabla donde se han añadido los registros viendo cuales han sido los que se han duplicado:

SELECT id_registro, COUNT(*) Total
FROM camisetas
WHERE talla LIKE ‘%L%’
GROUP BY id_registro
HAVING COUNT(*) > 1

Esto nos devolvería que personas han seleccionado la talla de camiseta L pero además nos devolverá a los que se les ha añadido la XL y la XXL duplicando así sus valores.

Este fue un problema real y por lo tanto ha servido de mucha ayuda para poder solventar de forma manual este problema.

id_registro Total
00001 3
00002 2

TPV Redsys – Realizar Pruebas de Pago

Estos pasos son para hacer pruebas una vez hayas elegido la forma de implementar el tpv de Redsys

Si aún no lo has hecho, pásate por este apartado y elige la forma de implementarlo en tu web.

A la hora de instalar una herramienta para conectar el TPV de Redsys y realizar pagos ONLINE hace falta hacer las pruebas pertinentes.

¿Cómo se hacen las pruebas?

  1. Para empezar debes tener ya configurado tu TPV correctamente utilizando las clases que necesites o quieras implementar y estar en entorno de pruebas (DESARROLLO).
  2. A la hora de realizar el salto al TPV es necesario ver que los datos que enviamos son correctos. Para ello lo que hacemos es meter los parametros en un texto y antes de realizar el salto, mostramos en pantalla los parametros y colocamos un botón para hacer el salto manualmente. Con esto podremos controlar los posibles errores de conexión.pago-por-tpv-seguro
  3. Cuando hemos logrado que todo funcione el banco te pedirá que realices estas dos pruebas

Realizar al menos una operación Autorizada. Utilice esta tarjeta de prueba:

  • Número de tarjeta: 4548812049400004
  • Caducidad: 12/20
  • Código CVV2: 123
  • Código CIP: 123456

 

Realizar al menos una operación Denegada. Utilice esta tarjeta de prueba:

  • Número de tarjeta: 1111111111111117
  • Caducidad: 12/20

Una vez realizadas las pruebas, es importante saber que debes la petición al banco para pasar al entorno REAL (PRODUCCIÓN).

Una vez en entorno REAL estos datos no funcionan, por lo tanto tendrás que hacer pruebas con una tarjeta real. Por lo tanto, es importante que hagas las pruebas con importes pequeños, en centimos si es posible, para que puedas hacer todas las pruebas que hagan falta hasta tener todo configurado correctametne.

Integrar la pasarela de pago (TPV Virtual) Redsys

Puedes hacer tu propia clase para integrar el TPV Virtual utilizando la documentación necesaria (Es la opción por la que yo he optado para conocer mejor el funcionamiento del TPV):

DESCARGAR DOCUMENTACIÓN 

Pero también tienes la opción de instalar de forma gratuita  los módulos (ejecutables) para integrar la pasarela de pago (TPV Virtual) Redsys en tiendas web virtuales que hayan sido desarrolladas bajo WooCommerce, Prestashop, Magento, OsCommerce, OpenCart, VirtueMart o ZenCart. También, las librerías (APIs) de ayuda a la integración.

LIBRERÍAS DE AYUDA (APIs)
INTEGRACIÓN POR REDIRECCIÓN API JAVA Versión 1.3 (NOTA: Incluye webservice)
API NET (NOTA: Incluye webservice)
API PHP
INTEGRACIÓN WEBSERVICE API PHP Webservice