Cómo comenzar a aceptar pagos con criptomonedas y automatizar el proceso

in Develop Spanish3 years ago (edited)

cryptocurrency_3409725_960_720.jpg

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.

Sort:  

Larga Vida a Mi Amado PHP

Larga vida!!!! Saludos.

Congratulations @abeltranp9476! You have completed the following achievement on the Hive blockchain and have been rewarded with new badge(s):

You distributed more than 10 upvotes.
Your next target is to reach 50 upvotes.

You can view your badges on your board and compare yourself to others in the Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

Check out the last post from @hivebuzz:

Saint-Nicholas challenge for well-behaved girls and boys
Feedback from the December 1st Hive Power Up Day
Hive Power Up Month Challenge - Winners List

Do you think bear season has come?

Interesante propuesta @abeltranp9476 me pregunto si se necesita aprender algo de solidity para crear nuestro propio sistema de pago.

Gracias... Realmente no es necesario para crear un sistema propio de pagos. Básicamente solo necesitas generar direcciones propias que apunten a tu wallet, y como poder revisar en las blockchains de las criptomonedas si determinada dirección recibió un determinado monto. Los códigos que comparto ayudan con ese tema.

Ok. Otra pregunta. Puedo generar esas direcciones a partir de la clave maestra de hive.blog ? y recibir criptos hive, como medio de pago ?

Si, pero no con lo que compartí. Habría que ver si existen librerías para ello. De todos modos, me comprometo a buscar la manera y explicarlo.

Muchas gracias, estaré pendiente de su explicación, quiero aprender este aspecto de la programación que también considero útil.

ya viene incorporada la función de aceptar pago en criptomonedas y lo hace gente desarrolladora. gracias