<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Организация приёма платежей v1]]></title><description><![CDATA[<p dir="auto">На заре Биткоин 1.0, во время разработки платежных шлюзов для некоторых централизованных систем столкнулся с следующей проблемой - <em>отсутствие примечания к платежу</em>, в любой из биткоин подобных монет. И это была проблема, которая как известно решается методом выдачи каждому пользователю уникального адреса.</p>
<p dir="auto">В данном руководстве рассматривается метод приема платежей с примечанием к платежу (сообщением) в экосистеме SmartHoldem. Сервис использует 1 адрес, но для каждого пользователя генерируется уникальная строка.</p>
<p dir="auto">Для простоты понимания в качестве бэкенда используется язык PHP.</p>
<p dir="auto">В процессе участвуют: сервис (обменник) и пользователь (клиент).</p>
<h2>Клиент</h2>
<p dir="auto">Со стороны клиента некий сервис - обменник, генерирует для клиента исходные данные.</p>
<p dir="auto"><img src="/assets/uploads/files/1522740860688-service1-resized.jpg" alt="0_1522740861038_service1.jpg" class=" img-fluid img-markdown" /></p>
<ul>
<li>сумма к получению в меняемой монете (задаваемая клиентом)</li>
<li>расчетный результат к получению по текущему курсу STH &gt; COIN</li>
<li>адрес для отправки STH (для всех один)</li>
<li>уникальная строка сообщения (идентифицирует отправителя)</li>
</ul>
<p dir="auto">Здесь на стороне сервиса в backend генерируется уникальная строка для каждого пользователя и сохраняется в базу данных, к примеру таблица вида:<br />
<em>userid(int), msg(string)</em></p>
<pre><code>&lt;?php
$msg = substr(md5(uniqid(microtime(), 1)) . getmypid(), 1, 8);

// результат уникальная строка:  561559b2
</code></pre>
<p dir="auto">Клиент, зная исходные данные, отправляет соответствующую <strong>сумму</strong> с <strong>примечанием</strong> на указанный <strong>адрес</strong> с помощью своего кошелька.</p>
<p dir="auto"><img src="/assets/uploads/files/1522742749496-wallet_v1-resized.jpg" alt="0_1522742749392_wallet_v1.jpg" class=" img-fluid img-markdown" /></p>
<h2>Сервис</h2>
<p dir="auto">Теперь в работу вступает backend сервиса, обработчик транзакций. Для простоты понимания будем использовать выполнения скрипта по <strong>crontab</strong>.</p>
<p dir="auto">Создаем на стороне сервера php-файл, далее пропишем его на выполнение cron каждую минуту.</p>
<pre><code>&lt;?php
$addr = 'Sg13BhANeairfS3o3w8N9sKaFrsht2bt4V'; //адрес проверки транзакций
$limit  = 25; //лимит выдачи транзакций
$offset = 0; // смещение

//сортируем выдачу транзакций по timestamp с помощью orderBy
$url = 'http://your_node_ip:6100/api/transactions?recipientId='.$addr.'&amp;orderBy=timestamp&amp;offset=0'; 

//получаем данные и преобразуем в массив
$tx = json_decode(file_get_contents($url),true); 

/* 
если транзакций более лимита, 
смещаем offset указатель выдачи транзакций и получаем последние $limit транзакций, 
т.к. транзакций может быть сотни тысяч
*/
if ($tx['count'] &gt; $limit) {
    $offset = $tx['count'] - $limit; // расчет смещения
    $url = 'http://your_node_ip:6100/api/transactions?recipientId=Sg13BhANeairfS3o3w8N9sKaFrsht2bt4V&amp;orderBy=timestamp&amp;offset='.$offset;
    $tx = json_decode(file_get_contents($url),true);
}

// обрабатываем данные
for ($i = 0; $i &lt; count($tx['transactions']); $i++) {
print "&lt;br&gt;amount:".$tx['transactions'][$i]['amount'].
" timestamp:".$tx['transactions'][$i]['timestamp'].
" msg:".$tx['transactions'][$i]['vendorField'].
" senderId:".$tx['transactions'][$i]['senderId'].
" Txid:".$tx['transactions'][$i]['id'];

/*
здесь выполняем необходимые проверки и операции записи в базу данных, 
к примеру добавляем баланс

сохраняем в таблицу транзакций уникальные транзакции, 
которые и проверям при получении, 
к примеру txid, userid, timestamp, sum_sth, sum_coin
*/

/* 
помним, баланс выдается в сатоши, 
не забываем его преобразовать точными функциями
*/
$sumCOIN = bcdiv($tx['transactions'][$i]['amount'],100000000,8); 

$set['btc_sth'] = 1; //курс по отношению к STH
$sumBTC = bcdiv($sumCOIN, $set['btc_sth'], 8); //расчитываем курс монеты

}
</code></pre>
<p dir="auto">Вот и все, транзакция обработана, операция выполнена.</p>
<blockquote>
<p dir="auto"><strong>Новые операции</strong><br />
+BTC за STH<br />
1.28 BTC / 0.32000000 STH<br />
03.04.18 09:59</p>
</blockquote>
<hr />
<p dir="auto">пример не претендует на качество кода, он предназначен для базового понимания приема платежей.</p>
<p dir="auto"><em>Возможно в свою ноду интегрировать событийный скрипт с колбаками, к примеру считывать получение нового блока, затем находить транзакции предназначенные для вашего адреса, но это более сложный подход к простому приему транзакций, хотя и более элегантный.</em></p>
<p dir="auto">P.S. Событийный подход мы рассмотрим в следующих публикациях.</p>
<p dir="auto">P.P.S. Функция отправки сообщений будет доступна в версии кошелька 1.0 в ближайшие дни/неделю, с сотнями других дополнений и исправлений.</p>
]]></description><link>https://community.smartholdem.io/topic/298/организация-приёма-платежей-v1</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Jul 2026 21:17:36 GMT</lastBuildDate><atom:link href="https://community.smartholdem.io/topic/298.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 Apr 2018 08:01:23 GMT</pubDate><ttl>60</ttl></channel></rss>