IPN (Instant Payment Notification)
Оповещение об оплате
Процесс оплаты и подтверждения транзакции может занять от нескольких минут до нескольких часов. Наш сервис оповестит вас о подтверждении, методом отправки POST-запроса с данными на указанный вами адрес обработчика. Оповещение произойдет дважды: после появления транзакции в сети (1-е подтверждение) и после ее 12-го подтверждения.
Структура данных
Данные в JSON-формате:
{
etherapi.net: версия
type: тип оповещения = (in-оплата / track-отслеживание / out-отправка)
date: дата и время в UNIX-формате
from: адрес-плательщик
to: адрес-получатель
token: токен = (только для токен-транзакций, ID токена ERC20)
amount: сумма
txid: txid (хеш) транзакции
confirmations: кол-во подтверждений = (1 / 12)
tag: метка
sign: подпись
}
Проверка подписи
Для проверки подписи необходимо получить хеш от пришедших данных и сравнить его со значением в поле sign.
Хеш - это (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;
$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');
...