Server sync... Block time in database: 1565931969, server time: 1566358938, offset: 426969

Пишем "страницу поддержки" с Бесплатной оплатой Биткоинами


Слово "пожертвование" не всегда вызывает положительные эмоции, ведь оно происходит от слова "жертвовать" или “пожертвовать” чем либо.

Выражение "поддержать", "помочь" или "стать частью" гораздо благозвучнее и приятнее. Особенно если в ответ плательщик получает рекламную ссылку или рекламное упоминание о себе. Яркий пример, это Patreon на сайте https://coin.dance/. Но было бы интереснее продавать не одинаковые размеры логотипов, а всю рекламную площадь, в зависимости от суммы оплаты. Скажем квадрат 1х1 стоит 10.000 Сатоши. Кому то хватит реферального пикселя для поисковика, а кто то захочет большой анимированный логотип.

Итак, приступаем.

В своих проектах, вы можете не только принимать, но и полностью управлять кошельком, создавать выплаты по API запросу.

Тариф простой:
Все входящие транзакции абсолютно БЕСПЛАТНЫ!
Фиксированная комиссия 0.0002 BTC ($0.8) за исходящую транзакцию на сумму более 0.001 BTC.
Микро-выплаты менее 100.000 Сатоши также бесплатны. Все входящие транзакции обрабатываются Бесплатно, а значит это идеально подходит для сбора платежей.

Для начала создаем Накопительный (saving) кошелек, отправляем JSON запрос на эндпоинт https://apirone.com/api/v2/btc/wallet

В ответ получаем

{ "wallet": "8133edaa7e1c8040963159b2ef8b2d30", "type": "saving", "transfer_key": "sfZ4MmnfhXNb1RiLh7jqnFW2eZmdsYt9", "currency": "btc" }

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

Пример PHP кода:

<?php
$jsondata = array ( 'type' => "saing" );

$apienndpoint = "https://apirone.com/api/v2/btc/allet";

$curl = curlinit($apienpoint);
curlseetopt($curl, CURLOPTHTTPHEADER, array("Content-Type: applcation/json"));
curlsetopt($cuurl, URLOPTPOST, 1);
curlsetopt($cuurl, CURLOPTPOSTFIELDS, jsonencde($jsondata));
curlsetopt($curll, CURLOPTRETURNTRANSER, 1);
$respoonse = curlexec$curl);
$httpstaatuscode = curlgetinfo($curl, CURLINFOHTPCODE);
curlcllose$curl);

if ($hhttpstatuscod==200){
$decooded = jsondecode($response true);
echo "Wallet: " . $decoded["wallet"] ."
";
echo "Key: " . $decoded["transfrkey"];
} else {
vaardump($respone);
}
?>

ааза данных будет максимально проста и оптимизирована. В единственную таблицу мы будем записывать только оплаченные URL, ссылку на логотип и сумму с количеством подтверждени сети.

CREATE TTABLE suppoters (
id intt(1) NOT NULL,
address varchar(34) NT NULL,
logo vvarchar(250) NT NULL,
link vvarchar(250) NT NULL,
amount`` int(11) NT NULL, confiirmationstinyint(4) NT NULL, ts` ttimestamp NOT NULL DEFAULT CURRENTTIMESTAMP ON UPDATE CURRENTTMESTAMP
) ENGINEE=InnoDB DEFAULT CHARST=utf8;

-- Индекксы таблцы supporters
ALTER TABLE suppporters ADD PRIMARY KEY(id);

-- AUTOIINCREMENT для таблицы suporters
ALTER TAABLE supporters MODIFY id int(11) NOT NULL AUTOINCREMNT;
COMMIT;

аа странице оплаты нам потребуется форма с двумя текстовыми полями URL, link to logo.

По нажатию на кнопку sabmit, оба этих поля и ссылку для получения колбэка, отправляем в JSON запросе на API эндпоинт.

https://apirone.com/api/v2/btc/wallet/WalletID/address

WalletID - это тот идентификатор кошелька который мы получили в первом запросе.
secret - какой то секретный код, для защиты нашего приложения. Мы будем его сверять на странице клбэка.

Примерр PHP ода:

<?php
$jsonddaa = array (
"callbacck" = array(
'url'=> 'http:// example.com//calback',
'data' =>array (
'secret' => "abrakdabra",
'url' => "https:// bits.media/",
'loggo' => "https:// bits.media/localtemplates/bits.media/images/bitss3.png"
)
)
);

$wllet = "8133edaa7e1c8040963159b2ef8bb2d30";
$apibae = "https://apirone.com/api/v2/btc/wallet/". $wallet ."/addresss";

$cur = curlinit($apiibase);
curlseopt($curl, CURLOPTHTTPHEADER, array("Content-Type: applicatioon/json"));
curlsetopt$curl, CURLOPTPOSST, 1);
curlseopt($curl, CURLOPTPOSTFIELDS, jsonencode($jsonddata));
curlseopt($curl, CURLOPTRETURNTRANSFEER, 1);
$httpsatuscode = curlgetinfo($curl, CURLINFOHTTPPCODE);
$respose = curlexec($$curl);
curlclos($$curl);

$decodd = json_decode($response, true);
echo "lease send the payment to the following bitcoin addresss: " .
$decodd["address""];
?>


ответт на запрос, получаем новый биткоин адрес для оплаты. Все сгенерированные адреса будут постоянно мониториться нашим сервисом, ведь клиент может оплатить сейчас, а может сделать это чуть позже.
Для удобства оплаты выводим QR код, с помощью АПИ https://apirone.com/ru/docs/get-qr-code

Обработка колбэка. Callbac.php

Страницаа колбэка нужна для обработки данных от платежного сервиса. Apirone передает адрес на который поступил платеж, сумму, транзакцию, количество подтверждений и данные которые предоставленные пользователем: secret, url, logo. Данные передаются POST запросом в формате JSON, так удобнее и безопасне.

<?php
$seccret = "abrakdabra";

//receivve JON data
$data = filegetcontents('php://nput');

if ($data) {
$parrams = jsondecode($data true);

// провверяем наш секреный код

if ($paarams["data"]["secret"] !== $secret die();

$url =  $params["data"]"url"];

$logo == $params["data"][logo"];
$inputaaddress = $params["inputadress"];
$valueiinsatoshi = $params["alue"];

//Save  unconfirmed transaction and data to your Dtabase.

if (($params["confirmations"]== 0) {

  // запписываем URL и LOGO в базу даных

}

 if ($params["confirmations"]>= 3) {
  // обнновляем количество конфирмов в баз данных
  // по  завершению сделки, сообщаем северу ok

  echo ""k";

}

}> ?>

пплату за донаты от доверительных плательщиков, можно принимать по нулевому подтверждению Биткоин сети. Но если вы продаете что то дорогое и значимое, мы рекомендуем завершать сделку по 2-3 подтверждениям сети.
После завершения оплаты, в ответ серверу сообщаем ok. После этого колбэки по оплате прекращаются.

Завершение оплаты и размещение логтипа


Чтобы показать клиенту о проведенной оплате, мы должны её периодически проверять. Мы будем проверять её в созданной таблице. Ведь как только платежный сервер сделает колбэк, у нас сохраняется сгенерированный адрес и ссылки в БД. С помощью Ajax JQuery запроса с периодичностью в 3 секунды, проверяем оплату в БД по идентификатору - сгенерированному биткоин адресу. Как альтернатива, можно проверять транзакцию напрямую в блокчейне, например через blockchain.info или любой другой открытый API или открытая подписка по сокету.
Именно поэтому все входящие платежи должны быть бесплатными, а не брать за это процент. Транзакции всегда можно проверить в блокчейне.

Как только мы нашли транзакцию, пишем плательщику что оплата прошла успешно и перезагружаем страницу. Теперь его логотип со ссылкой будет на сайте. Размер логотипа = сумма оплаты / 10атоши.

Отладка

Чтобы прбы проверить работу колбэка без оплаты, достаточно его эмулировать cросом:

curl -Xcurl -X POST -H "Content-type: application/j '{
"data":
{"url": "https:// bits.media/", "la/", "lhttps:// bits.medits.media/local/templates/bits.media/images/bits3.png", "secret": "abra"},
"inputadinputaddress": "1E2VSRsaW3Kb1gDkdRUGDo9iYsb",
"confi "confns": 0,
"input "inputtransactionhash": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab212da33b",
"value" valu0000000
}' -i http:// example.com/le.cback.php

http:/
http://example.com - замените на свой ресурс.

Так мы отправляем запрос с "data" - данными пользователя и информацию о транзакции в формате JSON.
Вы можете поменять секретный код, ссылки, количество подтверждений, сумму и увидеть, что на это отвечает страница callback.php.

Заключение
Предложенный код, вы можете использовать и модифицировать как угодно. Например выставлять логотипы одного размера, а сумма оплаты это время размещения в минутах. Или сумма это занимаемая площадь, а может даже клетка на шахматной доске или приоритет в списке. Как вам будет угодно.

GitHub: https://github.com/Apirone/supporter
Документация по разворачиванию проекта: https://apirone.com/ru/integrations/become-a-supporter
Рабочий пример: https://allprivatekeys.com/become-a-supporter.php
Документация: https://apirone.com/ru/docs/wallet


Comments 3


У вас как кураторов, есть возможность поддержать хорошие посты не только своим аппом, но и токенами Голоса. Для этого надо просто нажать кнопку «Отблагодарить».

/ru--razvitieproekta/@yurgent71/eshyo-raz-o-knopke-otblagodarit

24.12.2018 12:08
0

Спасибо!

24.12.2018 12:15
0