Testing del api de blockchain.info para generar y recibir pagos en bitcoin
Node JS, npm etc Wallet de Blockchain.info localtunnnel con ruby (solo para modo desarollo)
Es necesario tener un archivo config.js en el mismo directorio de app.js así:
var config = {
blockchain_opts : {
xpub : "[xpub de la cuenta de bitcoin en blockchain.info]",
apikey : "[llave api que te proporciona blockchain.info (soliticitarla en ] ",
callbackUrl : "https://[subddomain escogido para localtunnel].localtunnel.me",
secret : "[cualquier texto al azar]"
}
};
module.exports = config;
Este archivo obviamente contiene datos sensibles por lo tanto esta en el .gitignore. Una vez puesto en producción (copiar manualmente config.js!), cambiar el callbackUrl para que sea directo al url del servidor de producción. xpub: es la llave pública de la wallet, y lo puedes obtener en el portal de blockchain.info apikey: Lo puedes solicitar a blockchain.info una vez dada de alta la cuenta de bitcoin secret: sirve para filtrar callbacks falsos y puede ser cualquier texto al azar.
Para el callback de blockchain a localhost (en modo desarollo) es necesario tener corriendo localtunnel. Puesta la pagina web al internet, ya no será necesario esto.
npm install -g localtunnel
debido a que localtunnel tiene un bug (localtunnel/localtunnel#81) que lo hace inestable es necesario instalar un script en ruby para que lo reinicie a cada rato:
ruby localtunnel.rb --port 3000 --subdomain [cualquier nombre de subdominio que desees]
Para guardar el dato de la direccion de bitcoin para recibir el pago usamos express session con MemomryStore. Esto no es recomendable en modo de producción, y es mejor usar una base de datos como mongodb o mysql para la session o las formas de pago
- Primero obtenemos una wallet con blockchain.info
- Solicitamos la api key. Tardan uno o dos días en aprobar la solicitud y mandarla por correo.
- Para hacer cobros, pedimos con la api una nueva direccion de bitcoin que está relacionada con la cartera de blockchain.info. Esta dirección es única y se usa solamente una vez.
- El cliente manda los fondos a esta dirección.
- Blockchain.info nos manda un callback indicando que la dirección ya tiene fondos.
- En el frontend, presentamos al cliente un código QR con los datos para hacer el pago.
- Hacemos un polling (idealmente sería con un websocket), a nuestro api para checar si blockchain ya hio el callback.
- Tambien se puede ver publicamente la direccion con un explorador de bloques de bitcoin como el mismo blockchain.info o blockexplorer.com
- Cerramos el código QR, y confirmamos con el cliente los fondos recibidos.