Страница разработчиков | Alfacash — мгновенный обмен криптовалют

Делаем приём платежей криптовалютой своими руками

Время от времени замечаю вопросы о том, как принимать платежи Bitcoin на своём сайте без использования сторонних сервисов. Это достаточно просто, но надо учитывать, что есть подводные камни.

В этой статье я постараюсь максимально подробно, без акцента на каком-либо языке программирования, описать, как сделать приём платежей Bitcoin (а также, при желании — Litecoin, Dash, Bitcoin Cash, Steep, ONION и т.п.), начиная с разворачивания полной ноды и заканчивания проверкой поступления платежа.

Предварительные требования

Подразумевается, что вы имеете сайт, размещенный на VPS, к которой у вас есть root доступ, а также готовы тратить по $15+ на оплату сервера для кошелька.

Установка кошелька

Первым делом надо выделить отдельный сервер для размещения кошелька. Почему именно отдельный сервер? Отдельный сервер позволит снизить риски вывода всех ваших средств злоумышленником в случае взлома основного сайта. Ну и не стоит забывать, что для хранения blockchain требуется много места на диске (~150Gb места на диске и т. п. — подробности по ссылке).

Какие есть варианты дешевых серверов? Их масса, на мой взгляд самый адекватный — сервера от hetzner.de или chipcore.com. На chipcore.com, например, можно взять dedicated с диском на 500Gb (хватит на BTC и еще пару блокчейнов) всего за 990 рублей (примерно 17 баксов). Если знаете что-то дешевле — пишите в комментариях, очень интересно (думаю, не только мне).

После того, как вы осмысленно приняли решение о том, что хотите принимать криптовалюты на своём сайте и купили сервер (либо использовали имеющийся), надо установить bitcoin ноду.

На сервере должна быть установлена любая подходящая операционная система, самый простой вариант — Ubuntu 16.10 (да, на самом деле — это не лучший выбор, лучше установить 16.04 либо дождаться 18.04 и подождать еще пару месяцев для стабилизации). Как правило, заморачиваться с разбивкой диска нет смысла и можно смело использовать 2-4Gb на swap и остальное пускать на корневой раздел (/ или root).

После того, как сервер будет доступен, первое, что надо сделать — отключить авторизацию по паролям и настроить авторизацию по ssh ключам. Сделать это достатчно просто, есть хорошее описание от DigitalOcean.

После того, как сервер будет настроен, достаточно пары команд для того, чтобы запустить полноценную ноду кошелька

Устанавливаем bitcoind

Это всё, что требуется для установки ноды

Настройка bitcoind

Первым делом надо создать пользователя bitcoin :

и создать служебные директории:

Теперь осталась самая мелочь – корректно настроить ноду для приёма JSON RPC запросов.

Минимальный конфиг будет выглядеть так:

Его надо положить по адресу /etc/bitcoin/bitcoin.conf . И не забыть установить корректного владельца:

Важно: использование USERNAME и PASSWORD — deprecated метод и немного не безопасный. Более правильно использовать rpcauth, пример можете найти по ссылке.

Далее, достаточно настроить systemd сервис для запуска ноды (в том числе после перезагрузки).

Для этого можно просто скопировать юнит файл, размещенный по адресу в директорию /etc/systemd/system/ :

После чего запустить его и настроить автозапуск:

Теперь можно проверить рабостопособность ноды:

Если всё ок — в ответ придёт примерно такое сообщение:

Настройка сервера основного сайта

Осталось только настроить сервер, на котором расположен ваш сайт.

Наиболее безопасный и простой способ сделать доступным на бекенде API кошелька — прокинуть ssh туннель через сервис systemd (ну или любой другой init сервис). В случае использования systemd конфигурация сервиса максимально проста:

Эту конфигурацию нужно разместить по пути /etc/systemd/system/sshtunnel-btc.service .

После этого ставим сервис в автозапус и запускаем:

Для проверки можно постучаться на порт локалхоста и проверить, что всё ок:

Документация API

Со списком всех методов удобнее всего ознакомиться по ссылке.

Вызывать их очень просто даже через curl, пример запроса мы уже использовали ранее при получении информации о ноде методом getinfo.

Есть два варианта передачи параметров — массивом либо словарём.

Ниже можно увидеть примеры запроса на получение нового адреса с передачей параметров массивом и словарём:

Простой API клиент

Для использования удобно написать простую обертку с нужными нам функциями (либо использовать имеющуюся библиотеку для вашего языка). Пример для ruby:

После этого можно удобно пользоваться им в примерно таком виде:

Аналогиный пример для node.js:

Который можно использовать примерно следующим образом:

Для Python всё еще проще – официальный способ — использование:

Собственно, с PHP также нет никаких проблем (рекомендуется использовать http://jsonrpcphp.org/):

Хорошая подборка документации находится здесь.

Приведенные выше примеры являются немного доработанными версиями перечисленных по ссылке.

Интеграция с сайтом

Осталась достаточно простая часть — настроить обработку получения платежей и генерации адресов для пополнения.

Сам процесс интеграции приема платежей криптой выглядит примерно так:

  • При запросе на оплату от пользователя показываем ему адрес, куда переводить средства
  • В фоновом режиме (самый простой вариант — по cron) проверяем список транзакций кошелька и при поступлении новой — начисляем средства / меняем статус оплаты.

Для генерации адресов для приёма можно использовать несколько разных подходов – создание нового адреса для каждого депозита, либо использование постоянного адреса для аккаунта пользователя.

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

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

Для генерации адреса пополнения нужно вызвать метод getnewaddress, который в ответе вернёт новый адрес для пополнения. Для удобства можно передать аккаунт в качестве параметра (account), к которому будет привязан созданный адрес. Иногда это может быть удобно для просмотра транзакций по конкретному пользователю.

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

Еще хорошим вариантом будет получение информации через listtransactions о последних операциях и для них уже искать пользователя, который получает балансы. Какой вид реализации использовать — выбирать вам.

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

Для bitcoin рекомендуемое значение на данный момент — 6 подтверждений для небольших сумм. Здесь всё хорошо описано.

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

Заключение

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

Страница разработчиков

API — Интерфейс прикладного программирования.
Все запросы должны выполняться через HTTPS. Поддержка JSON-RPC. Чтобы использовать JSON-RPC, добавьте .json в конце запроса.

Запросы ОТПРАВКИ

Создать Заказ

Создайте обменный курс для определенного направления обмена. Вы можете указать, сколько вам нужно отправить или получить с помощью параметров deposit_amount или withdraw_amount.

Получить Текущий Курс Обмена

Этот метод возвращает текущий обменный курс между валютами, указанными в паре на данный момент. Обменный курс может быстро меняться в зависимости от рынка.

Подтвердить Адрес

Проверьте указанный валютный адрес/учетную запись с дополнительными параметрами, такими как destination_tag, message или payment_id.

Promo Code Validation

Запросы ПОЛУЧЕНИЯ

Поддерживаются как REST, так и JSON-RPC. Чтобы использовать JSON-RPC, добавьте .json в конце запроса.

Отменить Заказ

Получить Статус Заказа

Получить Лимиты Обменов

Список Поддерживаемых Валют

Список содержит имя, код валюты и статус доступности для внесения и снятия поддерживаемых валют по API.

ТОП криптовалютных сервисов, предоставляющих API

coinmag

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

1) Coinbase

Coinbase является криптовалютной биржей с очень мощным API, который имеет 6 основных функций: Wallet API, Coinbase Connect или Oauth2, Wallet Notifications, Merchant Checkouts, Coinbase Exchange API и Toshi.

2) Bitpay

API Bitay больше всего подходит разработчикам, которым необходимо создать интернет-магазин и использовать готовую систему оформления заказа для приёма Bitcoin.

3) Block.io

Этот сервис предлагает API для работы с кошельками Bitcoin, Litecoin и Dogecoin. Позволяет получать уведомления в реальном времени и создавать адреса для пересылки в любой пункт назначения по вашему выбору.

4) Kraken

Ещё одна криптовалютная биржа. API Kraken позволяет разработчикам получать информацию о активах, тикерах, сделках, ордерах, балансах и другой информации. API подходит для разработчиков, которые хотят построить конвертер валют или ценовой тикер. Пользователи получат доступ к богатому банку данных и статистике для многочисленных криптовалют.

5) CryptoAPIs

CryptoAPIs разработан на протоколах REST и JSON API для взаимодействия с блокчейнами. Этот API позволяет создавать децентрализованный распределенный рынок хранения данных в облаке.

6) Global Bitcoin Price Index (GBX API)

GBX API построен по BitcoinAverage.com, одном из первых индексов цен в криптовалютной и блокчейн-индустрии. Этот API не имеет интеграции с кошельками и поддержки транзакций. Использование бесплатно до 5000 ежемесячный запрос.

Тем не менее, есть некоторые платные функции, включающие в себя 1-секундные обновления курсов для более чем 165 валют. Есть также доступ к историческим данным начиная с 2010 года. Кроме того, API поддерживает форматы JSON и CSV.

7) CoinMarketCap

Это популярный сервис для отслеживания текущей рыночной капитализации, цены за единицу, недавнего объема, циркулирующего предложения и ежедневных колебаний более чем для 1600 различных криптовалют. API предлагает простое и надежное подключение, не имеет интеграции с кошельками и не поддерживает транзакции.

8) CoinCap

API CoinCap предлагает данные по ценообразованию и рыночной активности в режиме реального времени для более чем 1000 криптовалют. Он собирает информацию с множества бирж для получения прозрачных и точных данных о цене и доступности активов. Составляет прямую конкуренцию для Coinmarketcap.

9) Bitcointy

Bitcointy API предоставляет среднее значение цены биткоина, основанной на данных из нескольких источников. API также поддерживает такие фиатные валюты как EUR, GBP, CAD, JPY и CNY. Кроме того, API является бесплатным с неограниченным количеством запросов. Некоторые из дополнительных функций API — это четкое обновление данных, прямая конвертация определенного количества биткоинов в любую валюту и возможность получения курсов конвертации для всех источников или из одного источника.

Источник https://habr.com/ru/post/350430/

Источник https://www.alfa.cash/ru/developers

Источник https://happycoin.club/top-kriptovalyutnyih-servisov-predostavlyayushhih-api/

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

span.hidden-link { color: #DCDCDC; /*-цвет ссылки-*/ text-decoration: underline; /*-подчеркивание-*/ cursor: pointer; /*-указатель в виде пальца-*/ }