ОКО ПЛАНЕТЫ > Финансовые новости > Инструкция: Как добавить оплату биткоинами на сайте
Инструкция: Как добавить оплату биткоинами на сайте23-07-2017, 10:37. Разместил: Редакция ОКО ПЛАНЕТЫ |
Команда рекламной сети Oblivki.biz о выборе сервиса и нюансах приёма платежей в криптовалюте.
Биткоин привлекает всё больше внимания, а технологии блокчейн прогнозируют светлое будущее. Наша компания, например, решила предоставить возможность клиентам покупать трафик за криптовалюту и подключила способ оплаты при помощи биткоина. У текущей моды на криптовалюты масса обоснованных плюсов:
Существует множество сервисов, позволяющих принимать биткоины и другие валюты. Лишь малая часть из них:
Мы подключили оплату через API сервиса Bitaps, потому что через него это оказалось сделать проще. Если у Blockchain требуется писать заявку и ждать одобрения три банковских дня, то здесь изначально можно подключиться самостоятельно. В API найдется всё необходимое для этого. Прием платежейПри формировании счета для клиента надо сгенерировать и мониторить уникальный адрес (временный кошелек) для каждого платежа. Как только платёж подтверждён сетью, сервер API перечисляет биткоины с временного кошелька на указанный кошелек (свой или корпоративный, куда вам удобно будет получать средства). У каждого сервиса свой API, но выглядит схема примерно одинаково:
В итоге получается сгенерированный адрес для приёма оплаты, код платежа и счёт. Код вы используете в базе данных для записи, сортировки или поиска информации о платежах. Счёт может быть отправлен покупателю или использован для платёжной формы. После зачисления средств по указанному счету происходит подтверждение в сети Bitcoin. На каждое подтверждение отправляется обращение к callback и передаются параметры, чтобы опознать платеж. При получении последнего подтверждения надо выполнить заказ или услугу клиента. Сумма передается в сатоши — самой маленькой части биткоина. Для конвертации используйте методы получения курсов валют. Курс часто меняется, поэтому получите его во время зачисления и сделайте конвертацию. Пример на языке PHP// Пример создания платежа
// необходимое вам кол-во подтверждений
define('CONFIRMATIONS', 3);
// уровень комиссии, чем выше, тем быстрее зачисление
define('FEE_LEVEL', 'low');
// адрес вашей логики приема callback'ов
$callback = 'https://example.com/bitcoin-payment-callback';
$callback = urlencode($callback);
// формируем адрес для создания платежа
$requestUrl = 'https://bitaps.com/api/create/payment/';
$requestUrl .= 'YOU_BITCOIN_PAYMENT_ADDRESS/';
$requestUrl .= $callback;
$requestUrl .= '?confirmations=' . CONFIRMATIONS . '&fee_level='. FEE_LEVEL;
$data = file_get_contents($requestUrl);
$result = json_decode($data, true);
// если произошли какие-либо ошибки создания платежа
if (!$result || isset($result['error_code'])) {
throw new \Exception('Bitcoin payment creation error: ' . $data);
}
// если все OK, получим массив данных
[
// сгенерированный адрес для приёма оплаты
"address" => "14aT7ELki1pVWtryd5brMGqsFySWgjy8je",
// код платежа
"payment_code" => "PMTvvdRdFBPvY1KrDeRxSuwr4nDcMVBenbX2rB2zRYHBHbGRYK5Lu",
// счет
"invoice" => "invNfFnca2Vg49dDg77exiQmqrVKCMBWsBBrB95HNZGbAwqQpNY2b"
]
// После оплаты сервис посылает подтверждения на ваш callback
/*
* В каждом колбэке отправляются переменные в POST запросе:
* tx_hash={transaction hash}
* address={address}
* invoice={invoice}
* code={payment code}
* amount={amount} # Satoshi
* confirmations={confirmations}
* payout_tx_hash={transaction hash} # payout transaction hash
* payout_miner_fee={amount}
* payout_service_fee={amount}
*/
// Пример обработки подтверждений ($data = $_POST)
// будем ждать последнего подтверждения для зачисления денег
if (intval(ArrayHelper::getValue($data, 'confirmations')) !== CONFIRMATIONS) {
return;
}
// получаем сумму
$bcAmount = ArrayHelper::getValue($data, 'amount');
if (!$bcAmount) {
throw new \Exception('bcAmount is not found!');
}
// сумма в Сатошах, нам нужна в BTC
$bcAmount = ($bcAmount / 100000000);
if ($bcAmount < 0) {
return;
}
// получаем курс на данный момент для конвертации в рубли
// чтобы зачислить клиенту в рублях
$exchangeRate = Bitcoin::getExchangeRate();
$rubAmount = $bcAmount * $exchangeRate;
// сохраняем информацию о платеже в БД
$invoiceBitcoin->bcAmount = $bcAmount;
$invoiceBitcoin->rubAmount = $rubAmount;
$invoiceBitcoin->save();
// логика зачисления денег в сервисе клиенту
$afterPayment = new AfterPayment();
Количество подтвержденийНеобходимое количество подтверждений зависит от модели риска, клиентов и сумм. Если вы доверяете клиентам, то принимайте платежи без подтверждений или с одним подтверждением. При небольших переводах трех подтверждений достаточно. Шесть подтверждений математически невозможно подделать, не имея 51% вычислительной мощности сети. Чем больше подтверждений необходимо, тем больше комиссия и время ожидания. В среднем платеж проходит 15-20 минут, а оплата для клиента будет выглядеть следующим образом:
Важные замечания
Вернуться назад |