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