Crear usuarios de prueba en Facebook con CodeIgniter

Si el otro día hablaba sobre la posibilidad que ofrece Facebook de crear usuarios de prueba para tus aplicaciones, ahora voy a pasar un pequeño script para CodeIgniter que permite crear esos usuarios.

El script necesita de la librería curl para PHP para facilitar la tarea:

$app_id = 'xxxxxx';
$canvas_page = 'http://apps.facebook.com/xxxx/';
$client_secret = 'xxx';
$app_token = 'access_token_de_la_aplicacion';
$this->load->library('curl');
// Creo 100 usuarios
for ($i=0; $i<100; $i++) {
  $usuario = $this->curl->simple_post('https://graph.facebook.com/'.$app_id.'/accounts/test-users?installed=true&permissions=read_stream', array('access_token' => $app_token));
}
// Los recupero
$usuarios = $this->curl->simple_get('https://graph.facebook.com/'.$app_id.'/accounts/test-users?installed=true&permissions=read_stream&access_token='.$app_token);
$usuarios = json_decode($usuarios);
foreach($usuarios->data as $i=>$u) {
  // Hago que el primer usuario (que sera el que use) sea amigo de todos
  if ($i==0) {
    $ppal = $u;
  } else {
    // Hago un dump para saber si se ha creado bien la amistad
    var_dump($this->curl->simple_post('https://graph.facebook.com/'.$ppal->id.'/friends/'.$u->id, array('access_token' => $ppal->access_token)));
    var_dump($this->curl->simple_post('https://graph.facebook.com/'.$u->id.'/friends/'.$ppal->id, array('access_token' => $u->access_token)));
  }
}

Enviar mailings con poMMo mediante CURL

poMMo es una de las mejores herramientas para envío de newsletters o mailing, el problema es que la última versión es del 2008 y no tienen ni API ni nada parecido, pero se puede simular mediante CURL, lo cual nos puede venir muy bien para añadir mailing a nuestras aplicaciones con CodeIgniter o WordPress.


$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookiefile");
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookiefile");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_URL, 'http://servidor.com/pommo/index.php');
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); 
$post = 'referer='.urlencode('/pommo/admin/admin.php').'&username=admin&password=password&submit=Log In';
curl_setopt ($ch, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($ch); 

curl_setopt($ch, CURLOPT_URL, 'http://servidor.com/pommo/admin/mailings/mailing/setup.php');
$post = 'subject=Asunto&mailgroup=all&fromname=Yo&fromemail=mi%40email.com&frombounce=mi%40email.com&list_charset=UTF-8&submit=Continue';
curl_setopt ($ch, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($ch); 

curl_setopt($ch, CURLOPT_URL, 'http://servidor.com/pommo/admin/mailings/mailing/ajax.rpc.php?call=savebody');
$post = 'body='.urlencode('Hola a todos').'&altbody=';
curl_setopt ($ch, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($ch); 

curl_setopt($ch, CURLOPT_URL, 'http://servidor.com/pommo/admin/mailings/mailing/preview.php');
$post = 'sendaway=true';
curl_setopt ($ch, CURLOPT_POSTFIELDS, $post);

$result = curl_exec($ch); 

Paypal NVP API con Codeigniter

Las tiendas online son uno de los productos más usados en desarrollo web, pero suele ser lo que más dolores de cabeza da debido al pago por tarjeta de crédito. Afortunadamente, Paypal ofrece la posibilidad de pagar mediante tarjeta de crédito. Para ello, Paypal dispone de una API NVP muy cómoda de usar.

Para los usuarios de Codeigniter existe una librería que nos facilita toda la tarea. En el controlador primero debemos indicar el SetExpressCheckout que prepara la transacción. Cuando aceptemos el OK de la llamada se redireccionará a Paypal para que el usuario pueda realizar la compra, que devolverá la llamada a una URL nuestra y en ese caso, cogiendo los datos devueltos por Paypal podremos confirmar la transacción:

define('PAYPAL_URL', 'https://www.sandbox.paypal.com/webscr&cmd=_express-checkout&token=');

class Demo extends Controller {

    function Demo()
    {
        parent::Controller();
    }

    function index() {
    $this->paypal_api_lib->add_nvp('RETURNURL', 'http://servidor/demo/ok');
    $this->paypal_api_lib->add_nvp('CANCELURL', 'http://servidor/demo/cancel');
    $this->paypal_api_lib->add_nvp('NOSHIPPING', '0');
    $this->paypal_api_lib->add_nvp('ALLOWNOTE', '1');
    $this->paypal_api_lib->add_nvp('SOLUTIONTYPE', 'Sole'); // esto es lo que no obliga a que se tenga que tener cuenta Paypal
    $this->paypal_api_lib->add_nvp('LANDINGPAGE', 'Billing');
    $this->paypal_api_lib->add_nvp('AMT', '69.00');
    $this->paypal_api_lib->add_nvp('NOSHIPPING', '2');
    $this->paypal_api_lib->add_nvp('HDRIMG', 'http://servidor/logo.gif');
    $this->paypal_api_lib->add_nvp('CURRENCYCODE', 'EUR');
    $this->paypal_api_lib->add_nvp('L_NAME0', 'Librito');
    $this->paypal_api_lib->add_nvp('L_AMT0', '59.00');
    
    $this->load->library('session');
    $sesion = array('paypalAmount'=>'69.00');
    $this->session->set_userdata($sesion);

    if($this->paypal_api_lib->send_api_call('SetExpressCheckout')){
      if (strtoupper($this->paypal_api_lib->nvp_data["ACK"]) =="SUCCESS") {
                    $token = urldecode($this->paypal_api_lib->nvp_data["TOKEN"]);
                    $payPalURL = PAYPAL_URL.$token;
                    header("Location: ".$payPalURL);
          exit();
      }
    }
    paypal_errors(); 
  }
    
  function ok() {
    $this->load->library('session');

    $this->paypal_api_lib->add_nvp('TOKEN', $_REQUEST['token']);
    $this->paypal_api_lib->add_nvp('PAYERID', $_REQUEST['PayerID']);
    $this->paypal_api_lib->add_nvp('PAYMENTACTION', 'Sale');
    $this->paypal_api_lib->add_nvp('AMT', $this->session->userdata('paypalAmount'));
    $this->paypal_api_lib->add_nvp('CURRENCYCODE', 'EUR');
    $this->paypal_api_lib->add_nvp('IPADDRESS', $_SERVER['SERVER_NAME']);

    if($this->paypal_api_lib->send_api_call('DoExpressCheckoutPayment')) {
      var_dump($this->paypal_api_lib->nvp_data);
    } else {
      paypal_errors();
    }
  }

}

CI PayPal NVP Library

Librería oEmbed para CodeIgniter

Si el otro día hablaba de oEmbed, hoy voy a hablar de una librería para CodeIgniter que nos puede ser útil para aquellos que desarrollamos usando este framework.

Por ahora detecta los siguientes servicios:

  • YouTube
  • Viddler
  • Qik
  • Revision3
  • Vimeo
  • Hulu

Se echa en falta alguno como Flickr, pero es un principio y nosotros mismos podemos ampliar la librería. Tampoco estaría mal que no fuera necesario indicar el servicio, sino únicamente la URL.

OEmbed-Library

Vía / @xoan

Crear un carrito de la compra con CodeIgniter

Sigo en mi evangelización de CodeIgniter, y en este caso se trata de un mini tutoria que explica cómo crear un carrito de la compra usando la librería Shopping Chart Class que ofrece CodeIgniter. Quizás sea mejor utilizar aplicaciones específicas para crear tiendas, pero en algunos casos no nos queda otra que implementarlo nosotros mismos.

Building a Shopping Cart using CodeIgniter’s Shopping Cart Class

Vía / PHPDeveloper.org

Hacks para CodeIgniter

Ya he mencionado anteriormente que CodeIgniter me parece el mejor framework PHP que hay, por lo que considero que los hacks a los que hace referencia el artículo de Nettuts nos pueden venir muy bien a quienes usamos CI:

  • Autoload de modelos
  • Prevenir colisión de nombres de controladores y modelos
  • Validación de formularios con valores únicos
  • Ejecutar CI desde la línea de comandos
  • Usar CI para múltiples sitios
  • Permitir cualquier tipo de ficheros a la hora de subir ficheros

6 CodeIgniter Hacks for the Masters

Usar SQLite desde CodeIgniter

SQLite es una posibilidad a tener en cuenta cuando no es posible realizar aplicaciones web que accedan a una BD (MySQL, Oracle, …), ya que no existe servidor de BD sino un conjunto de rutinas y los datos se guardan en un fichero en el servidor.
Para aquellos que programen con CodeIgniter les podrá venir muy bien esta explicación para integrar CI y SQLite.
CodeIgniter PDO SQLite3 quick setup

Crear aplicaciones Facebook con CodeIgniter

No me apasiona especialmente realizar aplicaciones para Facebook, pero cuando no te queda otra, es mejor no complicarse la existencia y usar un buen framework como CodeIgniter (claro, que algunas aplicaciones si se realizan sin más tampoco pasa nada).

Para aquellos que quieran realizar aplicaciones en Facebook usando CodeIgniter le puede venir bien estas dos guías y dos librerías. Tanto las guías hablan de lo mismo, y las librerías son para Facebook-Connect (pero en una de ellas la explican paso a paso).

De forma resumida podríamos decir que para integrar Facebook en CodeIgniter debemos usar la librería facebook.php como un plugin de CI.