# Webhook URL

## Описание

Задача этого функционала передать данные об оплаченном счете на сервер продавца. Это нужно для того, чтобы автоматически обработать платеж в магазине продавца и выдать товар или услугу вашему покупателю.

WH URL устанавливается индивидуально для каждого проекта в виде ссылки на скрипты и обработчики платежей внутри магазина продавца.

Каждый раз, когда статус счета сменяется на “Оплачен”, сервис отправляет POST запрос на этот URL в следующем формате:

```json
{
   "wallet":{
      "id":"47aa71e2-07a0-482e-9172-7114d7376ba0",
      "name":"usdt-tron",
      "blockchain":"tron",
      "cryptocurrency":"usdt",
      "address":"TKbstUwMzLrfTAGL4erYb7gc7ghmHQ9zG7"
   },
   "project":{
      "id":"9deea1e2-0c08-41a3-bdc2-a34eada3892d",
      "name":"My project",
      "commissionPayer":"seller",
      "commissionRate":"1"
   },
   "invoice":{
      "id":"a4c9e2ee-9a03-43e5-a1a1-00caf679d16a",
      "uid":"AFhygKX21ecd",
      "createDatetime":"2024-02-26 13:29:24",
      "timeToPayDatetime":"2024-02-27 01:29:24",
      "commissionFiatUSD":"0.05",
      "amountFiatUSD":"5.00",
      "amountFiat":"5.00",
      "calcAmountFiat":"5.02",
      "currencyFiat":"USD",
      "description":null,
      "serviceData":null,
      "status":"paid"
   },
   "payment":{
      "id":"f986ad8d-2298-473d-982a-efbc817b975d",
      "amount":"5.02000000",
      "hash":"74763b65e43bcc9492a6ce9a7f26fbfdbd7635aecd3454420b5e9534cba50ee6",
      "transactionDatetime":"2024-02-26 13:32:57"
   }
}
```

## Параметры запроса

| Параметр                      | Описание                                                                                                                                                                                                                                                                                                                                                   |
| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `wallet.id`                   | ID кошелька в формате UUID                                                                                                                                                                                                                                                                                                                                 |
| `wallet.name`                 | Название кошелька                                                                                                                                                                                                                                                                                                                                          |
| `wallet.blockchain`           | Блокчейн крипто кошелька                                                                                                                                                                                                                                                                                                                                   |
| `wallet.cryptocurrency`       | Криптовалюта кошелька                                                                                                                                                                                                                                                                                                                                      |
| `wallet.address`              | Адрес крипто кошелька                                                                                                                                                                                                                                                                                                                                      |
| `project.id`                  | ID проекта в формате UUID                                                                                                                                                                                                                                                                                                                                  |
| `project.name`                | Название проекта                                                                                                                                                                                                                                                                                                                                           |
| `project.commissionPayer`     | Плательщик комиссии                                                                                                                                                                                                                                                                                                                                        |
| `project.commissionRate`      | Размер комиссии в %                                                                                                                                                                                                                                                                                                                                        |
| `invoice.id`                  | ID счета в формате UUID                                                                                                                                                                                                                                                                                                                                    |
| `invoice.uid`                 | ID счета (для покупателя)                                                                                                                                                                                                                                                                                                                                  |
| `invoice.createDatetime`      | Дата и время создания счета (UTC)                                                                                                                                                                                                                                                                                                                          |
| `invoice.timeToPayDatetime`   | Дата и время, до которого действителен счет (UTC)                                                                                                                                                                                                                                                                                                          |
| `invoice.commissionFiatUSD`   | Сумма комиссии сервиса. Рассчитывается относительно суммы `invoice.amountFiatUSD`                                                                                                                                                                                                                                                                          |
| `invoice.amountFiatUSD`       | Сумма в валюте USD, рассчитанная при создании счета по текущему курсу относительно суммы `invoice.amountFiat`                                                                                                                                                                                                                                              |
| `invoice.amountFiat`          | Сумма в фиатной валюте                                                                                                                                                                                                                                                                                                                                     |
| `invoice.calcAmountFiat`      | Рассчитанная сумма в валюте `invoice.currencyFiat` по курсу криптовалюты на момент оплаты. Этот параметр может отличаться от суммы в `invoice.amountFiat` из-за того, что покупатель мог оплатить счет не сразу после создания, а через некоторое время. За это время курс криптовалюты относительно `invoice.currencyFiat` мог поменяться в любую сторону |
| `invoice.currencyFiat`        | Валюта фиата                                                                                                                                                                                                                                                                                                                                               |
| `invoice.description`         | Описание, которое было задано при создании счета                                                                                                                                                                                                                                                                                                           |
| `invoice.serviceData`         | Служебные данные, которые были заданы при создании счета                                                                                                                                                                                                                                                                                                   |
| `invoice.status`              | Статус счета                                                                                                                                                                                                                                                                                                                                               |
| `payment.id`                  | ID платежа в формате UUID                                                                                                                                                                                                                                                                                                                                  |
| `payment.amount`              | Сумма платежа в криптовалюте                                                                                                                                                                                                                                                                                                                               |
| `payment.hash`                | Хэш транзакции в блокчейне                                                                                                                                                                                                                                                                                                                                 |
| `payment.transactionDatetime` | Дата и время транзакции в блокчейне (UTC)                                                                                                                                                                                                                                                                                                                  |

## Периодичность доставки

По адресу WH URL сервер должен ответить с HTTP кодом 200.

Если ответ сервера будет с HTTP кодом отличным от 200, тогда сервис посчитает уведомление не доставленным. В этом случае сервис будет отправлять повторные запросы на этот WH URL со следующей периодичностью:

* Через 5 минут после последней неудачной доставки
* Через 15 минут
* Через 30 минут
* Через 1 час
* Через 3 часа
* Через 6 часов
* Через 12 часов
* Через 24 часа

Дальнейшие попытки доставки уведомления прекращаются

## Отключение WH URL

Иногда WH скрипт интернет-магазина при корректной обработке платежа отдает HTTP код отличный от 200. Это приводит к частым повторным периодическим запросам нашим сервером по таймингам, указанным в предыдущем разделе, что дает лишнюю нагрузку на наш и клиентский сервер.

Для предотвращения таких случаев у нас работает механизм отключения WH URL в проекте. Чтобы этого не происходило, выполните следующие шаги:

1. Измените программный код WH URL так, чтобы он отдавал HTTP код 200 в случае, если обработка платежа в магазине проведена успешно. Проверьте, используя любой эмулятор, например Postman
2. Напишите в тех. поддержку для коррекции настроек
3. Снова включите WH URL в настройках проекта и сохраните проект
