Як додати функцію прийому оплати Bitcoin-ами на сайті

CryptoExplorer         Немає коментарів         Bitcoin PHP
150 переглядів
Bitcoin привертає все більше уваги, а технології блокчейн прогнозують світле майбутнє.

У поточній моді на криптовалюти є маса обґрунтованих плюсів:

  • Безпечні онлайн-платежі: тут відсутній фрод і чарджбек. Мережа влаштована так, що відправлений платіж повернути не можна, достовірність транзакції підтверджують користувачі по всьому світу, а кожна транзакція шифрується.
  • Вигідні комісії: вартість проведення платежу не перевищує 1%. І чим більша сума переказу - тим менші втрати.
  • Анонімність: кошти клієнтів не контролюють банки - ніхто не має права блокувати транзакцію або додати зайву комісію.
  • Платежі без обмежень: транзакції проводяться в необмежених обсягах, чого не дозволяють інші платіжні засоби.

Існує багато сервісів, які допомагають приймати Bitcoin і інші валюти. Лише мала частина з них:

  • Blockchain (ключ для роботи з API видається за заявкою).
  • Coinbase (необхідно заповнити заявку та дочекатися схвалення).
  • Bitaps (відкрите API).
  • Cryptonator.

Ми підключили оплату через API сервісу Bitaps, тому що через нього це виявилося зробити простіше. Якщо у Blockchain потрібно писати заявку і чекати схвалення три банківські дні, то тут спочатку можна підключитися самостійно. В API знайдеться все необхідне для цього.

Прийом платежів Bitcoin


При формуванні рахунку для клієнта треба згенерувати і моніторити унікальну адресу (тимчасовий гаманець) для кожного платежу. Як тільки платіж підтверджений мережею, сервер API перераховує Bitcoin-и з тимчасового гаманця на вказаний гаманець (свій або корпоративний, куди вам зручно буде отримувати кошти).

У кожного сервісу свій API, але виглядає схема приблизно однаково:

  • Згенеруйте платіж, звернувшись по спеціальному посиланню і передавши параметри.
  • Створіть Bitcoin-адресу продавця, на яку будуть пересилатися гроші.
  • Створіть посилання вашої системи (callback), яке буде викликатися при підтвердженні платежу.
  • Вкажіть кількість прийнятих підтверджень платежу в мережі Bitcoin (опціональне поле, за замовчуванням - 3).
  • Визначте рівень комісії мережі (опціональне поле, за замовчуванням - low). Чим він вищий, тим швидше відбудеться переказ.

У підсумку виходить згенерована адреса для прийому оплати, код платежу і рахунок. Код ви використовуєте в базі даних для запису, сортування або пошуку інформації про платежі. Рахунок може бути відправлений покупцеві або використаний для платіжної форми.

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

Для конвертації використовуйте методи отримання курсів валют. Курс часто змінюється, тому отримайте його під час зарахування і зробіть конвертацію.

Приклад на 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();
$eurAmount = $bcAmount * $exchangeRate;
 
// зберігаємо інформацію про платіж в БД
$invoiceBitcoin->bcAmount = $bcAmount;
$invoiceBitcoin->eurAmount = $eurAmount;
$invoiceBitcoin->save();
 
// логіка зарахування грошей в сервісі клієнтові
$afterPayment = new AfterPayment();
$afterPayment->addMoneyToUserByInvoice($invoiceBitcoin);

Кількість підтверджень


Необхідна кількість підтверджень залежить від моделі ризику, клієнтів і сум. Якщо ви довіряєте клієнтам, то приймайте платежі без підтверджень або з одним підтвердженням. При невеликих переказах трьох підтверджень досить.

Шість підтверджень математично неможливо підробити, не маючи 51% обчислювальної потужності мережі. Чим більше підтверджень необхідно, тим більша комісія і час очікування. В середньому платіж проходить 15-20 хвилин, а оплата для клієнта буде виглядати наступним чином:

  • Вибір товару або послуги.
  • Виставлення рахунку клієнтові (виведення на сторінці номеру гаманця і суми, необхідної для оплати).
  • Переказ коштів клієнтом.
  • Очікування трьох підтверджень і завершення замовлення або послуги (в нашому випадку це поповнення рахунку рекламного кабінету).

Важливі зауваження

Крім комісії сервісу прийому платежів, існує Bitcoin-комісія за переказ з тимчасового гаманця на вказаний вами. Про це ніде, на жаль, не написано, тому рекомендуємо не проводити дрібні платежі.

Курс Bitcoin, як і інших криптовалют, відчутно змінюється щосекунди. Рекомендуємо перераховувати курс і як можна частіше виводити Bitcoin в реальну валюту. Звичайно, це працює для тих випадків, якщо вам важливо працювати з реальною валютою, конвертуючи Bitcoin за курсом.

Не кожен блокчейн-сервіс дозволяє використовувати API для прийому платежів без підтвердження. Критерії прийому в той чи інший сервіс невідомі, тому подавайте заявки в декілька місць.
У кожному сервісі комісії на прийом платежів відрізняються. Вивчіть детально кожен, перш ніж вирішите підключитися.
Не виставляйте число обов'язкових підтверджень для виконання оплати вище шести. Це призведе до більшого часу очікування для клієнта і негативних відгуків. Для безпеки вистачить трьох.
При рівні комісії low переказ коштів займає тридцять хвилин. Якщо бажаєте заощадити покупцям кошти, то не збільшуйте рівень комісії.
0


Шановне товариство!
Якщо Ви виявили помилку, або "мертве" посилання, виділіть проблемний фрагмент мишкою та натисніть CTRL+ENTER.
У діалоговому вікні, що з'явилося, опишіть проблему та надішліть повідомлення Адміністрації ресурсу. Дякуємо!
Схожі публікації:
Додавання коментаря
Шановне товариство!
При додаванні коментарів на сайт Вам слід враховувати наступне: всі коментарі перевіряються Адміністрацією на предмет відсутності спаму. При виявленні ознак спаму, в залишеному Вами коментарі, сам коментар буде негайно видалений, а Ваша IP-адреса буде заблокована без попередження! Облікові записи користувачів, що розсилають спам, блокуються / видаляються без права подальшого відновлення.

Публікація коментарів, від незареєстрованих на сайті користувачів, відбувається після їх модераторської перевірки.

З повагою, Адміністрація сайту.

Ваше ім'я (обов'язково):

Ваш E-Mail :

Підтвердження коду безпеки :

Клацніть на зображення щоб оновити код, якщо він нерозбірливий

Введіть код (обов'язково):

Популярні матеріали
Опитування
В якій (географічно) частині України Ви постійно/здебільшого проживаєте?