IPN (Instant Payment Notification)

Оповещение об оплате

Процесс оплаты и подтверждения транзакции может занять от нескольких минут до нескольких часов. Наш сервис оповестит вас о подтверждении, методом отправки POST-запроса с данными на указанный вами адрес обработчика. Оповещение произойдет когда транзакция: появится в сети в mempool (только для исходящей = 0-е подтверждение), будет включена в блок (1-е подтверждение) и после ее 12-го подтверждения.

Структура данных

Данные в JSON-формате:
{
   etherapi.net: версия
   type: тип оповещения = (in-оплата / track-отслеживание / out-отправка)
   date: дата и время в UNIX-формате
   from: адрес-плательщик
   to: адрес-получатель
   token: токен = (только для токен-транзакций, ID токена ERC20)
   amount: сумма
   fee: комиссия (только для подтвержденной транзакции)
   txid: txid (хеш) транзакции
   confirmations: кол-во подтверждений = (0 - pending / 1 / 12)
   tag: метка
   sign: подпись
   sign2: подпись версия 2
}

Проверка подписи

Для проверки подписи необходимо получить хеш от пришедших данных и сравнить его со значением в поле sign или sign2.
Хеш - это (40-символьное шестнадцатеричное число) результат функции sha1 от строки, полученной соединением через двоеточие (:) значений полей type, date, from, to, [token, ]amount, txid, confirmations, tag и API-ключа.

Результат

Сервис ожидает текстовый ответ от обработчика IPN.
Этот текст можно будет увидеть в кабинете на вкладке "Оповещения".

Пример

Пример кода обработчика IPN на PHP:
...
if (!$_POST)
   $_POST = @json_decode(file_get_contents('php://input'), true);
if (!$_POST['etherapi.net'])
   return;
$tosign = array(
   $_POST['type'],
   $_POST['date'],
   $_POST['from'],
   $_POST['to'],
   $_POST['token'],
   $_POST['amount'],
   $_POST['txid'],
   $_POST['confirmations'],
   $_POST['tag'],
   $cfg['apikey'] // Ваш ключ доступа к API
);
$sign2 = sha1(implode(':', $tosign)); // подпись v2 всегда включает значение token
if (empty($_POST['token']))
   unset($tosign[4]); // исключаем из старой подписи если это не токен-транзакция
$sign = sha1(implode(':', $tosign));
if ($sign !== $_POST['sign']) // or if ($sign2 !== $_POST['sign2'])
   die('Sign wrong'); // этот ответ будет виден в кабинете
echo('OK');
...

Подпись версии 2 всегда включает $_POST['token'], даже если он пустой или не задан. Вы можете использовать ЛЮБУЮ из этих подписей.
Оповещения приходят с IP = 88.99.198.205