USD
USD
AUD
CAD
CHF
CLP
CNY
DKK
EUR
GBP
HKD
INR
ISK
JPY
KRW
NZD
PLN
RUB
SEK
SGD
THB
TWD

Recibir pagos API V2

Aceptar pagos en bitcoins sin problemas

Ofrecemos una clave pública extendida (xPub) y generamos una dirección única y correspondientemente sin usar para que tus clientes envíen npagos. Te notificamos los pagos realizados a dicha dirección de forma inmediata a una dirección URL de tu elección.

Introducción

La API Receive Payments V2 de Blockchain es la forma más rápida y sencilla de empezar a aceptar pagos en bitcoins automáticos. Se trata de una sencilla solicitud HTTP GET, que se puede crear y poner en funcionamiento en cuestión de minutos.
Una de las complejidades que incluye recibir pagos en bitcoins es la necesidad de generar una dirección única para nuevos usuarios o facturas. Estas direcciones tienen que ser monitorizadas y almacenadas con seguridad. La API Receive Payments de Blockchain se encarga de generar y monitorizar las direcciones. Notificaremos a tu servidor una sencilla devolución de llamada cuando se reciba el pago.

Solicitar una clave de API

Conseguir acceso a las API de Blockchain.info

Para usar la API Receive Payments V2, solicita una clave de API en https://www.blockchain.com/api/request. Esta clave de API solo es válida para nuestra API Receive Payments. No se puede usar la clave de API estándar del monedero de Blockchain para Receive Payments V2, y viceversa.

Obtener una Clave pública extendida (xPub)

Se pueden crear xPubs con nuestro nuevo Blockchain Wallet

Esta API requiere tener una cuenta xPub BIP 32 xPub para recibir pagos. La forma más fácil de empezar a recibir pagos es abrir un Blockchain Wallet en https://www.blockchain.com/api/request. Deberás crear una nueva cuenta en tu monedero exclusivamente para transacciones facilitadas por esta API. Cuando hagas llamadas de API, utiliza xPub para esta cuenta (localizado en Ajustes -> Direcciones -> Gestionar -> Más opciones -> Mostrar xPub).

Generar una dirección de recepción [GET]

Proporcionar direcciones de bitcoin únicas y sin utilizar a tus clientes

Se pueden crear xPubs con nuestro nuevo Blockchain Wallet
https://api.blockchain.info/v2/receive?xpub=$xpub&callback=$callback_url&key=$key
Como se define el BIP 44, el software de billetera no escaneará más de 20 direcciones sin utilizar. Dado que hay suficientes solicitudes de este API que no tienen un pago asignado, podrás generar direcciones más allá de este horizonte, lo que supondría que gastar fondos pagados a estas direcciones fuese más complicado. Por ello, este API devolverá un error y rechazará crear nuevas direcciones si se crea un vacío de más de 20 direcciones sin utilizar. Si encuentras este error, o bien tendrás que crear un xPub nuevo (dentro de la misma billetera no hay problema), o recibir un pago en una de las 20 cuentas creadas anteriormente.
https://api.blockchain.info/v2/receive?xpub=$xpub&callback=$callback_url&key=$key&gap_limit=$gap_limit
  • xpub - Tu xPub (dónde te gustaría que se enviase el pago)
  • callback_url - Se le notificará a la dirección de llamada URL cuando se reciba un pago. Recuerde codificar la URL de la dirección de llamada URL cuando se inicie el método de creación.
  • key - Tu blockchain.info recibe clave de pagos v2 api. Solicitar una clave API.
  • gap_limit - Opcional. Cuántas direcciones sin usar antes de que se borren.
Derivar una dirección sin utilizar usando tu xPub:
curl "https://api.blockchain.info/v2/receive?xpub=xpub6CWiJoiwxPQni3DFbrQNHWq8kwrL2J1HuBN7zm4xKPCZRmEshc7Dojz4zMah7E4o2GEEbD6HgfG7sQid186Fw9x9akMNKw2mu1PjqacTJB2&callback=https%3A%2F%2Fmystore.com%3Finvoice_id%3D058921123&key=[yourkeyhere]"
Si tu cliente ha enviado un bitcoin a la dirección que hay en la respuesta:
Respuesta:200 OK, application/json
{
  "address": "19jJyiC6DnKyKvPg38eBE8R6yCSXLLEjqw",
  "index": 23,
  "callback": "https://mystore.com?invoice_id=058921123"
}

Ejemplo PHP

Código fuente completo (PHP, Python, Ruby)

$secret = 'ZzsMLGKe162CfA5EcG6j'

$my_xpub = '{YOUR XPUB ADDRESS}';
$my_api_key = '{YOUR API KEY}';

$my_callback_url = 'https://mystore.com?invoice_id=058921123&secret='.$secret;

$root_url = 'https://api.blockchain.info/v2/receive';

$parameters = 'xpub=' .$my_xpub. '&callback=' .urlencode($my_callback_url). '&key=' .$my_api_key;

$response = file_get_contents($root_url . '?' . $parameters);

$object = json_decode($response);

echo 'Send Payment To : ' . $object->address;

Actualizaciones de saldos [POST]

Monitorear direcciones para recibir y gastar los pagos

Este método monitoriza una dirección de tu elección para pagos recibidos y / o gastados. Se te enviará una notificación HTTP inmediatamente cuando se haga una transacción, y subsecuentemente cuando alcance el número de confirmaciones especificado en la solicitud.
Se requiere que especifiques el comportamiento de notificación de la solicitud. Configurar el comportamiento en 'BORRAR' borrará la solicitud después de que se envíe a tu dirección de llamada la primera notificación relevante. Configurar el comportamiento en 'MANTENER' enviará notificaciones adicionales cada vez que una transacción con las confirmaciones y el tipo de operación especificados se envíe a o desde la dirección de la solicitud.
El tipo de operación es un parámetro opcional que indica si la dirección se monitorizará para las transacciones recibidas o gastadas, o ambas. Por defecto, se monitorizan los dos tipos de operaciones.
También puedes, opcionalmente, especificar el número de confirmaciones que alcanza una transacción antes de que se envíe una notificación. Tenga en cuenta que recibirá una notificación con 0 confirmaciones (es decir, inmediatamente después de que se realice la transacción), y una vez más cuando se llega al número de confirmaciones especificado en la solicitud (3 confirmaciones por defecto).
https://api.blockchain.info/v2/receive/balance_update
  • address - La dirección que te gustaría monitorizar
  • callback - Se le notificará a la dirección de llamada URL cuando se reciba un pago.
  • callback - Se le notificará a la dirección de llamada URL cuando se reciba un pago. Recuerde codificar la URL de la dirección de llamada URL cuando se inicie el método de creación.
  • key - Tu blockchain.info recibe clave de pagos v2 api. Solicitar una clave API.
  • onNotification - Comportamiento de la notificación de solicitud ('MANTENER' | 'BORRAR).
  • confs - Opcional (por defecto 3). El número de confirmaciones que la transacción tiene que tener antes de que se envíe una notificación.
  • op - Opcional (por defecto 'ALL'). El tipo de operación para el que te gustaría recibir notificaciones ('SPEND' | 'RECEIVE' | 'ALL').
Monitorizar una dirección por cada pago recibido con 5 confirmaciones:
curl "curl -H "Content-Type: text/plain" --data '{"key":"[your-key-here]","addr":"183qrMGHzMstARRh2rVoRepAd919sGgMHb","callback":"https://mystore.com?invoice_id=123","onNotification":"KEEP", "op":"RECEIVE", "confs": 5}' https://api.blockchain.info/v2/receive/balance_update
Respuesta:200 OK, application/json
{
  "id": 70,
  "addr": "183qrMGHzMstARRh2rVoRepAd919sGgMHb",
  "op": "RECEIVE",
  "confs": 5,
  "callback": "https://mystore.com?invoice_id=123",
  "onNotification": "KEEP"
}
La ID en la respuesta se puede utilizar para borrar la solicitud:
curl -X DELETE "https://api.blockchain.info/v2/receive/balance_update/70?key=[your-key-here]"
Respuesta:200 OK, application/json
{
  "deleted": true
}

Notificación del bloque [POST]

Este método le permite solicitar llamadas cuando se añade un nuevo bloque de una altura especificada y un número de confirmación a la cadena de bloques.
Como con las solicitudes de actualización de saldos, tendrás que especificar el comportamiento de la notificación de solicitud 'MANTENER' o 'BORRAR'.
La altura es un parámetro opcional que indica a qué altura te gustaría recibir una notificación de bloque. Si no se especifica, será la altura para llegar al próximo bloque.
Confs es otro parámetro opcional que indica cuántas confirmaciones tendría que tener un bloque cuando se envía una notificación.
https://api.blockchain.info/v2/receive/block_notification
  • callback - Se le notificará a la dirección de llamada URL cuando un bloque que cumple con tus especificaciones se añada.
  • key - Tu blockchain.info recibe clave de pagos v2 api. Solicitar una clave API.
  • onNotification - Comportamiento de la notificación de solicitud ('MANTENER' | 'BORRAR).
  • confs - Opcional (por defecto 1). El número de confirmaciones que la transacción tiene que tener antes de que se envíe una notificación.
  • height - Opcional (número de la cadena actual por defecto +1). La altura por la que se debería enviar una notificación.
Solicita una única notificación cuando Bitcoin Blockchain alcance 500 000 bloques:
curl -H "Content-Type: text/plain" --data '{"key":"[your-key-here]","height":500000,"callback":"https://mysite.com/block?request_id=1234","onNotification":"DELETE"}' https://api.blockchain.info/v2/receive/block_notification
Respuesta:200 OK, application/json
{
  "id": 64,
  "height": 500000,
  "callback": "https://mysite.com/block?request_id=1234",
  "confs": 1,
  "onNotification": "DELETE"
}
La ID en la respuesta se puede utilizar para borrar la solicitud:
curl -X DELETE "https://api.blockchain.info/v2/receive/block_notifcation/64?key=[your-key-here]"
Respuesta:200 OK, application/json
{
  "deleted": true
}

Implementar a llamada

Procesar la devolución de llamada enviada desde blockchain.info

Llamadas de recepción y actualización de saldos

Por favor, tenga en cuenta, la dirección de llamada URL tiene una longitud limitada a 255 caracteres.
Cuando se recibe un pago de una dirección generada o una dirección monitorizada por una solicitud de actualización de saldos, blockchain.info notificará la URL de devolución de llamada que haya especificado. Las llamadas de actualización de saldos y la notificación adicional se enviarán una vez que la transacción haya alcanzado el número de confirmaciones especificado.
  • transaction_hash - La función hash de la transacción de pago.
  • address - La dirección de bitcoin de destino (parte de tu cuenta xPub).
  • confirmations - El número de confirmaciones de esta transacción.
  • value - El valor del pago recibido (en Satoshi, es decir, se divide entre 100.000.000 para conseguir la cantidad en BTC).
  • {custom parameter} - Cualquier parámetro incluido en la dirección de llamada URL se devolverá a la URL de llamada en la notificación. Se puede usar esta funcionalidad para incluir los parámetros en tu URL de llamada como invoice_id o customer_id para rastrear qué pagos están asociados con cuáles de tus clientes.

Llamadas de notificación del bloque.

Se envía una notificación de bloque cada vez que un nuevo bloque se añade a la cadena de bloques y cumple los requisitos de altura y número de confirmaciones especificados en la solicitud de notificación.
  • hash - La función hash del bloque.
  • confirmations - El número de confirmaciones de este bloque.
  • height - La altura de bloques.
  • timestamp - El sello temporal unix indica cuándo se añadió el bloque.
  • size - Tamaño del bloque en bytes.
  • {custom parameter} - Cualquier parámetro incluido en la dirección de llamada URL se devolverá a la URL de llamada en la notificación.

Ejemplo PHP

Una llamada de ejemplo como resultado del ejemplo PHP anterior.
$real_secret = 'ZzsMLGKe162CfA5EcG6j';
$invoice_id = $_GET['invoice_id']; //invoice_id is passed back to the callback URL
$transaction_hash = $_GET['transaction_hash'];
$value_in_satoshi = $_GET['value'];
$value_in_btc = $value_in_satoshi / 100000000;

//Commented out to test, uncomment when live
if ($_GET['test'] == true) {
return
}

try {
//create or open the database
$database = new SQLiteDatabase('db.sqlite', 0666, $error);
} catch(Exception $e) {
die($error);
}

//Add the invoice to the database
$stmt = $db->prepare("replace INTO invoice_payments (invoice_id, transaction_hash, value) values(?, ?, ?)");
$stmt->bind_param("isd", $invoice_id, $transaction_hash, $value_in_btc);

if($stmt->execute()) {
echo "*ok*";
}

Respuesta de llamada esperada

Para reconocer el procesamiento con éxito de la llamada tu servidor tendría que responder con el texto "*ok*" (sin comillas), en texto, sin HTML. Si el servidor da cualquier otra respuesta, o nada, la llamada se volverá a enviar a cada bloque nuevo (aproximadamente cada 10 minutos) hasta 1000 veces (1 semana). Los dominios llamados que parecen ciegos o nunca devuelven la respuesta "*ok*" pueden estar bloqueados por el servicio.

Comprobar vacío de dirección xPub [GET]

Comprobar vacío de índice entre la última dirección a la que se pagó y la última dirección generada utilizando el punto final de vacío de comprobación. Utiliza el xpub que quieras para comprobar y tu clave API así:
curl "https://api.blockchain.info/v2/receive/checkgap?xpub=[yourxpubhere]]&key=[yourkeyhere]"
{
  "gap": 2
}

Logs de llamadas [GET]

Limpiar pagos pendientes

Ver los logs relacionados con los intentos de llamada utilizando los puntos finales callback_logs. Utiliza la llamada en cuestión exacta y tu clave API así:
curl "https://api.blockchain.info/v2/receive/callback_log?callback=https%3A%2F%2Fmystore.com%3Finvoice_id%3D05892112%26secret%3DZzsMLGKe162CfA5EcG6j&key=[yourkeyhere]"
[
  {
    "callback": "https://mystore.com?invoice_id=058921123&secret=ZzsMLGKe162CfA5EcG6j&key=[yourkeyhere]",
    "called_at": "2015-10-21T22:43:47Z",
    "raw_response": "*bad*",
    "response_code": 200
  },
  {
    "callback": "http://mystore.com?invoice_id=058921123&secret=ZzsMLGKe162CfA5EcG6j&key=[yourkeyhere]",
    "called_at": "2015-10-21T22:43:55Z",
    "raw_response": "*bad*",
    "response_code": 200
  }
]

Seguridad

Se tiene que incluir un parámetro secreto personalizado en la dirección de llamada URL. El secreto volverá al texto de llamada cuando se lanza la llamada, y se comprobará con tu código de validez. Esto evita que alguien trate de entrar en tus servidores y marque ilícitamente una factura como "pagada".

Conversión de divisa

Utiliza el API tasas de conversión para convertir los valores en monedas locales a BTC. Las aplicaciones demo abajo incluyen ejemplos sobre cómo hacerlo.
Si te gustaría convertir los pagos recibidos en Bitcoin a una divisa corriente rápidamente puedes usar una dirección de bitcoin desde una billetera de cambio.

Gastos y devoluciones dobles

Se produce un doble gasto cuando un usuario malicioso gasta el mismo BTC dos veces. Un pago que, en principio, parecía correcto puede devolverse más tarde. Esto se compensa esperando a que la transacción se incluya en la cadena de bloques y alcance un número determinado de confirmaciones. Se considera generalmente que 6 confirmaciones es un número seguro para transacciones de alto valor.
Validar las confirmaciones de la transacción en el escrito de llamada comprobando el parámetro $_GET['confirmations']. Se recomienda que reconozcas la transacción con cero confirmaciones pero solo confíes en la transacción después de una confirmación. Por ejemplo, si se compra un producto, sabríamos que el pedido se ha hecho correctamente con cero confirmaciones (primera llamada, pero sin respuesta "*ok*" todavía), pero solo se enviará el producto cuando hayamos alcanzado 4 o más confirmaciones. Ver la demo PHP callback.php para ver un ejemplo.
if ($_GET['confirmations'] >= 6) {
//Insert into confirmed payments
echo '*ok*';
} else {
//Insert into pending payments
//Don't print *ok* so the notification resent again on next confirmation
}

Expiración de la dirección

Las direcciones de recepción nunca expiran y continuarán siendo monitorizadas hasta que se reciba un "*ok*" en la respuesta de la llamada o se haya notificado a blockchain.info la llamada 1000 veces.

Uso justo

Si no hay límite del número de direcciones de recepción que se pueden general (siempre y cuando se llegue al límite vacío de 20 direcciones), este servicio está diseñado para monitorizar millones de direcciones.
Los dominios de llamada que parecen ciegos o nunca devuelven la respuesta "*ok*" pueden estar bloqueados por el servicio.

Ya lo has pensado, es hora de actuar.

Crear un Wallet. Registrarse en Exchange. Comprar Bitcoin en minutos.