IPN (Instant Payment Notification)

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

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

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

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

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

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

Результат

Сервис ожидает текстовый ответ от обработчика IPN.
Если оповещение принято, то вы должны ответить строкой "OK" (без кавычек).
В противном случае верните в ответ текст ошибки. Этот текст можно будет увидеть в кабинете на вкладке "Оповещения".

Пример

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