Pages:
Author

Topic: ¿Cual es la mejor forma de aceptar bitcoins en una tienda física? (Read 3270 times)

newbie
Activity: 28
Merit: 0
Es verdad que te cobran casi todas las aplicaciones una pequeña comisión así que si alguno hace eso de una interfaz para su propia cuenta y sin comisiones que cuente como obque haga la aplicación haha gracias
newbie
Activity: 33
Merit: 0
buena pregunta   Undecided
legendary
Activity: 1522
Merit: 1005
He visto que también había(o hay,pq no sé si todavía funciona) otra plataforma de pagos que es walletbit, mirándola así "por encima" he visto que tiene algo que me gusta mucho, que es el "point of sale", es decir transformas el tablet en un cajero, por lo que he entendido, pones en tu "point of sale"(punto de venta), los productos y sus precios, después va la persona que vaya a cobrar del cliente, y vas "apuntando" lo que consumió, por ejemplo, un café y un croissant, la camarera le pregunta como va a querer pagar, si dice que con bitcoins, la camarera le da a "bitcoins" y genera un código QR que el cliente solo tiene que escanear con su móvil y pagar.

Lamentablemente parece que walletbit ya no funciona o ya no es segura. Pero la idea del "point of sale" me resulta muy atrayente.

¿Sabemos si hay alguna otra plataforma que permita hacer eso?

https://cdn.walletbit.com/pos/includes/pos.jpg
newbie
Activity: 32
Merit: 0
PD: si alguien sabe cual es el servicio-API más fiable para obtener el cambio en tiempo real se lo agradecería.

A día de hoy, la referencia de precio es mtgox, un ejemplo de acceso al precio medio de mtgox en perl:

Code:
!/usr/bin/perl -W
#DOC
#https://en.bitcoin.it/wiki/MtGox/API/Streaming
#https://en.bitcoin.it/wiki/MtGox
#https://en.bitcoin.it/wiki/MtGox/API
 
use strict;
use warnings;
 
use Time::HiRes qw(gettimeofday);
use MIME::Base64;
use Digest::SHA qw(hmac_sha512);
 
use JSON;
use LWP::UserAgent;
 
use Data::Dumper;
 
my $lwp = LWP::UserAgent->new;
$lwp->agent("perl $]");
 
my $json = JSON->new->allow_nonref;
 
my $secret = 'mtgox.secret';
my $key = 'mtgox.key';
 
 
#my $request = genReq('/1/generic/private/info');
my $request = genReq('/0/data/ticker.php?Currency=EUR');
my $res = $lwp->request($request);
 
# Check the outcome of the response
if ($res->is_success) {
        print Dumper($json->decode( $res->content ))."\n";
print $json->decode( $res->content )->{'ticker'}->{'avg'} . "\n";
}
else { print $res->status_line, "\n"; }
 
exit 0;
 
 
## sub routines and helpers
 
sub genReq {
        my ($uri) = shift;
 
        my $req = HTTP::Request->new(POST => 'https://data.mtgox.com/api/'.$uri);
        $req->content_type('application/x-www-form-urlencoded');
        $req->content("nonce=".microtime());
$req->header('Rest-Key' => $key);
$req->header('Rest-Sign' => signReq($req->content(),$secret));
 
        return $req;
};
 
sub signReq {
        my ($content,$secret) = @_;
        return encode_base64(hmac_sha512($content,decode_base64($secret)));
}
 
sub microtime { return sprintf "%d%06d", gettimeofday; }

Añadelo al cron y con update de la base de datos y listo.

Gracias!, bueno, finalmente ya había utilizado el pequeño API de bitcoincharts
legendary
Activity: 1623
Merit: 1608
El problema que veo es como paga la gente desde su movil. Hay muchos móviles que no les vale la aplicación de blockchain.info porque tienen un android con versión anterior al necesario. En ese caso con que monedero paga el cliente?

Si el móvil es muy antiguo (anterior a Android 2.3), puedes utilizar BitcoinSpinner, que funciona para Android 2.1 o superior.

También se podrá utilizar directamente el wallet con el navegador desde la web de blockchain.info, pero desde el móvil no lo he probado.
newbie
Activity: 11
Merit: 0
Esto de los pagos puede solucionarse con bitmessage.
hero member
Activity: 608
Merit: 500
PD: si alguien sabe cual es el servicio-API más fiable para obtener el cambio en tiempo real se lo agradecería.

A día de hoy, la referencia de precio es mtgox, un ejemplo de acceso al precio medio de mtgox en perl:

Code:
!/usr/bin/perl -W
#DOC
#https://en.bitcoin.it/wiki/MtGox/API/Streaming
#https://en.bitcoin.it/wiki/MtGox
#https://en.bitcoin.it/wiki/MtGox/API
 
use strict;
use warnings;
 
use Time::HiRes qw(gettimeofday);
use MIME::Base64;
use Digest::SHA qw(hmac_sha512);
 
use JSON;
use LWP::UserAgent;
 
use Data::Dumper;
 
my $lwp = LWP::UserAgent->new;
$lwp->agent("perl $]");
 
my $json = JSON->new->allow_nonref;
 
my $secret = 'mtgox.secret';
my $key = 'mtgox.key';
 
 
#my $request = genReq('/1/generic/private/info');
my $request = genReq('/0/data/ticker.php?Currency=EUR');
my $res = $lwp->request($request);
 
# Check the outcome of the response
if ($res->is_success) {
        print Dumper($json->decode( $res->content ))."\n";
print $json->decode( $res->content )->{'ticker'}->{'avg'} . "\n";
}
else { print $res->status_line, "\n"; }
 
exit 0;
 
 
## sub routines and helpers
 
sub genReq {
        my ($uri) = shift;
 
        my $req = HTTP::Request->new(POST => 'https://data.mtgox.com/api/'.$uri);
        $req->content_type('application/x-www-form-urlencoded');
        $req->content("nonce=".microtime());
$req->header('Rest-Key' => $key);
$req->header('Rest-Sign' => signReq($req->content(),$secret));
 
        return $req;
};
 
sub signReq {
        my ($content,$secret) = @_;
        return encode_base64(hmac_sha512($content,decode_base64($secret)));
}
 
sub microtime { return sprintf "%d%06d", gettimeofday; }

Añadelo al cron y con update de la base de datos y listo.
newbie
Activity: 33
Merit: 0
El problema que veo es como paga la gente desde su movil. Hay muchos móviles que no les vale la aplicación de blockchain.info porque tienen un android con versión anterior al necesario. En ese caso con que monedero paga el cliente?
full member
Activity: 210
Merit: 100
Electrum tiene un plugin que se llama "Point of Sale" que permite generar un código QR en una pantalla que se mostrará al cliente.

Si importas la clave pública maestra es incluso posible ir generando direcciones y no tener que guardar las monedas en ese ordenador (por motivos de seguridad).
legendary
Activity: 1227
Merit: 1000
Lo más sencillo para una tienda física es un monedero de papel. Puedes hacerte uno en 30 segundos en
https://www.bitaddress.org/


En cualquier otro dispositivo con conexión a Internet puedes comprobar que se ha recibido el pago.

Salvo que vayas a realizar cientos de transacciones en BTC al día (improbable todavía), no te recomiendo que te compliques más la vida.
newbie
Activity: 33
Merit: 0
OK, me refiero a cuál utilizais vosotros  Cheesy Cuál recomendais para tener en el movil.
Blockchain.info en movil y en web.

El problema es que hay muchos móviles que no son compatibles con la aplicación blockchain.info.
rme
hero member
Activity: 756
Merit: 504
OK, me refiero a cuál utilizais vosotros  Cheesy Cuál recomendais para tener en el movil.
Blockchain.info en movil y en web.
legendary
Activity: 1974
Merit: 1029
Tengo que investigar a ver como se genera la imagen, me he basado en el ejemplo de la sección de desarrolladores de blockchain http://blockchain.info/es/api/api_receive y me da la sensación de que el código se genera en el servidor de Blockchain. Lo miraré a ver si se puede construir el qr de esa manera, cualquier ayuda es bienvenida.

newbie
Activity: 33
Merit: 0
OK, me refiero a cuál utilizais vosotros  Cheesy Cuál recomendais para tener en el movil.
newbie
Activity: 32
Merit: 0
La tienda con la tablet utilizando Bitpay o mostrando el código QR de su monedero lo entiendo, pero ¿que aplicación utiliza el cliente en el móvil? Cuál recomendais?

Hombre, el cliente elegirá la aplicación que le de la gana no? ahí no tienes nada que hacer, digo yo.
newbie
Activity: 33
Merit: 0
La tienda con la tablet utilizando Bitpay o mostrando el código QR de su monedero lo entiendo, pero ¿que aplicación utiliza el cliente en el móvil? Cuál recomendais?
newbie
Activity: 32
Merit: 0
Bueno, nosotros ya estamos en desarrollo y pruebas para que nuestro software Tpv conecte con el cliente bitcoin, genere una nueva dirección para cada pago con su etiqueta e importe, y muestre en pantalla y/o imprima un ticket con el código QR (depende de si el empleado dispone de móvil/tablet o no). Y luego, claro, comprobar si la transacción se ha recibido y número de confirmaciones.

Ahora tenemos que buscar la mejor forma de obtener en tiempo real el cambio de moneda, puesto que, lógicamente los comercios compran la mercancía en euros y/o dolares y por tanto no deben poner precios fijos en bitcoins, por tanto, o bien en cada transacción o bien cada X minutos tendremos que comprobar el cambio actual.

A ver si esta actualización anima a la multitud de comercios que usan nuestro software tpv a operar y aceptar el bitcoin en sus puntos de venta físicos, sería un gran paso adelante.

PD: si alguien sabe cual es el servicio-API más fiable para obtener el cambio en tiempo real se lo agradecería.
full member
Activity: 154
Merit: 100
Te felicito, primero por aceptar bitcoin en tu comercio. Segundo por no querer dejarte estafar por terceros que cobran por servicios innecesarios.

El cliente de Bitcoin te permite completamente aceptar los pagos.
legendary
Activity: 1820
Merit: 1017
En el URI scheme de IANA para Bitcoin se indica que también se puede utilizar el atributo message:

http://www.iana.org/assignments/uri-schemes/prov/bitcoin

Buen detalle.
legendary
Activity: 1820
Merit: 1017
Pues no, pero claro tenemos la ayuda del programa que nos aporta la siguiente información:

Code:
Bitcoin-Qt versión v0.8.1.0-g34d62a8-beta

Uso:
  bitcoin-qt [opciones de la línea de órdenes]


Opciones:

  -?                     Este mensaje de ayuda

  -conf=           Especificar archivo de configuración (predeterminado: bitcoin.conf)

  -pid=            Especificar archivo pid (predeterminado: bitcoin.pid)

  -gen                   Generar monedas
  -gen=0                 No generar monedas
  -datadir=         Especificar directorio para los datos
  -dbcache=           Establecer el tamaño de caché de la base de datos en megabytes (predeterminado: 25)
  -timeout=           Especificar el tiempo máximo de conexión en milisegundos (predeterminado: 5000)
  -proxy=       Conectar mediante proxy socks
  -socks=             Elija la versión del proxy socks a usar (4-5, predetermiando: 5)
  -tor=         Utilizar proxy para conectar a servicios ocultos (predeterminado: igual que -proxy)
  -dns                   Permitir búsquedas DNS para -addnode, -seednode y -connect
  -port=           Escuchar conexiones en (predeterminado: 8333 o testnet: 18333)
  -maxconnections=    Mantener como máximo conexiones a pares (predeterminado: 125)
  -addnode=          Añadir un nodo al que conectarse y tratar de mantener la conexión abierta
  -connect=          Conectar sólo a los nodos (o nodo) especificados
  -seednode=         Conectar a un nodo para obtener direcciones de pares y desconectar
  -externalip=       Especifique su propia dirección pública
  -onlynet=         Conectarse solo a nodos de la red (IPv4, IPv6 o Tor)
  -discover              Descubrir dirección IP propia (predeterminado: 1 al escuchar sin -externalip)
  -irc                   Encontrar los pares utilizando Internet Relay Chat (predeterminado: 0)
  -checkpoints           Aceptar solamente cadena de bloques que concuerde con los puntos de control internos (predeterminado: 1)
  -listen                Aceptar conexiones desde el exterior (predeterminado: 1 si no -proxy o -connect)
  -bind=           Vincular a la dirección dada y escuchar siempre en ella. Utilice la notación [host]:port para IPv6
  -dnsseed               Encontrar pares mediante búsqueda de DNS (predeterminado: 1 salvo con -connect)
  -banscore=          Umbral para la desconexión de pares con mal comportamiento (predeterminado: 100)
  -bantime=           Número de segundos en que se evita la reconexión de pares con mal comportamiento (predeterminado: 86400)
  -maxreceivebuffer=  Búfer de recepción máximo por conexión, *1000 bytes (predeterminado: 5000)
  -maxsendbuffer=     Búfer de recepción máximo por conexión, , *1000 bytes (predeterminado: 1000)
  -upnp                  Usar UPnP para asignar el puerto de escucha (predeterminado: 1 al escuchar)
  -paytxfee=        Tarifa por KB que añadir a las transacciones que envíe
  -server                Aceptar comandos consola y JSON-RPC

  -testnet               Usar la red de pruebas

  -debug                 Mostrar información de depuración adicional. Abarca todas las demás opciones -debug*
  -debugnet              Mostrar información de depuración adicional
  -logtimestamps         Anteponer marca temporal a la información de depuración
  -shrinkdebugfile       Reducir el archivo debug.log al iniciar el cliente (predeterminado: 1 sin -debug)
  -printtoconsole        Enviar información de trazas/depuración a la consola en lugar de al archivo debug.log
  -rpcuser=        Nombre de usuario para las conexiones JSON-RPC

  -rpcpassword=      Contraseña para las conexiones JSON-RPC

  -rpcport=        Escuchar conexiones JSON-RPC en (predeterminado: 8332 o testnet:18332)
  -rpcallowip=       Permitir conexiones JSON-RPC desde la dirección IP especificada

  -rpcconnect=       Enviar comando al nodo situado en (predeterminado: 127.0.0.1)

  -blocknotify=     Ejecutar un comando cuando cambia el mejor bloque (%s en cmd se sustituye por el hash de bloque)
  -upgradewallet         Actualizar el monedero al último formato
  -keypool=           Ajustar el número de claves en reserva (predeterminado: 100)

  -rescan                Volver a examinar la cadena de bloques en busca de transacciones del monedero perdidas
  -salvagewallet         Intento de recuperar claves privadas de un wallet.dat corrupto
  -checkblocks=       How many blocks to check at startup (default: 288, 0 = all)
  -checklevel=        Como es de exhaustiva la verificació de bloques (0-4, por defecto 3)
  -txindex               Maintain a full transaction index (default: 0)
  -loadblock=      Importa los bloques desde un archivo blk000??.dat externo
  -reindex               Reconstruir el índice de la cadena de bloques a partir de los archivos blk000??.dat actuales
  -par=N                 Set the number of script verification threads (1-16, 0=auto, default: 0)

Opciones de creación de bloques:
  -blockminsize=      Establecer tamaño mínimo de bloque en bytes (predeterminado: 0)
  -blockmaxsize=      Establecer tamaño máximo de bloque en bytes (predeterminado: 250000)
  -blockprioritysize= Establecer el tamaño máximo de las transacciones de alta prioridad/comisión baja en bytes (predeterminado:27000)

Opciones SSL: (ver la Bitcoin Wiki para instrucciones de configuración SSL)
  -rpcssl                                  Usar OpenSSL (https) para las conexiones JSON-RPC

  -rpcsslcertificatechainfile=  Certificado del servidor (predeterminado: server.cert)

  -rpcsslprivatekeyfile=         Clave privada del servidor (predeterminado: server.pem)

  -rpcsslciphers=                 Cifrados aceptados (predeterminado: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)


Opciones GUI:
  -lang=           Establecer el idioma, por ejemplo, "es_ES" (predeterminado: configuración regional del sistema)
  -min                   Arrancar minimizado
  -splash                Mostrar pantalla de bienvenida en el inicio (predeterminado: 1)


Mientras que los operadores de la consola son:

Code:
Bienvenido a la consola RPC de Bitcoin
Use las flechas arriba y abajo para navegar por el historial y Control+L para limpiar la pantalla.
Escriba help para ver un resumen de los comandos disponibles.

help

addmultisigaddress <'["key","key"]'> [account]
addnode
backupwallet
createmultisig <'["key","key"]'>
createrawtransaction [{"txid":txid,"vout":n},...] {address:amount,...}
decoderawtransaction
dumpprivkey
getaccount
getaccountaddress
getaddednodeinfo [node]
getaddressesbyaccount
getbalance [account] [minconf=1]
getblock
getblockcount
getblockhash
getblocktemplate [params]
getconnectioncount
getdifficulty
getgenerate
gethashespersec
getinfo
getmininginfo
getnewaddress [account]
getpeerinfo
getrawmempool
getrawtransaction [verbose=0]
getreceivedbyaccount [minconf=1]
getreceivedbyaddress [minconf=1]
gettransaction
gettxout [includemempool=true]
gettxoutsetinfo
getwork [data]
help [command]
importprivkey [label] [rescan=true]
keypoolrefill
listaccounts [minconf=1]
listaddressgroupings
listlockunspent
listreceivedbyaccount [minconf=1] [includeempty=false]
listreceivedbyaddress [minconf=1] [includeempty=false]
listsinceblock [blockhash] [target-confirmations]
listtransactions [account] [count=10] [from=0]
listunspent [minconf=1] [maxconf=9999999] ["address",...]
lockunspent unlock? [array-of-Objects]
move [minconf=1] [comment]
sendfrom [minconf=1] [comment] [comment-to]
sendmany {address:amount,...} [minconf=1] [comment]
sendrawtransaction
sendtoaddress [comment] [comment-to]
setaccount
setgenerate [genproclimit]
settxfee
signmessage
signrawtransaction [{"txid":txid,"vout":n,"scriptPubKey":hex,"redeemScript":hex},...] [,...] [sighashtype="ALL"]
stop
submitblock [optional-params-obj]
validateaddress
verifymessage
walletlock
walletpassphrase
walletpassphrasechange

Si lo que buscas es una guía de uso básica en español con capturas de las acciones para que sirva de guía en comercios que quieren comenzar aceptar bitcoins, habría que currársela. Aunque pienso que el cliente Qt no es el más indicado para un negocio. Éstos necesitan un sistema que les proporcione automáticamente una nueva dirección de pago para cada venta con el fin de mantener la privacidad sobre su volumen de facturación por lo que se necesitaría utilizar un cliente que tire de carteras deteminísticas para tener siempre el control de la generación de todas las claves privadas correspondientes y con el wallet funcionando en modo desconectado (en bitcoin no necesitas devolver cambios por lo que los dependientes no tendrían que tocar el monedero).
Pages:
Jump to: