[DEV: PHP] Создание и обработка счета на оплату в криптовалюте

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

Пример выставления счета.
Пример выставления счета.

Ниже перечислены параметры, необходимых для создания такого счета.

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

Сумма счета указывается в поле amount, при этом за единицу измерения берутся наименьшие дробные единицы криптовалюты, т.е., к примеру, для Биткоина — сатоши. Сurrency - сокращенное обозначение криптовалюты, например, btc, tbtc (testnet) , ltc, doge, tron и др.

В user-data вы можете передать название вашего магазина, ссылку на него, стоимость товара или услуги. Важно знать — мы не конвертируем amount в массиве user-data, вы можете считать конвертацию из своих источников или указывать в поле currency любую, даже вымышленную игровую валюту.

<?php $AccountID = "apr-e729d9982f079fa86b10a0e3aa6ff37b"; $price_in_usd = 140; // getting price in BTC $ticker = file_get_contents("https://apirone.com/api/v2/ticker?currency=btc"); $ticker = json_decode($ticker,true); $price_in_btc = round($price_in_usd / $ticker["usd"], 8) * 100000000; $payload = '{ "amount": '. $price_in_btc .', "currency": "btc", "lifetime": 3600, "callback_url": "https://shop.spacex.com/handler.php", "user-data": { "merchant": "Space X flight", "url": "https://shop.spacex.com/collections/mens/products/mens-bomber-jacket", "price": { "currency": "LamboCoins", "amount": '. $price_in_usd .' }}, "linkback": "https://shop.spacex.com" }'; $api_base = "https://apirone.com/api/v2/accounts/" . $AccountID . "/invoices"; $ch = curl_init( $api_base ); # Setup request to send json via POST curl_setopt( $ch, CURLOPT_POSTFIELDS, $payload ); curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); # Return response instead of printing. curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); # Send request. $result = curl_exec($ch); curl_close($ch); # Print response. // echo "<pre>$result</pre>"; $invoice = json_decode($result,true); echo '<a href="https://apirone.com/invoice?id='. $invoice["invoice"] .'" target="blank">Link to invoice '. $invoice["invoice"] .'</a>'; ?>

Обработка колбэка

При оплате счета на указанный адрес передается колбэк, в запросе это параметр callback_url. При этом статусы колбэка по счету отличаются от обычной обработки платежей. Статусы бывают следующие:

  • created — счет создан
  • paid — оплачен
  • partpaid — частично оплачен, т.е. подтвердился платеж меньше и счет завершился по таймеру
  • overpaid — переплата
  • completed — завершен (перевод подтвержден в сети блокчейн)
  • expired — счет просрочен без оплаты, т.е. в течение срока, выставленного по таймеру, оплата не произведена.

Также вы можете запрашивать статус счета самостоятельно https://apirone. com/api/v2/invoices/KDDBhhSTYEbKOW83

Этих параметров достаточно для полноценного выставления счета на оплату в криптовалюте и отслеживания его состояния.

22
1 комментарий

В данной статье Php пример есть только для создания invoice. Было бы неплохо и на обработку Callback.