abeltranp9476
Cómo comenzar a aceptar pagos con criptomonedas y automatizar el proceso
4 years ago
Aceptar pagos con criptos te permite tener la libertad de poder venderle tu servicio a cualquier persona del mundo, mientras esta tenga con que realizar el pago, incluso viviendo en Cuba. También ayudaría a que las personas no tengan que cambiar las criptodivisas por moneda local para comprar sus necesidades, pudiendo efectuar la transacción con estos atractivos activos digitales.
Esta publicación va dirigida a los desarrolladores cubanos, para que entiendan que este es el futuro del comercio electrónico y me gustaría poder aportar mi granito de arena a esta causa. Será una guía sobre cómo crear un sistema de pagos usando PHP como lenguaje de programación (principalmente).
Desde el primer momento en que decidí desarrollar mi propio sistema de pagos automatizado, tuve que entender un poco sobre cómo funcionan las transacciones de las criptomonedas más conocidas. Buscar muchísima información para empezar a crear algo.
Un sistema de pagos de este tipo se puede simplificar en 2 partes básicas:
1- Generación de claves públicas (direcciones) para recibir el pago.
2- Notificación de pago efectuado y posteriormente confirmado.
La idea de manera general es que por cada orden de pago generada en nuestro sistema, se genere una dirección (clave pública) para que el cliente envíe su pago con criptos, dicha dirección debe pertenecernos obviamente, para que el pago nos llegue a nosotros sin caer en manos de un tercero.
La manera que tenemos para generar direcciones que nos pertenezcan es poder crearlas a partir de una clave maestra. Esta clave, es generada a su vez junto a infinitas claves desde la semilla de nuestra wallet. Entonces, desde la wallet que dispongamos, buscamos hasta encontrar las claves maestras de las criptos que necesitamos, para empezar a aceptar pagos en nuestro negocio.
De manera informativa aclaro como funciona el algoritmo para transferir dinero. Cuando una persona realiza un pago, se define cuánto se va a transferir y a quién (dirección de envío), pero se envía todo nuestro dinero en esa wallet y luego volvemos a recibir el sobrante (cambio) a una dirección nuestra, pero esta dirección no es de las que usamos para que nos envíen dinero. Estas direcciones en donde nos son devueltos los cambios, se definen con el path: 1/0, mientras que las otras son definidas: 0/0.
Esto del path de derivación lo entenderán cuando generen las direcciones, pero la primera dirección para recibir pagos se define como path: 0/0, la segunda: 0/1 y así sucesivamente. Mientras que las direcciones donde la blockchain nos devuelve nuestro cambio, la primera se define como path: 1/0, la segunda: 1/1 y así sucesivamente.
Hay que tener en cuenta los principios básicos del funcionamiento de las wallets para no cometer errores. Estas aplicaciones tienen un algoritmo que comprueba si existe alguna transacción en la primera dirección y continúa así hasta que detecte, que hay por ejemplo, 20 direcciones sin transacciones; en el caso de encontrar este espacio, se detiene y no sigue comprobando. En ese momento la sincronización de la wallet termina.
Si no se tiene en cuenta, puede darse el caso (tarde o temprano ocurrirá), en el que los clientes pagan pero no vemos reflejado el pago en nuestra wallet. Eso es debido a que no se gestionaron correctamente las direcciones, se creó un espacio de direcciones sin transacciones y luego de eso se encuentran las que si tienen.
Para evitar este inconveniente debe realizarse un algoritmo que recicle las direcciones generadas en una orden de pago, pero que no ha sido pagada en un tiempo límite. Este tiempo aconsejo poner unos 15 minutos. Esto significa que, las órdenes de pagos solo van a tener una vida de 15 minutos sin haberse detectado el pago en la blockchain. Me refiero a que si un cliente pide un producto y nosotros le vamos a realizar una orden de pago, hay que comprobar antes si hay órdenes vencidas sin pagar y utilizamos la misma dirección de esa orden vencida para esta nueva orden, a eso se le llama reciclar.
Continuando con otros detalles a tener en cuenta se puede mencionar que debe haber un registro en nuestra base de datos, que guarde el último índice utilizado en el path de derivación cuando se generan las direcciones para las órdenes de pagos.
Si ya tenemos creada la primera parte de nuestro proyecto, entonces necesitamos la segunda que se encargara de cambiar los estados, de las órdenes de compras en nuestra base de datos. Este se puede realizar con la ayuda de uno de los tantos servicios REST-API (pagos). Si no tienes suerte de obtener un servicio de pago, puedes consumir free en algunos casos (con limitaciones). Pero no son éstas las únicas opciones, recientemente me puse a trabajar en un sistema que se encarga de esta tarea para algunas criptomonedas. Al final les dejo enlaces a los proyectos públicos que tengo en Github para ayudarlos un poco.
Con esta librería podrán generar las direcciones de las criptomonedas soportadas. https://github.com/abeltranp9476/cripto-generador
Cliente que les permitirá interactuar con mi sistema de notificación de pagos. https://github.com/abeltranp9476/cliente-blockchain
Espero haber aclarado algo sobre este tema y aunque sea dejar el bichito de la curiosidad. Ojalá y más de uno se sume a crear su propio sistema. Esto tiene sus ventajas claro está, no le pagas comisiones a nadie por transacciones y mantienes en tu poder las claves maestras, que por cuestiones de seguridad no es aconsejable dárselas a terceros. Cualquier duda utiliza los comentarios.
38
10
$0.39

Acerca de
Soy desarrollador Web: Laravel - PHP, React - Javascript