Crear un sistema de pago con tweets o publicaciones en Facebook

Es hora de hacer una aplicación real con lo aprendido en anteriores tutoriales, en este caso lo que haremos será una aplicación para loguear al usuario en nuestra web (no una aplicación dentro de Facebook) con el objetivo de que se le publique en el muro lo que queramos a cambio de poder descargar por ejemplo un libro o un tutorial, por decirlo de una mejor forma cambiar una descarga por un tweet o una publicación en Facebook. Es algo sencillo de hacer y bastante útil para hacer conocer tu sitio o producto en redes sociales.

Primero debes editar tu aplicación en el área de desarrolladores, buscas donde diga Selecciona como tu aplicación se intrega con Facebook y en Sitio web escribes la URL del sitio. Posteriormente debemos crear un directorio, en mi caso lo he llamado descargas. Este directorio debe estar protegido para que nadie con solo obtener la URL del archivo pueda descargarlo directamente, posteriormente usando PHP se llama al archivo para que pueda ser descargado solo por usuarios que hagan el «pago». En la carpeta mencionada anteriormente creamos un archivo .htaccess que debe tener lo siguiente:

AuthUserFile  /home/miweb/descargas/.htpasswd
AuthName "Que coño intentas hacer?"
AuthType Basic

Options All
<Limit GET POST PUT>
require valid-user
</Limit>

En AuthUserFile debe ir la ruta absoluta del directorio, el archivo .htpasswd es el encargado de guardar el usuario y el password encriptado del mismo; para crearlo usamos la utilidad htpasswd que viene integrada con Apache:

htpasswd -c .htpasswd usuario

Luego creamos un archivo PHP que será el encargado de loguear al usuario con la aplicación, pedir permisos de publicación, publicar en el muro, permitir la descarga del archivo:

<?php
require ("includes/facebook.php");
$appID = "00000000000000";
$secret = "00000000000000000000000000";
$facebook = new Facebook(array(
'appId' => $appID,
'secret' => $secret,
));
$user = $facebook->getUser();
if ($user) {
try {
$yo = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
//Saludar al usuario
echo "Hola ".$yo["name"]." cómo estás?";
//Publicación en el muro
$parametros=array('message' => '',
'name' => 'Tutoriales de Facebook - BrianUR.info',
'caption' => 'Estoy leyendo un tutorial sobre el desarrollo de aplicaciones en Facebook. Te lo recomiendo!',
'link' => 'https://www.brianur.info',
'description' => 'Es genial',
'picture' => 'https://brianur.info/brianur.png',
'actions' => array(array('name' => 'Entra ya!',
'link' => 'https://www.brianur.info')));
$facebook->api('/me/feed','post',$parametros);
// ALERTA: ESTE CÓDIGO ES VULNERABLE A LFI Y SÓLO ES USADO COMO EJEMPLO
if (isset($_GET['archivo'])){
$name = $_GET['archivo'];
header("Content-disposition: attachment; filename=$name");
header("Content-type: application/octet-stream");
readfile("descargas/".$name);
}
// FIN ALERTA
echo "<a href=\"index.php?archivo=librito.zip\">Descargar archivo.</a>";
} else {
//Enlace para iniciar sesion en la aplicación
$loginUrl = $facebook->getLoginUrl(array('scope' => 'publish_stream'));
echo "<a href='$loginUrl'>Pagar con una publicación</a>";
}
?>

Eso es todo, el anterior código es sencillo y puedes mejorarlo según tus necesidades. Es estrictamente necesario por seguridad cambiar el código usado para la descarga del archivo ya que es vulnerable a LFI, además es recomendado hacer algún tipo de validaciones necesarias para aumentar la seguridad (por ejemplo el uso de sesiones). Posteriormente agregaré la opción de conectarse con Twitter para hacer lo mismo.

  6 Comentarios

  1. darkpollo   •  

    Hola,
    He creado una plantilla para wordpress que permite intercambiar pagos sociales por enlaces de descarga.

    Es configurable (para que no haga falta editar código) y que funciona con cualquier tema o instalación de wordpress.
    Por supuesto es gratuita.

    Tenéis más información, el enlace de descarga y una demo en mi blog:

    planetahuevo.es/s/socialpay

    Espero que le sirva a la gente.

    Un saludo

    Ángel – darkpollo

  2. MegaBedder   •  

    ¿En este codigo es necesario que lleve 2 array?

    ‘actions’ => array(array(
    ‘name’ => ‘Entra ya!’,
    ‘link’ => ‘https://www.brianur.info’)));

    • MegaBedder   •  

      Y donde se consigue:
      includes/facebook.php

      de

      require («includes/facebook.php»);

  3. Brian Urban   •     Autor

    Hola Joel, no más salga de algo que ando haciendo publico como hacerlo en Twitter, espero que sea lo más pronto posible. Saludos.

  4. Joel   •  

    Hola.. gracias por el post, y tengo una duda que es ¿cómo se debería implementar lo mismo pero para twitter?

  5. JGL   •  

    Me ha gustado la aplicación 😉 , es decir, me gusta la idea de cambiar una descarca por una publicación de facebook.

Deja una respuesta

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