Как принимать платежи биткоинами на вашем сайте

Как принимать платежи биткоинами на вашем сайте

Пиринговая платежная система, использующая одноименную расчетную единицу и одноименный протокол передачи данных, «Биткоин», многим полюбилась из-за криптографических методов, обеспечивающих защиту системы. Еще одним очевидным плюсом является то, что вся информация о транзакциях между адресами системы доступна в открытом виде. В этой статье мы рассмотрим способ добавления «Биткоин» на ваш сайт в качестве системы оплаты.

 

 

1. Введение

2. Как получить ключ API?

3. Создание новых адресов для ваших клиентов

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

5. Выводы

Введение

Биткоины — довольно привлекательный метод оплаты для онлайн-предпринимателей, в основном из-за того, что комиссия при использовании этого метода крайне незначительна в сравнении с PayPal или кредитными картами. Соответственно, это позволяет получить более высокую прибыль и предлагать услуги клиентам во всем мире по доступным ценам. Более того, биткоины формально не облагаются налогом, поскольку не представляют собой денежную форму, выдаваемую правительством. Также среди достоинств системы «Биткоин» можно выделить отсутствие необходимости обращения к посредникам.

В этой статье мы попробуем добавить биткоины в качестве способа оплаты на сайте. Для принятия платежей мы будем использовать Blockchain.info Receive Payments API V2, так как он прост, безопасен и может быть реализован менее чем за 10 минут.

Blockchain.info’s API V2

Paychanges API V2 Blockchain.info является самым простым и быстрым способом начать принимать платежи биткоинами от кого угодно в любой точке мира с помощью простого HTTP-GET-запроса. Стоит отметить, что одним из основных препятствий, связанных с принятием платежей биткойнами, является необходимость создания уникального адреса биткойнов для каждого нового пользователя или счета. Эти сгенерированные адреса должны быть под контролем и безопасно храниться. API приема платежей отвечает за создание и мониторинг биткоин-адресов. При получении платежей API позволяет уведомить сервер с помощью простой процедуры обратного вызова.

Как получить ключ API?

Чтобы использовать API Blockchain.info, вы должны заполнить форму заявки по адресу:

https://api.blockchain.info/v2/apikey/request/

Обратите внимание, что этот ключ API предназначен только для получения платежей. Существует стандартный API кошелька, который доступен в Python, Java, .NET (C #), Ruby, PHP и Node и может использоваться для отправки и получения платежей. Однако он отличается от Receive Payments V2 API тем, что не подходит для генерации разных адресов для разных пользователей.

На рисунке ниже показана форма заявки на получение Receive Payments V2 API. Вам нужно будет ввести свое имя, адрес электронной почты, URL-адрес сайта, на котором вы будете внедрять API, а также описание товаров, которые вы продаете, или услуг, которые предлагаете на своем веб-сайте. В большинстве случаев заявка рассматривается в течение 2-3 рабочих дней.

Рисунок 1. Форма заявки на получение Receive Payments V2 API

Получение расширенного публичного ключа (Extended Public Key)

Чтобы иметь возможность получать платежи, вам потребуется учетная запись BIP32. Самый простой способ начать прием биткоинов — создать кошелек blockchain.info по адресу:

https://blockchain.info/wallet/#/signup

Вам нужно создать новую учетную запись, которая будет использоваться исключительно для получения транзакций, поддерживаемых API. При вызове API нужно использовать ключ xPub, который можно найти в «Настройки-> Учетные записи и адреса -> Дополнительные параметры -> Показать код xPub».

Рисунок 2. Получение ключа xPub

Создание новых адресов для ваших клиентов

Для каждого клиента у нас будет свой уникальный адрес, на который он будет отправлять платежи. При получении денег на любой из таких адресов вам будет отправлено HTTP-уведомление. Обратите внимание, что каждый вызов, сделанный на сервере, приведет к увеличению параметра index, это делается для того, чтобы убедиться, что один и тот же адрес не назначен более чем одному клиенту. Тем не менее все средства, отправленные на любой из созданных адресов, будут добавлены в один и тот же кошелек.

https://api.blockchain.info/v2/receive?xpub=$xpub&callback=$callback_url&key=$key

Следует учесть, что существует программное ограничение — кошелек не сканирует более 20 неиспользуемых адресов. Таким образом, API будет возвращать ошибку, если более 20 из ранее созданных адресов не были использованы. Если вы столкнулись с этой ошибкой, вам придется либо перейти на новый xPub (в том же блоке blockchain.info), либо начать получать платежи на один из ранее созданных неиспользуемых 20 адресов. 

Это можно опционально контролировать, добавляя gap_limit в качестве дополнительного параметра URL, что не приведет к увеличению числа биткоин-адресов, которые могут отслеживаться серверами Blockahin.info. Добавление параметра gap_limit изменяет максимально допустимый интервал, после которого API больше не будет генерировать новые адреса.

https://api.blockchain.info/v2/receive?xpub=$xpub&callback=$callback_url&key=$key&gap_limit=$gap_limit

Ниже рассмотрим параметры, используемые в приведенном URL:

  • xpub: ваш xPub (пункт назначения, куда будут отправляться платежи ваших клиентов).
  • callback_url: это URL-адрес обратной связи, на который будут приходить уведомления при получении платежа.
  • key: ваш ключ API-интерфейса получения платежей, который вы получите после того, как приложение будет успешно принято.
  • gap_limit: необязательный параметр, который определяет количество неиспользуемых адресов биткоинов, разрешенных до того, как будет возвращена ошибка.

С помощью xPub создаем неиспользуемый биткойн-адрес:

curl https://api.blockchain.info/v2/receive?xpub=xpub6CWiJoiwxPQni3DFbrQNHWq8...

Теперь пусть ваши клиенты отправляют средства по адресу, указанному в ответе:

RESPONSE: 200 OK, APPLICATION/JSON

{"address":"19jJyiC6DnKyKvPg38eBE8R6yCSXLLEjqw","index":23,"callback":"https://mystore.com?invoice_id=058921123"}

Ниже приведен пример реализации на PHP:

$secret = 'ZzsMLGKe162CfA5EcG6j';

$my_xpub = '{YOUR XPUB ADDRESS}';

$my_api_key = '{YOUR API KEY}';

$my_callback_url = 'INSERT YOUR CALLBACK URL HERE +/- that can include customer identification parameters such as ?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;

Реализация обратного вызова Blockchain.info

Всякий раз, когда вы получаете платеж, серверы blockchain.info будут проверять указанный вами обратный URL-адрес. URL обратного вызова ограничен длиной 255 символов.

  • transaction_hash: хэш платежа.
  • address: адрес назначения, который является частью учетной записи xPub.
  • confirmations: количество подтверждений транзакции.
  • value: значение полученного платежа в satoshis, что составляет 1/100 000 000 биткоина.
  • {custom parameter}: эта функция может использоваться для добавления параметров к вашему URL обратного вызова, например, invoice_id или customer_id помогут отслеживать, какие платежи были совершены клиентами.

Ниже приведен пример 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. Если ваш сервер возвращает какой-либо другой ответ или бездействует, сервер blockchain.info будет повторно отправлять запрос каждые 10 минут в течение одной недели. Домены, не возвращающие никакого ответа, могут быть полностью заблокированы службой.

Проверка промежутков между адресами

Теперь нам нужно будет проверить индекс разрыва между последним адресом, на который был успешно отправлен платеж, и последним сгенерированным адресом. Используем xPub следующим образом:

curl https://api.blockchain.info/v2/receive/checkgap?xpub=[yourxpubhere]]&key...

{“gap”:2}

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

Мы должны добавить уникальный параметр $secret в URL обратного вызова. Этот параметр будет проверен кодом проверки действительности для того, чтобы предотвратить ситуации, когда недобропорядочные пользователи попытаются пометить счет оплаченным.

В дополнение к биткоинам вы можете использовать свою местную валюту. Для этого нужно будет воспользоваться API обменного курса Blockchain.info.

Срок действия адресов

До тех пор, пока адрес возвращает в ответе ok, срок действия адреса не истечет и будет постоянно отслеживаться. В целом, система создана таким образом, что может отслеживать миллионы биткоин-адресов.

Выводы

В этой статье мы кратко рассмотрели один из возможных путей добавления платежей «Биткоин» на ваш сайт, узнали все плюсы, минусы и нюансы использования этой системы. Это поможет вам упростить процесс оплаты ваших услуг или товаров, предлагаемых на сайте. Стоит отметить, что мы работали с реализацией на PHP, но это можно сделать и в Python, и в Ruby.

Подписывайтесь на канал "Anti-Malware" в Telegram, чтобы первыми узнавать о новостях и эксклюзивных материалах по информационной безопасности.

RSS: Новые статьи на Anti-Malware.ru