Как подключить оплату BIP на сайт

Как подключить оплату BIP на сайт

Sergey

Итак, у вас есть сайт и вы хотите подключить оплату за товары или сервисы за BIP. Как это сделать?

Алгоритм выглядит в общих чертах так:

  1. Создать кошелек для приема платежей (или создавать кошельки "на лету" для каждого нового заказа).
  2. Подключиться к блокчейну для прослушивания транзакций на этот кошелек (или кошельки)
  3. При получении транзакции определить монету и сумму
  4. Если получена кастомная монета — при помощи Minter API получить ее стоимость в BIP
  5. Через стороннее API получить текущий курс BIP по отношению к фиату (USD, EUR, RUB, etc.)
  6. Высчитать фиатный эквивалент монет, которые вы получили
  7. Если все сходится и вы получили именно ту сумму, которую ожидали — отправить клиенту товар (начислить ему бонусы, предоставить ссылку на закрытый контент и т.д.)

Звучит достаточно сложно на первый взгляд? Возможно вы захотите часть этой рутины делегировать сервисам.

Вариант №1

Использовать сервис, который возьмет на себя прослушивание блокчейна и через API будет отправлять вам события о поступлении платежа. С вашей стороны вам нужно будет лишь слушать эти события и строить свою привычную бизнес логику по отправке товаров, уведомлении клиентов по почте и так далее.

В Minter существует как минимум два сервиса, которые решают эту задачу:

Оба сервиса работают по схожему алгоритму. Рассмотрим их по-порядку.

MPay

MPay

Вся документация по API находится по адресу https://mpay.ms/docs/

  1. Чтобы начать принимать платежи, зарегистрируйте аккаунт и добавьте ваш кошелек проекта в панели управления.
  2. После этого в панели управления на странице API Keys создайте новый API ключ. Для ключа можно определить монеты, которые вы будете принимать и установить вебхук, который будет вызывать при поступлении платежей на ваш адрес. Вебхук — это адрес на вашем сервере, который будет обрабатывать входящие платежи. Пример данных, которые будут приходить на вебхук есть на странице документации.
  3. Для того чтобы сформировать новый платеж с вашего сайта или сервиса, отправьте запрос на адрес
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

Плюсы

Минусы

  • Отсутствует двухфакторная авторизация
PayMnt

PayMnt

Вся документация по сервису находится по адресу https://paymnt.io/ (внизу страницы нажмите на ссылку All API advantages / Все возможности по API)

  1. Чтобы начать принимать платежи, зарегистрируйте адрес вашего проекта в сервисе. Для этого достаточно отправить нулевую транзакцию в любой монете с прикрепленным в сообщении PIN кодом (генерируется системой при регистрации).
  2. После этого добавьте ваш проект на отдельной странице. В процессе вы можете установить вебхук, указать монету и кастомизировать виджет, добавив логотип и настроив цветовую схему.
  3. После добавления проекта вы можете скопировать 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

Полезные ссылки для разработчиков

Report Page