Как принимать к оплате биткоин используя API Blockchain

blockchainapibitcoinaccepted
blockchainapibitcoinaccepted

Прием платежей в биткоинах становится популярней и востребованней, а значит уважающий себя интернет-магазин должен иметь такую возможность.

По аналогии с известными методами оплаты, такими как PayPal, WebMoney, VISA и Mastercard, Klarna и прочие, есть разные методы приема оплаты в биткоинах на своем сайте. Один из удобнейших методов в случае с биткоином — использование API биржи Blockchain. Вам не нужно привязываться к конкретному языку или SDK, не нужно даже там регистрироваться как в обычных мерчантах (которые, к тому же, становятся все привередливее).

Все что вам необходимо: иметь кошелек для приема биткоинов (или несколько, если будет угодно) и некоторое время на подключение довольно простых API в вашу систему. К тому же, клиент увидит не ваш родной кошелек, а временный кошелек биржи (что тоже приятно, не так ли?).

Прежде чем говорить непосредственно о коде (я буду в примерах использовать PHP, однако все это легко реализуется на JAVA, Python и т.д.), следует прояснить сам механизм приема оплат.

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

1. Вы запрашиваете у Blockchain временный кошелек, отправив ряд данных.
2. Blockchain возвращает свой временный кошелек для приема оплат вам.
3. Вы показываете этот кошелек клиенту, а также небольшую инструкцию что с этим делать.
4. Клиент оплачивает (переводит средства на кошелек).
5. Дальше следует подождать валидации платежа в системе Bitcoin.
6. В случае успешной валидации системой Blockchain будет вызван скрипт на вашем сайте (вы сами указываете какой) и переданы все данные транзакции.
7. После этого можно спокойно подтверждать факт оплаты уже внутри вашей системы.

Теперь о деталях реализации. Исходить будем из того, что у вас один кошелек (вариант с несколькими сводится в любом случае к выбору одного, а метод их хранения — любой, на ваше усмотрение).

Для получения временного кошелька следует отправить ряд данных:

1. URL скрипта, который будет вызван в случае успешного подтверждения транзакции. Следует заметить, что рекомендуется указывать некий параметр, или даже несколько для возможности идентификации платежа в текущей системе. Можно, конечно, просто указать идентификатор клиента в вашей системе и при получении подтверждения транзакции уже тогда вносить какие-либо данные в БД. Однако я (а также официальная документация) рекомендую использовать заранее созданный номер платежа и какую-либо проверочную фразу. Суммарно получится URL с параметрами как при обычной передаче GET запросом. Для системы Blockchain этот параметр носит название callback. Значение же следует закодировать как URL-строку.
2. Ваш кошелек, для приема платежа. Собственно, на него Blockchain и переведет полученные деньги. Параметр носит название address.
3. Последний из параметров носит название method и для создания временного кошелька всегда имеет значение create.

Эти данные отправляются скрипту Blockchain по адресу https://blockchain.info/api/receive, при этом каждый из параметров идет обычным GET параметром, а результат его выполнения обрабатывается вашей системой (результат будет в формате JSON). Обо всем этом говорится в документации Blockchain API .

Проще всего это рассмотреть на примере:
[snippet id=»290″]

Все, мы готовы принять оплату на свой кошелек, однако не способны зарегистрировать факт ее получения у нас в системе.

И пока мы не перешли к следующему шагу, внесу ряд замечаний:

1. Этот код — максимально прост. В реальной системе я бы советовал использовать грамотно продуманный и написанный класс, а также использовать базу данных для хранения подготовленных платежей (как минимум, важно хранить номер платежа, идентификатор пользователя в системе, проверочную фразу или ее составляющие).
2. Функции file_get_contents будет достаточно. Использование cURL или даже чистых сокетов — дело личное и зависит от реализации получения данных от сервиса.
3. Время на валидацию платежа может быть разным и весьма существенным (доходило до 6 часов у меня). А курс биткоина может поменяться. Так что тут есть два варианта: или хранить курс на момент создания платежа (что может сыграть как в плюс, так и в минус) или же запрашивать его по факту получения подтверждения транзакции. Я использую второй метод для спокойствия. Это если вы конечно будете конвертировать биткоин в какую-нибудь другую валюту. Как конвертировать и получать курс я расскажу в конце.

А теперь — получение подтверждения транзакции (деньги к тому моменту на ваш кошелек уже поступят).

Файл должен именоваться receive_payment.php и лежать в корне сайта, так как при запросе временного кошелька мы указали именно такое именование при формировании $callback_url.

[snippet id=»291″]

На этом второй шаг можно считать оконченным, так как детали работы с базой — на вашей совести, как в плане получения данных ранее созданного платежа, так и сохранения результатов получения транзакции.

Однако, как и в предыдущем шаге внесу ряд замечаний:

1. ВАЖНО! На самом деле скрипт для одного и того же платежа будет вызван не один раз, а по количеству его подтверждений на отдельных нодах. Отсюда следует, что вам следует проверять, а не было ли раньше подтверждения. Иначе получится накрутка.
2. Blockchain отдает гораздо больше параметров, чем я указал в скрипте:
transaction_hash — хэш транзакции (он уникален);
input_transaction_hash — хэш оригинальной транзакции (он уникален);
input_address — кошелек Blockchain, на который придет платеж;
destination_address — ваш кошелек, на который придет платеж;
confirmations — количество подтверждения нодами (рекомендуется принимать подтверждение платежа в случае, если этот параметр имеет значение большее или равное 6).
3. Параметр value отдает значения не в биткоинах, а в satoshi (1 Satoshi = 0.00000001 BTC). Поэтому следует приводить полученное значение к биткоинам (по указаной в примере скрипта формуле выше).
4. Параметры invoice_id и secret являются кастомными, то есть задаются вами еще на этапе получения кошелька от Blockchain. Соответственно их может быть больше, меньше, вообще не быть, а также они могут иметь любые названия.
5. Рекомендую хранить в истории платежей полученное значение в биткоинах, однако конвертировать его в другую валюту (доллары, например), которая используется у вас в системе. Если же ваша система работает только с биткоинами — ничего конвертировать не нужно.

На этом можно было бы завершить статью — получать биткоины вы теперь умеете, однако я не могу не затронуть вопрос конвертации биткоина в другие валюты по курсу биржи Blockchain. По этому вопросу существует отдельная документация: Exchange Rates API.

Этот сервис может ровно две вещи:
1. Дать сводку текущего курса. Вернет JSON. Как этим пользоваться на своем сайте — решать вам. Я приведу только примитивный пример:
[snippet id=»292″]

Полная распечатка результата есть в документации.
2. Конвертировать для вас из указанной валюты необходимое указанное количество денежных единиц в биткоины. Я б сказал — сервис для ленивых. Пример:
[snippet id=»293″]

Сервису надо отдать два параметра:
currency — название валюты (список валют есть в документации, а также его можно получить самостоятельно, используя код из предыдущего пункта, просто вызвав там print_r($exchange_data_obj);).
value — сколько меняем.

Все. Вернет только число биткоинов.

Также, этот сервис полезен в виде калькулятора как можно ближе к тому месту на сайте, где вы будете показывать кошелек Blockchain для приема денег (при условии, что вам нужна конвертация). Указанного в статье достаточно (более чем) для организации приема платежей в биткоинах у вас на сайте. Дальше все зависит от грамотно спроектированного кода и осторожности.

Moon Labs специально для ForkLog

Подписывайтесь на ForkLog в социальных сетях

Telegram (основной канал) Discord Instagram
Нашли ошибку в тексте? Выделите ее и нажмите CTRL+ENTER

Рассылки ForkLog: держите руку на пульсе биткоин-индустрии!

*Ежедневная рассылка — краткая сводка наиболее важных новостей предыдущего дня. Чтение занимает не больше двух минут. Выходит в рабочие дни в 06:00 (UTC)
*Еженедельная рассылка — объясняем, кто и как изменил индустрию за неделю. Идеально подходит для тех, кто не успевает за новостным потоком в течение дня. Выходит в пятницу в 16:00 (UTC).

Мы используем файлы cookie для улучшения качества работы.

Пользуясь сайтом, вы соглашаетесь с Политикой приватности.

OK