Mi primera ronda de inversión y nuevo milestone con Pago Fácil

Cristian Tala Sánchez

Hace ya casi más de un año que desarrollé una solución, actualmente Pago Fácil, para poder recibir pagos a través de Internet con Transbank y Webpay para poder usarlo de manera privada en nuestros eCommerce. Esta solución aún no tenía nombre, logo, página web, plataforma de administración, etc, pero de igual manera personas, amigos, clientes, y colegas confiaron en ella para también recibir sus pagos en sus eCommerces.

Esta semana cumplimos los 150 clientes activos en el servicio, lo que para una aplicación que en su momento nació para ser una solución personal y no comercial creo que es un logro bastante grande. Hoy en día la solución se está transformando un concentrador de pagos (Recibiremos distintos medios de pago) , empresa de apoyo al emprendimiento,  y cuenta con el respaldo de distintas empresas y personas que he conocido a lo largo del trayecto.

Este es el momento en que quiero compartir un poco más de cual es mi visión sobre Pago Fácil para el futuro cercano, y de que sepas si puedes ser una de las personas involucradas.

Leer más

Fixing Ubuntu USB-C to HDMI DELL DA200

DA 200 UBUNTU XPS WORKING

Has been almost a year that I bought my dell XPS developers edition with the DA200 adapter, which only works with low resolutions due to a published bug. http://en.community.dell.com/support-forums/software-os/f/3525/t/19999974 . Other USB-C  to HDMI adapters / docks also fail with the same.

During all this time there was no solution without compiling and patching the kernel, as described here : https://patchwork.kernel.org/patch/9646451/ .

I was using Ubuntu 16.04.3 LTS with the Kernel 4.10 before the upgrade, with the latest Intel drivers and Gnome Shell enviroment.

On the 3rd of September of 2017, the Linux Kernel 4.13 was released, and included the patch about this particular driver. You can see more information about this here : https://lkml.org/lkml/2017/9/3/155

What we are going to do now, is simple install this version of the kernel in order to fix the issue. By the way, in this moment I am writing with my external monitor connected through my USB-C/HDMI converter.

Leer más

¿ Puede WannaCrypt interceptar los pagos de mi banco ?

WannaCrypt es un cyber attack  que fue viralizado a más de 99 países a través de una vulnerabilidad de windows. En las últimas horas se han hecho virales muchos rumores sobre los efectos de este cyberataque, en especial debido a que ha afectado a bancos en #Chile.  Dentro de estos rumores han salido personas pidiendo que … Leer más

Jugando con el #PHP SDK de Amazon Web Services ( #AWS ) V3 para Simple Queue Service (#SQS)

Amazon SQS Ejemplo PHP SDK V3

Simple introducción a Amazon Simple Queue Service usando Composer, PHP y la versión 3 del SDK de Amazon.  Amazon SQS es un servicio de mensajería para la comunicación entre distintas plataformas y/o dispositivos.

Origen: Basic SDK Usage

Código del Proyecto : Jugando con PHP SDK y SQS

Hace un tiempo que quería empezar a usar SQS para separar la lógica de envío de correos de mi plataforma, en especial desde que tuve problemas en su momento con el servidor SMTP de Mandrill lo que finalizaba en un error para el usuario. En este momento cambie a usar el sistema de mails de Amazon, pero siempre quedé con la intención de separar el procesamiento de emails en caso de tener problemas con esto nuevamente.

Me llamó mucho la atención que los ejemplos de Amazon para el SDK simplemente están basados en S3, por l oque no fue tan sencillo comenzar con SQS como lo hubiera imaginado, casi todos los ejemplos con SQS usaban las librerías antiguas.

Amazon SQS, no solo sirve para poder enviar emails de manera asyncrónica con la aplicación, la verdad es que puedes hacer lo que se te ocurra. Por ahora empezaremos un proyecto desde cero en el cual crearemos mensajes y luego los procesaremos.

Amazon SQS Ejemplo PHP SDK V3
Amazon SQS Ejemplo PHP SDK V3

Inicializando El Proyecto de SQS.

Lo primero que necesitamos es instalar las librerías del SDK, por lo crearemos una nueva carpeta y utilizaremos composer para instalarlas. Si no sabes lo que es composer te recomiendo que vayas a su sitio web para instalarlo : https://getcomposer.org/

composer require aws/aws-sdk-php

 

Con esto crearemos la estructura básica para continuar, en donde las librerías necesarias se descargarán en la nueva carpeta vendor.

Ahora crearemos 3 archivos en la raiz del directorio :

  • sharedConfig.php que tendrá los datos de conexión y valores por defecto.
  • createMessage.php que creará la Queue si es que no existe y agregará un nuevo mensaje.
  • readMessages.php que leerá todos los mensajes que tenemos en el Queue, los procesará y luego los eliminará.

sharedConfig.php

// Usaremos esta información por defecto.
$sharedConfig = [
 'region' => 'us-west-2',
 'version' => 'latest',
 'credentials' => [
 'key' => 'TUKEY',
 'secret' => 'TUSECRET',
 ],
];

$my_queue_name = "MyQueueExample";

La verdad no es recomendable hardcodiar los datos de conexión, pero como ejemplo está perfecto. Recomiendo usar las variables de entorno para los datos de conexión.

Creando Los Mensajes de SQS

El siguiente código crea la instancia del SDK, y desde ella obtenemos el cliente para SQS, creamos el queue y agregamos un mensaje. Si el nombre del Queue existe hace nada. Si bajaste el código desde el repositorio recuerda crear el archivo sharedConfig.php como aparece en la sección anterior.

Es bueno destacar que cualquier llamada del cliente a amazon puede tener un error que debemos capturar en caso de ser necesario.

createMessage.php

require 'vendor/autoload.php';
include_once 'sharedConfig.php';

// Creamos la clase SDK.
$sdk = new Aws\Sdk($sharedConfig);

// Creamos el cliente SQS desde el SDK
$client = $sdk->createSqs();

// Creamos la QUEUE
$queue_options = array(
 'QueueName' => $my_queue_name
);

try {
 $client->createQueue($queue_options);
} catch (Exception $exc) {
 echo $exc->getTraceAsString();
 die('Error creando la queue ' . $exc->getMessage());
}


// Obtenemos la URL de la queue.
$result = $client->getQueueUrl(array('QueueName' => $my_queue_name));
$queue_url = $result->get('QueueUrl');

print_r($queue_url);

// The message we will be sending
$our_message = array(
 'tipo' => 'MAIL',
 'content' => rand(0, 110000010)
);

// Send the message

try {
 $client->sendMessage(array(
 'QueueUrl' => $queue_url,
 'MessageBody' => json_encode($our_message)
 ));
} catch (Exception $ex) {
 die('Error enviando el mensaje a la queue ' . $e->getMessage());
}

 

  1. Se cargan las librerías de composer. En este caso solo tenemos las de Amazon SDK
  2. Incluímos el archivo de configuración con las KEY. Recuerda que debes de cear este archivo.
  3. Creamos la instancia del SDK.
  4. Creamos el cliente de SQS.
  5. Creamos las opciones para la creación del Queue.
  6. Creamos el Queue. Recueda que si ya existe no hará nada.
  7. Obtenemos e imprimos en pantalla la url de la Queue.
  8. Creamos el mensaje a agregar a la cola. En este caso nuestro mensaje es un arreglo, por eso usaremos json_enconde al momento de enviar el contenido.
  9. Enviamos el contenido del mensaje.

En este caso solo estamos enviando un mensaje. Sin embargo puedes ejecutar el código cuantas veces quieras. Ejecutando por consola sería :

$ php createMessage.php

 

 

Leyendo, Procesando Y Eliminando Los Mensajes de SQS

Ahora a la parte entretenida. En este caso, solo por preferencia, el código se ejecutará por siempre y para no tener el CPU al 100% si es que no existen mensajes pendientes esperaremos un tiempo definido por la variable backoff. Esto lo aprendí cuando hice experimentación con redes inalambricas :).

Con cada iteración se obtendrá un solo mensaje en caso de existir. Si el mensaje no es eliminado, volverá a estar en la cola luego de un tiempo.

readMessages.php

require 'vendor/autoload.php';
include_once 'sharedConfig.php';

// Creamos la clase SDK.
$sdk = new Aws\Sdk($sharedConfig);

// Creamos el cliente SQS desde el SDK
$client = $sdk->createSqs();

// Obtenemos la URL de la queue.
$result = $client->getQueueUrl(array('QueueName' => $my_queue_name));
$queue_url = $result->get('QueueUrl');

/*
 * Si no hay un mensaje en el Queue 
 * esperaremos un tiempo
 * definido por backoff y delimitado por 
 * $backoffMax
 */

$backoff = 0;
$backoffMax = 3;
while (true) {

try {
 $message = $client->receiveMessage(array(
 'QueueUrl' => $queue_url
 ));
 } catch (Exception $exc) {
 echo "No se pudo obtener mensaje \n";
 echo $exc->getTraceAsString();
 }

if ($message['Messages'] == null) {
 // No hay mensajes a procesar.
 echo "No hay mensajes a procesar. Duermo.\n";
 $backoff += 0.5;
 if ($backoff > $backoffMax) {
 $backoff = $backoffMax;
 }
 echo "Espero $backoff segundos";
 sleep($backoff);
 } else {
 $backoff = 0;
 echo "Hay mensajes a procesar. Proceso.\n";
 // Obtengo la información del mensaje

$result_message = array_pop($message['Messages']);
 $queue_handle = $result_message['ReceiptHandle'];
 $message_json = $result_message['Body'];

//Imprimimos el contenido del mensaje
 print_r($message_json);

echo "\n";
 //Ahora eliminamos.

try {
 $client->deleteMessage(array(
 'QueueUrl' => $queue_url,
 'ReceiptHandle' => $queue_handle
 ));
 echo "\t Mensaje eliminado\n";
 } catch (Exception $exc) {
 echo $exc->getTraceAsString();
 echo "\t Mensaje NO eliminado\n";
 }
 }
}

Ignoraré la explicación de lo que se explicó anteriormente.

  1. La variable backoff corresponde al tiempo de espera para ver si existen nuevos mensajes.
  2. La variable backoffMax corresponde al tiempo máximo de espera.
  3. result_message corresponde al mensaje que desencolamos del Queue.
  4. queue_handler corresponde a la variable a utilizar en caso de que queramos borrar el mensaje.
  5. $message_json corresponde al mensaje en formato json. Recuerda que lo encondificamos al enviarlo.
  6. la funciona deleteMessage hace exactamente eso, elimina el mensaje del Queue.

¿ Y ahora ?

Eres bienvenido a ejecutar el código que está en el repositorio, solo recuerda crear el archivo sharedConfig.php con tus datos de Amazon : https://github.com/ctala/Jugando-con-PHP-SDK-y-SQS

¡Mantengamos el contacto!

Me encantaría que te mantuvieras al día con el contenido que estoy generando. Recuerda que no es solo el blog, son las redes sociales, libros, y distintos pódcast 😎.

Hago todo lo posible para no hacer Spam,

👉 ¿Te gustó este contenido? Hay más esperando por ti.

Cada semana, comparto aprendizajes y reflexiones que no encontrarás en ningún otro lugar. ¡Únete a la comunidad de más de 9,000 emprendedores que ya están avanzando!

El fin de una era, ¡ Adios KCC de Transbank !

Migrar KCC a WebServices

Es el momento en que cambia la forma de recibir pagos para muchos comercios independientemente de que sistema de eCommerce o desarrollo estén utilizando, es el momento para prepararse y no tener problemas cuando el KCC deje de funcionar de manera completa.

El KCC, o kit de integración, ha sido la tecnología usada por transbank para hacer las transferencias electrónicas con tarjetas de crédito y débito desde ya hace muchos años ( no me atrevería a decir un número pero juro que son muchos !), además fue la razón del por qué cree el plugin gratuito de woocommerce cinco años atrás. Esta tecnología nos ha dado dolores de cabeza a muchos de nosotros, y si estás leyendo este post es posible que seas uno de ellos, pero también nos permitió recibir los pagos a través de internet.

Dejando la nostalgia de lado, estas son las fechas relacionadas al fin del funcionamiento del KCC.

Leer más