Как подключить оплату BIP на сайт
SergeyИтак, у вас есть сайт и вы хотите подключить оплату за товары или сервисы за BIP. Как это сделать?
Алгоритм выглядит в общих чертах так:
- Создать кошелек для приема платежей (или создавать кошельки "на лету" для каждого нового заказа).
- Подключиться к блокчейну для прослушивания транзакций на этот кошелек (или кошельки)
- При получении транзакции определить монету и сумму
- Если получена кастомная монета — при помощи Minter API получить ее стоимость в BIP
- Через стороннее API получить текущий курс BIP по отношению к фиату (USD, EUR, RUB, etc.)
- Высчитать фиатный эквивалент монет, которые вы получили
- Если все сходится и вы получили именно ту сумму, которую ожидали — отправить клиенту товар (начислить ему бонусы, предоставить ссылку на закрытый контент и т.д.)
Звучит достаточно сложно на первый взгляд? Возможно вы захотите часть этой рутины делегировать сервисам.
Вариант №1
Использовать сервис, который возьмет на себя прослушивание блокчейна и через API будет отправлять вам события о поступлении платежа. С вашей стороны вам нужно будет лишь слушать эти события и строить свою привычную бизнес логику по отправке товаров, уведомлении клиентов по почте и так далее.
В Minter существует как минимум два сервиса, которые решают эту задачу:
Оба сервиса работают по схожему алгоритму. Рассмотрим их по-порядку.
MPay
Вся документация по API находится по адресу https://mpay.ms/docs/
- Чтобы начать принимать платежи, зарегистрируйте аккаунт и добавьте ваш кошелек проекта в панели управления.
- После этого в панели управления на странице API Keys создайте новый API ключ. Для ключа можно определить монеты, которые вы будете принимать и установить вебхук, который будет вызывать при поступлении платежей на ваш адрес. Вебхук — это адрес на вашем сервере, который будет обрабатывать входящие платежи. Пример данных, которые будут приходить на вебхук есть на странице документации.
- Для того чтобы сформировать новый платеж с вашего сайта или сервиса, отправьте запрос на адрес
https://mpay.ms/api/payment/new
Все параметры запроса подробно описаны на странице документации проекта.
4. Чтобы получить информацию о совершенных платежах, воспользуйтесь отдельным адресом. Это удобно в случае, если вы хотите вывести список совершенных покупок в личном кабинете клиента в вашем сервисе:
https://mpay.ms/api/payment/get
Документация о получении информации доступна здесь.
4. Все запросы к API требуют установки параметра Authorization в заголовке (headers). В качестве авторизации используется ваш API ключ, например:
Authorization: 1:41coU9shJPpDMq2wpSnwryI8y7KlBZoJ
Комиссия
Стандартная комиссия сервиса 0.5% Для снижения комиссии можно купить монету проекта. В зависимости от количества купленных монет:
- 100 MPAY — комиссия составит 0,375%
- 500 MPAY — 0.25%
- 1000 MPAY - 0.125%
- 2500 MPAY - 0%
Итого, чтобы убрать комиссию, необходимо купить монет примерно на 3500 BIP
Плюсы
- Комиссия сервиса при определенных условиях составляет 0%
- Есть готовые модули для популярных CMS: WordPress (WooCommerce), PrestaShop, Drupal (Commerce)
Минусы
- Отсутствует двухфакторная авторизация
PayMnt
Вся документация по сервису находится по адресу https://paymnt.io/ (внизу страницы нажмите на ссылку All API advantages / Все возможности по API)
- Чтобы начать принимать платежи, зарегистрируйте адрес вашего проекта в сервисе. Для этого достаточно отправить нулевую транзакцию в любой монете с прикрепленным в сообщении PIN кодом (генерируется системой при регистрации).
- После этого добавьте ваш проект на отдельной странице. В процессе вы можете установить вебхук, указать монету и кастомизировать виджет, добавив логотип и настроив цветовую схему.
- После добавления проекта вы можете скопировать HTML код для вставки виджета на ваш сайт или скачать готовый модуль для CMS.
<iframe src="https://paymnt.io/p/[Shop_ID]/[OrderID]/[Amount]/[Hash]">Your browser does not support iframes!</iframe>
Если вам не нужен Iframe — можете скопировать ссылку на оплату:
<a href="https://paymnt.io/p/[Shop_ID]/[OrderID]/[Amount]/[Hash]"> Pay </a>
Где:
- Shop_ID — ID вашего проекта
- Order_ID — ID заказа
- Amount — сумма платежа по заказу
- Hash — хэш, который формируется из строки
md5($privkeyShop.";".$orderID.";".$amnt);
Комиссия
Сервис предлагает гибкую комиссию. До 100 заказов в месяц — 0%, более 100 заказов — 0.9%
Плюсы
- Есть готовые модули для популярных CMS: Joomla (JoomShopping), OpenCart, PrestaShop, Wordpress (WooCommerce), Drupal (Commerce)
- Доступна простая статистика по заказам в панели управления (всего, оплачено, ждут оплаты, отмененные, новые за сутки, оборот за сутки)
Минусы
- Можно установить только одну монету для приема платежей
Вариант №2
Вы строите все с нуля и хотите полностью контролировать весь процесс.
Для этого вам потребуется: API Минтера, скрипты для прослушивания блокчейна, логика для проверки платежей и конвертации кастомных монет в BIP / фиат.
Minter API
Для подключения к API Минтера вы можете:
- Воспользоваться API официального эксплорера
- Воспользоваться публичной API нодой, например https://api.minter.one. Сервис не дает никаких гарантий, предоставляется как есть.
- Воспользоваться коммерческими сервисами, которые предоставляют доступ к API Минтера, например Mscan.dev или Funfasy.dev. Оба сервиса имеют бесплатный тариф, который позволяет получить до 100 тысяч запросов в сутки без оплаты. Если вам нужно больше — сравнивайте тарифы указанных сервисов и выбирайте тот, который вам ближе.
- Запустить свою частную ноду.
Скрипты
Для прослушивания блокчейна есть два варианта:
- Подключиться к API через сокет и слушать события в режиме реального времени. Описываю для галочки, вариант ненадежный и строить на нем прием платежей я бы не рекомендовал. Соединение с сокетом может разорваться в любой момент, его в любом случае нужно страховать.
- Делать вызовы к API через HTTP по таймауту, чтобы перебирать блоки по очереди. Надежно, есть возможность начать перебор с нужного блока, есть возможность перезапустить перебор в случае форс-мажора, есть возможность запустить несколько дублирующих парсеров с использованием разных нод для подстраховки друг друга. Рекомендую именно этот вариант.
Общий алгоритм работы скрипта для перебора блоков выглядит так:
- Раз в пять секунд (можно чаще, но не реже) делаем запрос к API, забираем оттуда последний блок.
- Перебираем все транзакции в блоке
- Если tx.type === 01 (Send) и tx.data.to === ваш кошелек — передаем транзакцию в обработку дальше, остальные отбрасываем
- Достаем из нужных транзакций tx.data.value (сумму), tx.data.coin (монету), tx.from (адрес отправителя) и tx.payload (прикрепленное сообщение)
- Обрабатываем транзакцию: если клиент должен отправить в сообщении Order_ID — ищем заказ по ID из транзакции, проверяем сумму, монету, отправителя
- Пересчитываем сумму в BIP / фиат
- Если все окей — пишем в базу, отправляем клиенту товар, отправляем письмо и так далее.
Конкретную реализацию рассматривать не будем, она во многом зависит от языка программирования, который вы используете в своем проекте и ваших требований к приему платежей. Ссылки на SDK и подробную документацию для разработчиков прикреплены в конце статьи.
Получение актуальных курсов кастомных монет
Для этого в API Минтера есть эндпоинт estimate_coin_sell, который принимает в качестве параметров:
- coin_to_sell — какую монету продаем (полученная из транзакции монета)
- coin_to_buy — какую монету покупаем (BIP)
- value_to_sell — сколько продаем
В результате такой виртуальной продажи вы получите эквивалент кастомной монеты в BIP, не продавая саму монету.
Для реальной продажи монеты нужно сформировать транзакцию с типом 03 (Sell All) и отправить ее в блокчейн вручную или при помощи SDK.
Получение актуальных курсов BIP/USD
В зависимости от того, на какой курс вы ориентируетесь, можно брать курсы BIP их разных источников:
- Официальный курс BIP — Bip.dev
- Курс обменного сервиса — 1001 BTC
- Курс обменного сервиса — Cash-x-Cash
Полезные ссылки для разработчиков
- Minter Node API — документация по API ноды
- Minter JS SDK — JavaScript SDK для работы с Minter API
- Minter PHP SDK — PHP SDK для работы с Minter API
- Minter GO SDK — GO SDK для работы с Minter API
- Minter CPP SDK — C++ SDK для работы с Minter API
- Minter Kotlin SDK — Kotlin SDK для работы с Minter API
- Minter Python SDK — Python SDK длф работы с Minter API
- Minter Explorer API — API официального эксплорера