Проверка платежей и отслеживание заказов
В этом руководстве описано, как проверять некастодиальные платежи через смарт-контракты Volet.com в Ethereum, BNB Smart Chain и TRON.
Хеш транзакции (txid) — не доказательство оплаты. Прежде чем пометить заказ как оплаченный, ваш бэкенд должен самостоятельно проверить выполнение транзакции, её финальность и платёжные события. В этой интеграции Volet.com не отправляет уведомления на Status URL, как в Hosted Checkout.
Как работает проверка платежа
- Создайте заказ. Сохраните ожидаемые сеть, актив, кошелёк для приёма средств (
seller), контракт-процессор, ожидаемую сумму для мерчанта и, если нужно, кошелёк покупателя. - Зафиксируйте попытку оплаты. Свяжите
txidплатежа с заказом. Хеши транзакцийapprove()для USDT храните отдельно. - Проверьте выполнение и финальность. Получите данные из блокчейна через RPC-подключение на бэкенде или облачный блокчейн-сервис.
- Проверьте платёжные события. Найдите событие
PaymentProcessedот утверждённого процессора. Для USDT также проверьте фактическийTransferтокенов мерчанту. - Сопоставьте с заказом. Сравните адрес мерчанта из события, покупателя (если требуется) и чистую сумму с неизменными данными заказа на бэкенде.
- Завершите заказ один раз. Атомарно сохраните проверенный платёж и запустите идемпотентное выполнение заказа.
Можно использовать облачного провайдера. Собственная блокчейн-нода не нужна.
Платёжные события и суммы
Задокументированные процессоры Volet.com генерируют событие PaymentProcessed после выплаты мерчанту:
event PaymentProcessed(
address indexed buyer,
address indexed seller,
uint256 commission,
uint256 totalPay
);
Для этих развёртываний чистая сумма, которую получает мерчант, считается так:
receivedAmount = totalPay - commission
Оба значения указываются в минимальных единицах актива. Формула верна при любом значении buyerPaysCommission.
| Актив | Необходимые доказательства в блокчейне |
|---|---|
| ETH, BNB | Успешное финализированное выполнение и совпадающий лог PaymentProcessed от утверждённого процессора нативного актива |
| USDT ERC-20, BEP-20 | Совпадающий лог PaymentProcessed процессора и лог Transfer USDT от утверждённого контракта токена: процессор → мерчант на сумму receivedAmount |
| TRX | Успешное solidified-выполнение и совпадающий лог PaymentProcessed от утверждённого процессора TRX |
| USDT TRC-20 | Совпадающий лог PaymentProcessed процессора и лог Transfer USDT TRC-20 от утверждённого контракта токена: процессор → мерчант на сумму receivedAmount |
Всегда проверяйте адрес, от которого пришло каждое событие. Лог с правильным именем события, но от постороннего контракта не доказывает оплату. Прямые переводы с кошелька на кошелёк не входят в этот платёжный сценарий через процессор.
Согласно материалам по интеграции процессоров, нативная выплата откатывается, если перевод мерчанту не прошёл. Поэтому подлинное событие PaymentProcessed в успешной финализированной транзакции служит доказательством нативной выплаты. Внутренние переводы в обозревателе блокчейна помогают при разборе, но для описанного здесь метода проверки не нужны.
Эти проверки событий надёжны для описанных здесь развёрнутых реализаций процессоров. Сверьте ABI и адреса процессоров с тем развёртыванием, которое используете вы.