API BlockchainПолучить
USD
USD
AUD
CAD
CHF
CLP
CNY
DKK
EUR
GBP
HKD
INR
ISK
JPY
KRW
NZD
PLN
RUB
SEK
SGD
THB
TWD

API приема платежей V2

Легко принимайте Bitcoin платежи

Вы предоставляете расширенный открытый ключ (xPub), а мы генерируем уникальный, неиспользованный соответствующий адрес, на который ваши клиенты могут отправлять платеж. Мы немедленно уведомляем вас о платежах на этот адрес, используя выбранный вами URL-адрес обратного вызова.

Вступление

API приема платежей Blockchain V2 – это самый быстрый и простой способ начать принимать автоматические платежи в Bitcoin. Он состоит из простого запроса HTTP GET, и вы можете начать работу за считанные минуты.
Одной из трудностей, связанных с получением платежей в Bitcoin, является необходимость создания уникального адреса для каждого нового пользователя или счета-фактуры. Эти адреса необходимо отслеживать и надежно хранить. API приема платежей блокчейна заботится о создании и отслеживании адресов. Мы будем уведомлять ваш сервер с помощью простого обратного вызова каждый раз при получении платежа.

Запрос ключа API

Получите доступ к API Blockchain.info

Чтобы использовать API приема платежей V2, подайте заявку на получение ключа API на https://www.blockchain.com/api/request. Этот ключ API предназначен только для нашего API приема платежей. Вы не можете использовать стандартный ключ API кошелька блокчейна для получения платежей V2, и наоборот.

Получение расширенного открытого ключа (xPub)

xPubs могут быть созданы с нашим новым Blockchain Wallet

Для этого API требуется аккаунт xPub BIP 32, чтобы получать платежи. Самый простой способ начать получать платежи – это открыть Кошелек Blockchain по адресу https://www.blockchain.com/api/request. Вы должны создать новый аккаунт в своем кошельке исключительно для транзакций, поддерживаемых этим API. Выполняя вызовы API, используйте xPub для этого аккаунта (находится в Настройки -> Адреса -> Управлять -> Другие варианты -> Показать xPub).

Создание адреса получения [GET]

Предоставляйте своим клиентам уникальные неиспользованные биткойн-адреса

xPubs могут быть созданы с нашим новым Blockchain Wallet
https://api.blockchain.info/v2/receive?xpub=$xpub&callback=$callback_url&key=$key
Как определено в BIP 44, программное обеспечение кошелька не будет сканировать более 20 неиспользованных адресов. При наличии достаточного количества запросов от этого API, не имеющих соответствующего платежа, вы могли бы генерировать адреса за пределами этого горизонта, что затруднило бы расходование выплаченных на эти адреса средств. По этой причине этот API возвращает ошибку и отказывается создавать новые адреса, если обнаруживает, что это создает пробел из более чем 20 неиспользованных адресов. Если вы столкнулись с этой ошибкой, то вам нужно будет либо переключиться на новый xPub (в пределах того же кошелька это нормально), либо получить платеж на один из 20 ранее созданных адресов.
https://api.blockchain.info/v2/receive?xpub=$xpub&callback=$callback_url&key=$key&gap_limit=$gap_limit
  • xpub - Ваш xPub (на который вы хотите отправить платеж)
  • callback_url - URL-адрес обратного вызова для уведомления о получении платежа. Не забудьте закодировать URL-адрес обратного вызова при вызове способа create.
  • key - Ваш blockchain.info ключ API приема платежей V2. Запросить ключ API.
  • gap_limit - Не обязательно. Сколько неиспользуемых адресов разрешено до отправления ошибки.
Получите неиспользованный адрес с помощью xPub:
curl "https://api.blockchain.info/v2/receive?xpub=xpub6CWiJoiwxPQni3DFbrQNHWq8kwrL2J1HuBN7zm4xKPCZRmEshc7Dojz4zMah7E4o2GEEbD6HgfG7sQid186Fw9x9akMNKw2mu1PjqacTJB2&callback=https%3A%2F%2Fmystore.com%3Finvoice_id%3D058921123&key=[yourkeyhere]"
Попросите клиента отправить Bitcoin на адрес, указанный в ответе:
Ответ:200 OK, application/json
{
  "address": "19jJyiC6DnKyKvPg38eBE8R6yCSXLLEjqw",
  "index": 23,
  "callback": "https://mystore.com?invoice_id=058921123"
}

Пример PHP

Полный исходный код (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;

Обновления баланса [POST]

Отслеживайте адреса полученных и израсходованных платежей

Этот метод отслеживает выбранный вами адрес для полученных и/или израсходованных платежей. Сразу после совершения транзакции вам будет отправлено HTTP-уведомление, а затем еще одно, когда она получит указанное в запросе количество подтверждений.
Вы должны определить поведение уведомления о запросе. Установка поведения на «УДАЛИТЬ» (DELETE) удалит запрос после отправки первого соответствующего уведомления на ваш адрес обратного вызова. Установка поведения на «СОХРАНИТЬ» (KEEP) будет отправлять дополнительные уведомления каждый раз, когда транзакция с определенным подтверждением и типом операции отправляется на или с адреса в запросе.
Тип операции – это необязательный параметр, указывающий, будет ли адрес отслеживаться на предмет полученных или израсходованных транзакций, или и того, и другого. По умолчанию отслеживаются оба типа операций.
Вы также можете дополнительно указать количество подтверждений, которого достигнет транзакция перед отправкой уведомления. Обратите внимание, что вы получите уведомление при 0 подтверждениях (т.е. сразу после совершения транзакции), а также, когда оно достигнет количества подтверждений, указанного в запросе (по умолчанию 3 подтверждения).
https://api.blockchain.info/v2/receive/balance_update
  • address - Адрес, который вы хотите отслеживать
  • callback - URL-адрес обратного вызова для уведомления о получении платежа.
  • callback - URL-адрес обратного вызова для уведомления о получении платежа. Не забудьте закодировать URL-адрес обратного вызова при вызове способа create.
  • key - Ваш blockchain.info ключ API приема платежей V2. Запросить ключ API.
  • onNotification - Поведение уведомления о запросе «СОХРАНИТЬ» (KEEP) | «УДАЛИТЬ» (DELETE).
  • confs - Не обязательно (по умолчанию 3). Количество подтверждений, которые должна иметь транзакция перед отправкой уведомления.
  • op - Не обязательно (по умолчанию «ВСЕ»). Тип операции, о которой вы хотите получать уведомления («ТРАТИТЬ» (SPEND) | «ПОЛУЧИТЬ» (RECEIVE) | «ВСЕ» (ALL)).
Отслеживайте адрес каждого полученного платежа с помощью 5 подтверждений:
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
Ответ:200 OK, application/json
{
  "id": 70,
  "addr": "183qrMGHzMstARRh2rVoRepAd919sGgMHb",
  "op": "RECEIVE",
  "confs": 5,
  "callback": "https://mystore.com?invoice_id=123",
  "onNotification": "KEEP"
}
Идентификатор в ответе можно использовать для удаления запроса:
curl -X DELETE "https://api.blockchain.info/v2/receive/balance_update/70?key=[your-key-here]"
Ответ:200 OK, application/json
{
  "deleted": true
}

Block Notification [POST]

This method allows you to request callbacks when a new block of a specified height and confirmation number is added to the blockchain.
Как и в случае с запросами на обновление баланса, вы должны указать поведение уведомления о запросе как «СОХРАНИТЬ» (KEEP) или «УДАЛИТЬ» (DELETE).
Высота – это необязательный параметр, указывающий, на какой высоте вы хотели бы получить уведомление о блоке – если не указано, то это будет высота следующего блока, который появится.
Подтверждения – это еще один необязательный параметр, указывающий, сколько подтверждений должен иметь блок при отправке уведомления.
https://api.blockchain.info/v2/receive/block_notification
  • callback - URL-адрес обратного вызова, который будет уведомлен при добавлении соответствующего вашему запросу блока.
  • key - Ваш blockchain.info ключ API приема платежей V2. Запросить ключ API.
  • onNotification - Поведение уведомления о запросе «СОХРАНИТЬ» (KEEP) | «УДАЛИТЬ» (DELETE).
  • confs - Не обязательно (по умолчанию 1). Количество подтверждений, которые должна иметь транзакция перед отправкой уведомления.
  • height - Не обязательно (текущая высота цепочки по умолчанию + 1). Высота, на которой должно быть отправлено уведомление.
Запросите одно уведомление, когда блокчейн Bitcoin достигнет 500000 блоков:
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
Ответ:200 OK, application/json
{
  "id": 64,
  "height": 500000,
  "callback": "https://mysite.com/block?request_id=1234",
  "confs": 1,
  "onNotification": "DELETE"
}
Идентификатор в ответе можно использовать для удаления запроса:
curl -X DELETE "https://api.blockchain.info/v2/receive/block_notifcation/64?key=[your-key-here]"
Ответ:200 OK, application/json
{
  "deleted": true
}

Применение обратного вызова

Обработка обратного вызова, отправленного из blockchain.info

Обратные вызовы получения и обновления баланса

Обратите внимание, что длина URL-адреса обратного вызова ограничена 255 символами.
Когда платеж будет получен на сгенерированный адрес или на адрес, отслеживаемый запросом обновления баланса, blockchain.info уведомит указанный вами URL-адрес обратного вызова. После получения транзакцией указанного количества подтверждений, для обратных вызовов обновления баланса будет отправлено дополнительное уведомление.
  • transaction_hash - Хэш платежной транзакции.
  • address - Целевой биткойн-адрес (часть вашего аккаунта xPub).
  • confirmations - Количество подтверждений этой транзакции.
  • value - Сумма полученного платежа (в сатоши, поэтому разделите на 100000000, чтобы получить сумму в BTC).
  • {custom parameter} - Любые включенные в URL-адрес обратного вызова параметры будут переданы назад в URL-адрес обратного вызова в уведомлении. Вы можете использовать эту функцию, чтобы включить в URL-адрес обратного вызова такие параметры, как invoice_id или customer_id для отслеживания того, какие платежи связаны с каким из ваших клиентов.

Обратные вызовы уведомлений о блоке

A block notification is sent every time a new block is added to the blockchain, and matches the height and number of confirmations set in the notification request.
  • hash - Хэш блока.
  • confirmations - Количество подтверждений этого блока.
  • height - Высота блока.
  • timestamp - Отметка времени unix, указывающая, когда был добавлен блок.
  • size - Размер блока в байтах.
  • {custom parameter} - Любые параметры, включенные в URL-адрес обратного вызова, будут переданы назад в URL-адрес обратного вызова в уведомлении.

Пример PHP

Пример обратного вызова в результате приведенного выше примера PHP.
$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*";
}

Ожидаемый ответ обратного вызова

Чтобы подтвердить успешную обработку обратного вызова, ваш сервер должен ответить сообщением «*ok*» (без кавычек) в виде обычного текста, без HTML. Если сервер отвечает чем-то другим или вообще ничем, то обратный вызов будет посылаться повторно для каждого нового блока (примерно каждые 10 минут) до 1000 раз (1 неделя). Домены обратного вызова, которые выглядят мертвыми или никогда не возвращают ответ «*ok*», могут быть заблокированы службой.

Проверить пробел в адресе xPub [GET]

Проверьте индексный промежуток между последним адресом, на который был произведен платеж, и последним адресом, сгенерированным с использованием конечной точки контрольного промежутка. Используйте xpub, который вы хотите проверить, и свой ключ API следующим образом:
curl "https://api.blockchain.info/v2/receive/checkgap?xpub=[yourxpubhere]]&key=[yourkeyhere]"
{
  "gap": 2
}

Журналы обратных вызовов [GET]

Отладка невыплаченных платежей

Смотрите журналы по вопросам попыток обратного вызова с использованием конечных точек callback_logs. Используйте точный обратный вызов, о котором идет речь, и свой ключ API, например:
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
  }
]

Безопасность

В URL-адрес обратного вызова должен быть включен специальный секретный параметр. Он будет передан обратно в сценарий обратного вызова при запуске обратного вызова и должен быть проверен вашим кодом на достоверность. Это предотвращает попытки кого-либо позвонить на ваши серверы и ложно отметить счет как «оплаченный».

Конвертация валюты

Используйте API курсов валют для преобразования стоимости в местной валюте в BTC. В демонстрационных приложениях ниже приведены примеры того, как это можно сделать.
Если вы хотите быстро конвертировать полученные в Bitcoin платежи в фиатную валюту, то используйте биткойн-адрес из кошелька обмена.

Двойное расходование и возврат платежей

Двойное расходование происходит, когда злоумышленник тратит один и тот же BTC дважды. Платеж, который изначально кажется успешным, позже может быть отменен. Этому противодействует ожидание включения транзакции в блокчейн и получение ряда подтверждений. 6 подтверждений обычно считаются безопасными для транзакций на большие суммы.
Проверьте подтверждения транзакции в сценарии обратного вызова, проверив параметр $_GET ['confirmations']. Рекомендуется подтверждать транзакцию при нулевом подтверждении, но доверять транзакции только после получения одного подтверждения. Например, при покупке продукта мы показываем ордер как успешный при нулевом подтверждении (при первом обратном вызове, но без отображения «*ok*»), но отправляем товар только при достижении 4 или более подтверждений. См. пример демонстрации PHP callback.php.
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
}

Истечение срока действия адреса

Срок действия адресов приема никогда не истекает, они будут продолжать отслеживаться до тех пор, пока в ответе обратного вызова не будет получено «*ok*» или пока blockchain.info не уведомит обратный вызов 1000 раз.

Добросовестное использование

Нет никаких ограничений на количество адресов получения, которые могут быть сгенерированы (при соблюдении ограничения на пробел из 20 адресов), служба предназначена для отслеживания миллионов адресов.
Домены обратного вызова, которые выглядят мертвыми или никогда не возвращают ответ «*ok*», могут быть заблокированы службой.

Вы думали об этом. Пришло время действовать.

Создайте Кошелек. Зарегистрируйтесь на Exchange. Покупайте Bitcoin за считанные минуты.