05/03/2021

Cómo crear un Pay Button con BTCPAY Server y Mynode sin tienda tipo Woocommerce

Tags: , , , ,

En este artículo comento mis experimentos con BTCPAY Server integrado en Mynode, con el objeto de poder crear de forma sencilla un botón de pago para integrar en nuestra página web, de forma autónoma, sin necesidad de tener que contar con servicios de terceros, contra nuestro propio nodo de bitcoin.

INTEGRACIÓN CON WOOCOMMERCE. ALGO NO APTO PARA PRINCIPIANTES

BTCPAY se anuncia como algo fácil y accesible para cualquiera que quiera abrir un comercio aceptando bitcoins sin necesidad de recurrir a terceros. Al día de hoy este objetivo es ciertamente complejo, incluso para aquellos que tienen conocimientos con nivel de experto (https://www.sosthene.net/btcpay-bilan/). Por lo que he visto, el usuario medio está necesariamente abocado a, o bien gastarse el dinero en una solución de hosting tipo Lunanode, o en el mejor de los casos, tener que recurrir a un servicio de DDNS como no-ip.com (gratuito) y recurrir a amigos o profesionales con conocimiento elevados en la materia. Otra opción muy recomendable sería usar los servicios de bitcoinheiros. Para los interesados en esta iniciativa recomiendo la reciente charla liderada por Lunaticoin, accesible en youtube.

Tras muchos intentos y horas de estudio, personalmente creo que me quedé atascado en el paso 3 de este tutorial (https://docs.btcpayserver.org/DynamicDNS/, Configure your BTCPay docker install to provide HTTPS certificates) por el que hay que ir a la línea de comandos y las instrucciones son simplemente que te conectes a tu “instancia” y ejecutes unos comandos, sin más explicaciones sobre, por ejemplo, cómo acceder a la “instancia”. Si los dos pasos anteriores se pueden hacer desde la interfaz gráfica, no entiendo por qué no han hecho lo mismo con este tercer paso. Igual estoy diciendo una tontería y realmente hay que hacerlo así, pero creo que esto debería mejorarse.

Para acceder por ssh a mynode, creo que lo más operativo es hacerlo en la página de “settings”

Imagen 1

Pero ahí se accede como admin, no como root y según se indica en el panel de control de BTCPAY parece que habría que acceder como root

Imagen 2

Si la cosa se deja así, al intentar el emparejamiento desde Woocommerce (por cierto hay que poner el dominio virtual que tengamos seguido de “:49392”, el puerto de BTCPAY) nos sale un mensaje diciendo que hay que acceder a través de https o de TOR, sin que haya instrucciones sobre cómo acceder por TOR.

Imagen 3

En fin… Después de darme por vencido en mi intento de integrar BTCPAY con Woocomerce, empecé a pensar en alguna otra opción para, por lo menos, usar el “Pay button” que se puede configurar una vez que generamos una tienda en BTCPAY:

Imagen 4

PLANTEAMIENTO SOLUCIÓN ALTERNATIVA

Como decimos, la idea era crear un botón de pago con bitcoins sin necesidad de desarrollar y emparejar con nuestro servidor de BTCPAY una tienda con Woocommerce o similar, y todo ello, como supuestamente pretende conseguir BTCPAY, usando medios propios sin tener que recurrir a nodos o soluciones de botones de pago de terceros que, entre otras cosas, llevan aparejada comisión en muchos casos.

Partimos de la base que utilizamos como herramienta Mynode y BTCPAY SERVER incluido en el paquete Mynode.

Una solución artesanal es simplemente dar a cada nuevo cliente una dirección nueva y remitirla por medios tradicionales, como correo electrónico, pero la idea es una solución automática para que cada pago vaya a una dirección nueva y así no tener que reutilizar direcciones.

El objetivo, por tanto, es poder crear botones de pago de manera fácil, con la generación de un código html que incluir en la web de forma que BTCPAY SERVER pueda interactuar con nuestro nodo local, independientemente del servidor donde esté alojada la página web donde insertemos el código.

Después de darle muchas vueltas al asunto, la clave para la solución que expongo me la dio el vídeo https://www.youtube.com/watch?v=hQxCOSgYqTo de Satoshi Radio, que me mostró el camino a seguir.

A continuación explico los pasos con los que se llega a la solución comentada. No soy informático y seguramente puede que haya otros métodos para alcanzar el objetivo marcado; con este trabajo simplemente explico el camino seguido por si pudiera ser de interés y utilidad para otras personas en situación parecida o análoga.

La idea es poder crear un botón de pago o, como más adelante se indica, un enlace para generar recibos, sobre la base del BTCPAY Server de Mynode, de forma que podamos incrustarlo fácilmente en nuestra página web (alojada en un sitio diferente al nodo de Mynode), que opere contra nuestro propio nodo de Bitcoin, y sin necesidad de instalar e integrar BTCPAY con plataformas tipo Woocommerce o similar.

PASOS A SEGUIR

Creación de la tienda en BTCPAY Server

En primer lugar, desde Mynode accedemos a BTCPAY Server y creamos una tienda. Tendremos que configurar el wallet al que asociamos la tienda para lo cual hay diferentes opciones. Una de ellas es la de introducir la llave maestra pública de un monedero cuyas claves privadas no están en el nodo o equipos a él conectados. Ello permitirá luego que para cada usuario, colaborador o cliente que pinche en el botón o enlace de pago se genere una nueva dirección no usada anteriormente, lo cual beneficia a la privacidad tanto del sitio que aloja el botón de pago como del pagador.

En el apartado “Payment” de “General Settings” de la tienda creada, tenemos que habilitar la casilla de “Allow anyone to create invoice”.

Imagen 5

Habilitación VPN en Mynode

En un primer momento, pensé que era necesario habilitar el acceso por VPN a nuestro nodo de Mynode (https://mynodebtc.com/guide/vpn) con la redirección de puertos (Port Forwarding) que se menciona en la guía. Así lo hice en un principio, pero, curiosamente, me he dado cuenta de que para esta solución no es necesario habilitar la VPN en Mynode, ni tampoco la redirección de puertos en el router. Todo esto de la redirección de puertos nos lo evitamos si usamos TOR, como comento al final del artículo.

Redirección de puertos de BTCPAY Server

Esta sí es una de las claves del proceso, pues es necesario hacerlo si no queremos usar TOR. Tenemos que ir a nuestro router y hacer un reenvío del puerto (Port Forwarding) 49392 ó 49393 usados por BTCPAY Server. Dependiendo de tu router eso se hará de una forma u otra. En esa redirección habrá que poner la IP local de tu nodo de Mynode de modo análogo a como se menciona en el apartado anterior. He comprobado a quitar este reenvío y entonces, como era de esperar, la cosa no funciona, salvo que usemos la opción TOR que comento más adelante.

Creación del botón de pago

Una vez hecho lo anterior, dentro del menú de la tienda de BTCPAY vamos al apartado “Pay Button” y configuramos los parámetros que queramos, como el importe de pago del botón, el tamaño de la imagen, etc.

Dándole al botón de Preview que hay al margen de la derecha, podremos comprobar si todo el proceso va por buen camino.

Uso del código HTML generado

Una vez que está todo correcto, al final de la página podemos ver el “Generate Code” que será algo como lo siguiente:

Si nos fijamos, hay 2 llamadas a …mynode.local:49392… Lo que tenemos que hacer es copiar todo el código, pegarlo en un editor de texto plano y sustituir las dos instancias de “mynode.local” por la IP pública que tenga el nodo de Mynode. Si pegamos ese código en la entrada de wordpress como esta, no sé exactamente por qué razones, la cosa no funciona bien.

Pero si en vez de copiar el código, lo pegamos en un fichero txt, le cambiamos la extensión a html y lo subimos a la web como archivo autónomo, curiosamente entonces sí funciona (aquí ejemplo que sólo funcionara si usamos TOR browser). Otro problema que he observado es que la imagen del botón de pago tampoco se resuelve bien según qué circunstancias. Con el equipo con el que estoy haciendo todo y en local va bien, pero cuando me he conectado desde el móvil u otro equipo no cargaba la imagen, aunque sí el enlace para generar el recibo. Entiendo que una solución podría ser descargarse la imagen subir el fichero a la web y en txt antes mencionado sustituir la llamada a la imagen que se hace al nodo por la imagen subida. Por cierto, el wordpress no me dejaba subir el archivo svg y lo que tenido que convertir a png.

En algunos navegadores, y dependiendo de la configuración de seguridad, pueden aparecer advertencias de que la conexión no es segura, pero bueno esto es un experimento y no se va a recabar ningún dato del visitante. Hay que tener en cuenta igualmente que de esta forma estamos exponiendo la IP pública de nuestra instalación del nodo, motivo por el cual decidí no hacer accesible los ficheros html a los que he hecho referencia antes.

Creación de enlace de pago por importe fijo en moneda FIAT

La verdad es que no entiendo muy bien por qué no puedo poner el botón de pago en una entrada como esta y sin embargo sí pueda en un fichero html independiente. Si no quiere uno andar con florituras de botones y simplemente generar directamente el recibo y por un importe fijo, en vez de copiar el código del final de la página, se puede copiar el enlace que figura a la derecha de la imagen de “preview” del apartado “Pay button”. Hay que tener en cuenta que cada vez que hacemos una modificación en la configuración del pay button se genera un nuevo enlace. Y ese enlace, cambiando “mynode.local” por la IP pública del nodo sí que parece funcionar. De esta manera, podemos incrustar el enlace en una entrada normal como esta, bien en texto, o bien en una imagen que queramos.

Pero claro, el problema que tenemos vuelve a ser que al generar el “invoice” se está desvelando la IP pública del nodo, lo cual afecta a nuestra privacidad.

Una opción para evitar este problema de desvelar nuestra IP sería hacer todo el proceso desde TOR. Es decir, accedemos a MYNODE desde TOR, desde ahí accedemos a btcpayserver y entonces los enlaces que se generan, así como la “invoice” correspondiente, se hacen a direcciones TOR.

Los enlaces que se generan con el pay button aparecen así:
http://u76hm3kfcuro4qyf6mc7ng2x7optl75x6moq6r25ahkc2bx7wwhmsbqd.onion:49392/api/v1/invoices?storeId=FAy9ZoVKrixZwLECeS7FbJ7TkKpxpEm6NUunWGooeNo5&price=5¤cy=EUR
y de esta forma no funciona la cosa. Habría que sustituir la parte en negrita “5¤cy” por “5&currency”. Un error en la generación del texto del enlace que deberán corregir. El error es en el texto, el enlace que se genera tras el texto está correcto. Además, con este enlace podemos crear todas las instancias de pago que queramos con diferentes precios “price=X” sin necesidad de tener que entrar de nuevo en BTCPAY Server.

A continuación un par de enlaces generados con diferentes valores. Eso solamente funcionará si estás viendo la página usando TOR Browser.

Ejemplo donar 5 euros.

Ejemplo de página de donacion_por importe variable. Solamente funcionará si estás viendo la página usando TOR Browser.

Al final parece que he conseguido incrustar el código de generación de invoices aquí, modificando el html que genera BTCPAYSERVER, quitando la primera parte de <style>, pero la solución, como se puede comprobar, es poco amigable:



  1. Bart 26 feb 2022 | reply

    Hola amigo.
    Esto te funcionó con pagos de LN también?

    • Javier Maestre 28 feb 2022 | reply

      No lo he probado. Con LN sería más complicado, sobre todo si quieres hacerlo sin depender de terceros.

Leave a Comment

reset all fields