# Вебхуки
# Основные положения
Вебхуки — это оповещения о происходящих в системе событиях. При наступлении
определенного события Xsolla отправляет HTTP-запрос к вашему приложению, в
котором передаются данные о событии. Чаще всего отправляется POST-запрос в
JSON-формате.
Примеры событий:
- взаимодействие пользователя с каталогом товаров;
- оплата или отмена заказа.
Когда происходит настроенное событие, Xsolla через вебхук оповещает вашу
систему об этом. В результате вы можете:
- пополнить баланс пользователя;
- выполнить возврат платежа;
- начислить новые предметы пользователю или списать их;
- начать предоставление подписки;
- заблокировать пользователя в случае подозрения в мошенничестве.
Пример работы вебхука обработки платежей:

Примечание
В зависимости от используемого решения и типа интеграции набор вебхуков и последовательность взаимодействия могут отличаться от приведенного примера.
Видеоинструкция по интеграции вебхуков Xsolla:
Настройка вебхуков при работе с продуктами и решениями Xsolla:
| Продукт/ Решение |
Обязательно/ Опционально |
Для чего нужны вебхуки |
| Payments |
Обязательно |
- Валидация пользователей.
- Получение информации о деталях транзакции в случаях успешного платежа или возврата платежа.
- Начисление купленных товаров пользователю и списание товаров в случае отмены заказа.
|
| In-Game Store |
Обязательно |
- Валидация пользователей.
- Получение информации о деталях транзакции в случаях успешного платежа или возврата платежа.
- Начисление купленных товаров пользователю и списание товаров в случае отмены заказа.
|
| Game Sales |
Опционально |
Для продажи ключей не требуется валидация пользователя и начисление ему товаров. Вы можете подключить вебхуки, если вы хотите получать информацию о событиях, например об оплате или отмене заказа. Если вы подключите вебхуки, важно обрабатывать все поступающие обязательные вебхуки.
|
| Subscriptions |
Опционально |
Получение информации о создании, изменении или отмене подписки. Альтернативный вариант — запрос информации с помощью API.
|
| Web Shop |
Обязательно |
- Валидация пользователей.
- Получение информации о деталях транзакции в случаях успешного платежа или возврата платежа.
- Начисление купленных товаров пользователю и списание товаров в случае отмены заказа.
- Аутентификация пользователей, если вы используете аутентификацию через ID пользователя. Альтернативный вариант — использование аутентификации пользователей через Xsolla Login.
|
| Digital Distribution Hub |
Обязательно |
- Валидация пользователей.
- Связывание ID транзакции со стороны Xsolla с ID транзакции в вашей системе.
- Передача дополнительных параметров транзакции в заказе.
- Начисление купленных товаров пользователю и списание их в случае отмены заказа.
Подробная информация по настройке вебхуков для Digital Distribution Hub приведена в инструкции.
|
| Login |
Опционально |
Получение информации о наступлении события:
- регистрация/ авторизация пользователей;
- подтверждение пользователем email-адреса;
- привязка аккаунта социальной сети пользователя.
Подробная информация о настройке вебхуков приведена в документации Login.
|
# Список обязательных вебхуков
Если вы используете продукты и решения, для которых работа с вебхуками
обязательна, подключите и протестируйте вебхуки в Личном кабинете и настройте их обработку.
При наступлении определенных событий вебхуки отправляются последовательно.
Поэтому, если вы не обработаете какой-то из вебхуков, последующие вебхуки не
будут отправлены. Список необходимых вебхуков представлен ниже.
## In-Game Store и Payments
На стороне Xsolla настроено 2 варианта отправки вебхуков при покупке и возврате
товаров на сайте — информация с данными платежа и транзакции и информация о
купленных товарах может приходить отдельно или может быть объединена в один
вебхук.
Получение информации в объединенных вебхуках:
Если вы зарегистрировались в Личном
кабинете после 22 января 2025 г., вы получаете всю информацию в вебхуках Успешная оплата заказа
(`order_paid`) и Отмена
заказа (`order_canceled`). В этом случае вам не требуется обрабатывать
вебхуки Успешный платеж (`payment`) и
Возврат платежа (`refund`).
Получение информации в отдельных вебхуках:
Если вы зарегистрировались в Личном
кабинете до 22 января 2025 г. включительно, вы получаете вебхуки:
- Успешный платеж (`payment`) и Возврат платежа (`refund`) с информацией
о данных платежа и детали транзакции.
- Успешная оплата
заказа (`order_paid`) и Отмена заказа (`order_canceled`) с информацией о купленных
товарах.
Вам необходимо обрабатывать все поступающие вебхуки. Для перехода к новому
варианту с получением объединенных вебхуков обратитесь к персональному
менеджеру проекта или напишите на csm@xsolla.com.
Для полноценной работы внутриигрового магазина и управления платежами,
необходимо реализовать обработку основных вебхуков:
Если вы получаете объединенные вебхуки:
| Название и тип вебхука |
Описание |
Проверка пользователей > Проверка существования пользователя (user_validation) |
Отправляется на разных этапах оплаты, чтобы удостовериться, что пользователь зарегистрирован в игре. |
Игровые сервисы > Объединенные вебхуки > Успешная оплата заказа (order_paid) |
Данные платежа, детали транзакции и информация о купленных товарах. Используйте данные вебхука для начисления товаров пользователю. |
Игровые сервисы > Объединенные вебхуки > Отмена заказа (order_canceled) |
Данные отмененного платежа, детали транзакции и информацию о купленных товарах. Используйте данные вебхука для списания купленных товаров у пользователя. |
Если вы получаете отдельные вебхуки:
| Название и тип вебхука |
Описание |
Проверка пользователей > Проверка существования пользователя (user_validation) |
Отправляется на разных этапах оплаты, чтобы удостовериться, что пользователь зарегистрирован в игре. |
Платежи > Успешный платеж (payment) |
Данные платежа и детали транзакции. |
Игровые сервисы > Отдельные вебхуки > Успешная оплата заказа (order_paid) |
Информация о купленных товарах. Используйте данные вебхука для начисления товаров пользователю. |
Платежи > Возврат платежа (refund) |
Данные платежа и детали транзакции. |
Игровые сервисы > Отдельные вебхуки > Отмена заказа (order_canceled) |
Информация о купленных товарах. Используйте данные вебхука для списания купленных товаров у пользователя. |
Если вы используете персонализацию каталога товаров,
реализованную на стороне вашего приложения, настройте обработку вебхука Персонализация каталога
на стороне партнера.
## Subscriptions
Для автоматического управления планами подписок необходимо реализовать
обработку основных вебхуков:
- Проверка существования
пользователя (`user_validation`) — отправляется на разных этапах оплаты,
чтобы удостовериться, что пользователь зарегистрирован в игре.
- Успешный платеж (`payment`) —
отправляется, когда заказ оплачен, и содержит информацию о данных платежа и
детали транзакции.
- Создание подписки
(`create_subscription`) — отправляется, когда был получен ответ об успешной
обработке вебхука Успешный платеж или
пользователь приобрел подписку с пробным периодом. Содержит детали купленной
подписки и данные пользователя. Используйте данные вебхука для добавления
подписки пользователю.
- Изменение подписки
(`update_subscription`) — отправляется при продлении или изменении подписки,
когда был получен ответ об успешной обработке вебхука Успешный
платеж. Содержит детали купленной подписки и данные пользователя.
Используйте данные вебхука для продления подписки пользователю или изменения
параметров подписки.
- Возврат платежа (`refund`) —
отправляется, когда заказ был отменен, и содержит информацию о данных
отмененного платежа и детали транзакции.
- Отмена подписки
(`cancel_subscription`) — отправляется, если был получен ответ об успешной
обработке вебхука Возврат платежа или
подписка была отменена по другой причине. Содержит информацию о подписке и
данные пользователя. Используйте данные вебхука для списания купленных подписок
у пользователя.
# Настройка вебхуков в Личном кабинете
## Общие настройки
Чтобы включить получение вебхуков:
1. В проекте в Личном кабинете перейдите в раздел Настройки
проекта > Вебхуки.
2. В поле Сервер для вебхуков укажите URL-адрес вашего сервера для
получения вебхуков в формате `https://example.com`. Вы также можете ввести
URL-адрес из инструмента для тестирования вебхуков.
Внимание
Для передачи данных используется протокол HTTPS, протокол HTTP не поддерживается.
3. Секретный ключ проекта для подписи вебхуков генерируется по умолчанию. Если вы
хотите изменить его, нажмите значок обновления.
4. Нажмите Получать вебхуки.

Примечание
Для тестирования вебхуков вы можете выбрать любой специализированный сайт, например webhook.site, или платформу, например ngrok.
Внимание
Вы не можете отправлять вебхуки на разные URL-адреса одновременно. Однако вы можете сначала указать в Личном кабинете URL-адрес для тестирования, а затем изменить его на боевой.
Чтобы отключить получение вебхуков:
1. В проекте в Личном кабинете перейдите в раздел Настройки
проекта > Вебхуки.
2. Нажмите Отключить вебхуки.
## Расширенные настройки
Для вебхуков раздела Payments and Store доступны расширенные настройки.
Они автоматически отобразятся под блоком Общие настройки
после того, как вы нажмете кнопку Получать вебхуки.
Примечание
Если расширенные настройки не отображаются, убедитесь, что получение вебхуков подключено в общих настройках и вы находитесь на вкладке Тестирование > Payments and Store.
В этом разделе вы можете настроить получение дополнительной информации в
вебхуках. Для этого установите соответствующие переключатели в активное
положение. В строке каждого разрешения указаны вебхуки, на которые повлияют
изменение настроек.
| Переключатель |
Описание |
| Показывать информацию о сохраненном платежном аккаунте |
Информация о сохраненном способе оплаты передается в кастомном объекте payment_account. |
| Показывать информацию о транзакциях сохраненными способами оплаты |
В вебхуке будет передаваться информация в кастомных параметрах: saved_payment_method:0 — сохраненный способ оплаты не используется;1 — способ оплаты был сохранен при совершении текущей транзакции;2 — используется ранее сохраненный способ оплаты.
payment_type:1 — единоразовый платеж;2 — рекуррентный платеж.
|
| Добавить объект order в вебхук |
В вебхуке Успешный платеж будет передаваться информация о заказе в объекте order. |
| Показывать только необходимую информацию о пользователе без чувствительных данных |
В вебхуке о пользователе будет передаваться только следующая информация: |
| Передавать кастомные параметры |
В вебхуке будет передаваться информация о кастомных параметрах из токена. |
| Показывать БИН карты и последние 4 цифры ее номера |
В вебхуке будет передаваться следующая информация о номере карты: - первые 6 цифр в параметре
card_bin; - последние 4 цифры в параметре
card_suffix.
|
| Показывать бренд карты |
Бренд карты, с которой была совершена оплата. Например, Mastercard или Visa. |

# Тестирование вебхуков в Личном кабинете
Тестирование вебхуков помогает убедиться в корректной настройке проекта как на
вашей стороне, так и на стороне Xsolla.
Если вебхуки настроены успешно, ниже блока настройки вебхуков отобразится блок
тестирования вебхуков.

Содержание блока зависит от варианта получения вебхуков.
Если вы получаете объединенные вебхуки:
Если вы получаете отдельные вебхуки:
Примечание
Если в блоке тестирования отобразилось предупреждение, что тест не пройден, проверьте настройки ответа на вебхук в вашем обработчике вебхуков. Причины ошибок в тестировании указаны в результатах тестирования.
Пример:
Для тестирования вы используете специализированный сайт webhook.site.
В разделе Тестирование ответа на неверную подпись отображается ошибка.
Это происходит, потому что Xsolla отправляет вебхук с неверной подписью и ожидает, что ваш обработчик ответит 4xx HTTP-кодом с указанием кода ошибки INVALID_SIGNATURE.
webhook.site отправляет 200 HTTP-код в ответ на все вебхуки, в том числе на вебхук с неверной подписью. Ожидаемый 4xx HTTP-код не может быть получен, поэтому в результате тестирования отображается ошибка.

Далее описан процесс тестирования для сценария с объединенными вебхуками.
## Payments and Store
На вкладке Payments and Store вы можете протестировать работу следующих
вебхуков:
- Проверка пользователей
(`user_validation`)
- Успешная оплата
заказа (`order_paid`)
- Отмена заказа
(`order_canceled`)
Чтобы протестировать вебхуки:
1. В блоке тестирования вебхуков перейдите на вкладку Payments and Store.
2. В раскрывающемся списке выберите тип товара. Если выбранный тип товара еще не
настроен в Личном кабинете, нажмите:
* Подключить – если модуль с товарами данного типа еще не подключен;
* Настроить – если вы ранее уже подключали модуль, но не завершили
настройку.
При нажатии кнопки вы будете перенаправлены в раздел Личного
кабинета, соответствующий типу выбранного товара. После создания товара
вернитесь в раздел тестирования вебхуков и перейти к следующему шагу.
3. Заполните необходимые поля: - Выберите артикул товара из
раскрывающегося списка и укажите его количество. Вы можете выбрать несколько
товаров. Для этого нажмите + и добавьте товары в новой строке.
- ID пользователя — при тестировании вы можете указать любую
комбинацию букв и цифр.
- Public user ID — ID, который известен
пользователю, например, email или никнейм. Это поле отображается, если public
user ID включен в вашем проекте в разделе Pay Station >
Настройки.
- Укажите произвольное значение в поле ID заказа
Xsolla.
- ID заявки в Xsolla — ID транзакции на стороне
Xsolla. При тестировании вы можете указать любое числовое значение.
- Invoice ID — ID транзакции на стороне вашей игры. При тестировании
вы можете указать любую комбинацию букв и цифр. Для успешной оплаты это не
обязательный параметр, но вы можете передать его, чтобы связать ID транзакции
на вашей стороне с ID транзакции на стороне Xsolla.
- Количество
— сумма платежа. При тестировании вы можете указать любое числовое
значение.
- Валюта — выберите валюту из раскрывающегося
списка.
4. Нажмите Проверить вебхук.
На URL-адрес сервера вебхуков придут вебхуки Проверка существования пользователя, Успешная оплата заказа
и Отмена заказа с
указанными данными. Ниже кнопки Проверить вебхук отобразятся результаты
тестирования каждого типа вебхука.
Если в вашем проекте включен public user ID, в результатах тестирования также
отобразится проверка поиска пользователя.
Для каждого вебхука вам необходимо настроить обработку обоих сценариев:
успешного и с ошибкой.

## Subscriptions
На вкладке Subscriptions вы можете протестировать работу следующих
вебхуков при управлении подписками:
- Проверка пользователей
(`user_validation`)
- Успешный платеж (`payment`)
Примечание
В Личном кабинете вы можете протестировать только базовые вебхуки Проверка существования пользователей и Успешный платеж. Для тестирования остальных вебхуков перейдите к разделам:
Чтобы выполнить тестирование: - В блоке тестирования вебхуков перейдите
на вкладку Subscriptions.
- Заполните необходимые поля:
- ID пользователя — при тестировании вы можете указать любую
комбинацию букв и цифр.
- ID заявки в Xsolla — ID транзакции на
стороне Xsolla. При тестировании вы можете указать любое числовое
значение.
- Public user ID — ID, который известен пользователю,
например, email или никнейм. Это поле отображается, если public user ID включен
в вашем проекте в разделе Pay Station > Settings > Additional settings
section.
- Валюта — выберите валюту из раскрывающегося
списка.
- ID плана — план подписки. Выберите план из
раскрывающегося списка.
- Продукт подписки— выберите продукт из
раскрывающегося списка (опционально).
- Сумма — сумма платежа.
При тестировании вы можете указать любое числовое значение.
- Invoice
ID— ID транзакции на стороне вашей игры. При тестировании вы можете указать
любую комбинацию букв и цифр.Для успешной оплаты это не обязательный параметр,
но вы можете передать его, чтобы связать ID транзакции на вашей стороне с ID
транзакции на стороне Xsolla.
- Пробный период. Для тестирования
покупки подписки без пробного периода или тестирования продления подписки, укажите значение
0.
- Нажмите Тестировать вебхуки.
На указанный URL-адрес придут вебхуки с введенными данными. Ниже кнопки
Тестировать вебхуки отобразятся результаты тестирования каждого вебхука
как для успешного сценария, так и для случая возникновения ошибки.
# Обработчик вебхуков
Обработчик вебхуков – это программный код, который позволяет принимать
поступающие вебхуки на указанный URL-адрес, генерировать подпись и отправлять ответ на вебхук на сервер Xsolla.
На стороне вашего приложения реализуйте прием вебхуков со следующих IP-адресов:
- `185.30.20.0/24`;
- `185.30.21.0/24`;
- `185.30.22.0/24`;
- `185.30.23.0/24`;
- `34.102.38.178`;
- `34.94.43.207`
- `35.236.73.234`;
- `34.94.69.44`;
- `34.102.22.197`.
Если у вас подключен продукт Login, дополнительно
добавьте обработку вебхуков со следующих IP-адресов:
- `34.94.0.85`;
- `34.94.14.95`;
- `34.94.25.33`;
- `34.94.115.185`;
- `34.94.154.26`;
- `34.94.173.132`;
- `34.102.48.30`;
- `35.235.99.248`;
- `35.236.32.131`;
- `35.236.35.100`;
- `35.236.117.164`.
Ограничения:
- В базе данных вашего приложения не должно быть нескольких успешных транзакций с
одинаковым ID.
- Если обработчик вебхуков получил вебхук с ID, который уже существует в базе,
необходимо вернуть результат предыдущей обработки данной транзакции. Не
рекомендуется зачислять пользователю повторную покупку и создавать дублирующие
записи в базе данных.
## Генерация подписи
Чтобы обеспечить безопасную передачу данных, вам необходимо убедиться, что
вебхук действительно был отправлен с сервера Xsolla и не был изменен в процессе
передачи. Для этого сгенерируйте собственную подпись на основе тела запроса и
сравните ее с подписью, полученной в заголовке `authorization` этого же
запроса. Если подписи совпадают, вебхук является подлинным и его можно
обрабатывать.
Шаги верификации:
1. Получите подпись из заголовка `authorization` входящего запроса вебхука. Формат
заголовка: `Signature `.
2. Получите тело запроса вебхука в формате JSON. Внимание
Используйте JSON в полученном
виде. Не парсите и не перекодируйте данные, так как это изменит форматирование
и приведет к ошибке проверки подписи.
3. Сгенерируйте собственную подпись для сравнения: - Конкатенируйте
JSON из тела запроса и секретный ключ проекта, т. е. объедините две строки,
добавив секретный ключ проекта в конец строки.
- Примените к полученной
строке криптографическую хэш-функцию SHA-1. В результате вы получите
шестнадцатеричную строку в нижнем регистре.
4. Сравните полученную строку с подписью из заголовка `authorization`. Если
подписи совпадают, вебхук является подлинным.
Ниже вы можете найти примеры реализации генерации подписи для следующих языков:
C#, C++, Go, PHP и Node.js.
### Пример вебхука (HTTP):
```http
POST /your_uri HTTP/1.1
host: your.host
accept: application/json
content-type: application/json
content-length: 165
authorization: Signature 52eac2713985e212351610d008e7e14fae46f902
{
"notification_type":"user_validation",
"user":{
"ip":"127.0.0.1",
"phone":"18777976552",
"email":"email@example.com",
"id":1234567,
"name":"Xsolla User",
"country":"US"
}
}
```
### Пример вебхука (curl):
```bash
curl -v 'https://your.hostname/your/uri' \
-X POST \
-H 'authorization: Signature 52eac2713985e212351610d008e7e14fae46f902' \
-d '{
"notification_type":
"user_validation",
"user":
{
"ip": "127.0.0.1",
"phone": "18777976552",
"email": "email@example.com",
"id": 1234567,
"name": "Xsolla User",
"country": "US"
}
}'
```
### Пример реализации генерации подписи для C# (универсальный пример):
Примечание
Этот пример кода совместим с .NET Framework 4.0 и выше, а также с .NET Core и другими современными версиями .NET. Для проверки подписи реализовано сравнение с постоянным временем выполнения с помощью метода ConstantTimeEquals, что помогает предотвратить атаки по времени.
```csharp
using System;
using System.Security.Cryptography;
using System.Text;
public static class XsollaWebhookSignature
{
public static string ComputeSha1(string jsonBody, string secretKey)
{
// Concatenation of the JSON from the request body and the project's secret key
string dataToSign = jsonBody + secretKey;
using (SHA1 sha1 = SHA1.Create())
{
byte[] hashBytes = sha1.ComputeHash(Encoding.UTF8.GetBytes(dataToSign));
// Convert hash bytes to lowercase hexadecimal string
var hexString = new StringBuilder(hashBytes.Length * 2);
foreach (byte b in hashBytes)
{
hexString.Append(b.ToString("x2"));
}
return hexString.ToString();
}
}
public static bool VerifySignature(string jsonBody, string secretKey, string receivedSignature)
{
string computedSignature = ComputeSha1(jsonBody, secretKey);
string receivedSignatureLower = receivedSignature.ToLower();
// Use constant-time comparison to prevent timing attacks
return ConstantTimeEquals(computedSignature, receivedSignatureLower);
}
private static bool ConstantTimeEquals(string a, string b)
{
if (a.Length != b.Length)
{
return false;
}
int result = 0;
for (int i = 0; i < a.Length; i++)
{
result |= a[i] ^ b[i];
}
return result == 0;
}
}
```
### Пример реализации генерации подписи для C# (.NET 5.0 и выше):
Примечание
Чтобы использовать метод Convert.ToHexString, вам необходима версия .NET 5.0 или выше.
Если у вас версия .NET 7.0 или выше, вы также можете использовать метод
CryptographicOperations.FixedTimeEquals вместо
ConstantTimeEquals.
```csharp
// For .NET 5.0 and later, you can use the more concise Convert.ToHexString method:
using System;
using System.Security.Cryptography;
using System.Text;
public static class XsollaWebhookSignature
{
public static string ComputeSha1(string jsonBody, string secretKey)
{
string dataToSign = jsonBody + secretKey;
using var sha1 = SHA1.Create();
byte[] hashBytes = sha1.ComputeHash(Encoding.UTF8.GetBytes(dataToSign));
return Convert.ToHexString(hashBytes).ToLower();
}
public static bool VerifySignature(string jsonBody, string secretKey, string receivedSignature)
{
string computedSignature = ComputeSha1(jsonBody, secretKey);
string receivedSignatureLower = receivedSignature.ToLower();
// Use constant-time comparison to prevent timing attacks
return ConstantTimeEquals(computedSignature, receivedSignatureLower);
}
private static bool ConstantTimeEquals(string a, string b)
{
if (a.Length != b.Length)
{
return false;
}
int result = 0;
for (int i = 0; i < a.Length; i++)
{
result |= a[i] ^ b[i];
}
return result == 0;
}
}
```
### Пример реализации генерации подписи для C# (.NET 7.0 и выше):
Примечание
Если у вас версия .NET 7.0 или выше, вы можете использовать метод CryptographicOperations.FixedTimeEquals.
```csharp
// For .NET 7.0+, you can use the built-in CryptographicOperations.FixedTimeEquals:
using System.Security.Cryptography;
public static bool VerifySignature(string jsonBody, string secretKey, string receivedSignature)
{
string computedSignature = ComputeSha1(jsonBody, secretKey);
byte[] computedBytes = Encoding.UTF8.GetBytes(computedSignature);
byte[] receivedBytes = Encoding.UTF8.GetBytes(receivedSignature.ToLower());
return CryptographicOperations.FixedTimeEquals(computedBytes, receivedBytes);
}
```
### Пример реализации генерации подписи для C++:
```c++
#include
#include
#include
#include
class XsollaWebhookSignature {
public:
static std::string computeSha1(const std::string& jsonBody, const std::string& secretKey) {
// Concatenation of the JSON from the request body and the project's secret key
std::string dataToSign = jsonBody + secretKey;
unsigned char digest[SHA_DIGEST_LENGTH];
// Create SHA1 hash
SHA1(reinterpret_cast(dataToSign.c_str()),
dataToSign.length(), digest);
// Convert to lowercase hexadecimal string
std::ostringstream hexStream;
hexStream << std::hex << std::setfill('0');
for (int i = 0; i < SHA_DIGEST_LENGTH; ++i) {
hexStream << std::setw(2) << static_cast(digest[i]);
}
return hexStream.str();
}
static bool verifySignature(const std::string& jsonBody, const std::string& secretKey, const std::string& receivedSignature) {
std::string computedSignature = computeSha1(jsonBody, secretKey);
// Timing-safe comparison
if (computedSignature.length() != receivedSignature.length()) {
return false;
}
volatile unsigned char result = 0;
for (size_t i = 0; i < computedSignature.length(); ++i) {
result |= (computedSignature[i] ^ receivedSignature[i]);
}
return result == 0;
}
};
```
### Пример реализации генерации подписи для Go:
```go
package main
import (
"crypto/sha1"
"crypto/subtle"
"encoding/hex"
"strings"
)
type XsollaWebhookSignature struct{}
func (x *XsollaWebhookSignature) ComputeSha1(jsonBody, secretKey string) string {
// Concatenation of the JSON from the request body and the project's secret key
dataToSign := jsonBody + secretKey
// Create SHA1 hash
h := sha1.New()
h.Write([]byte(dataToSign))
signature := h.Sum(nil)
// Convert to lowercase hexadecimal string
return strings.ToLower(hex.EncodeToString(signature))
}
func (x *XsollaWebhookSignature) VerifySignature(jsonBody, secretKey, receivedSignature string) bool {
computedSignature := x.ComputeSha1(jsonBody, secretKey)
receivedSignatureLower := strings.ToLower(receivedSignature)
// Use constant time comparison to prevent timing attacks
return subtle.ConstantTimeCompare([]byte(computedSignature), []byte(receivedSignatureLower)) == 1
}
```
### Пример реализации генерации подписи для PHP:
```php
```
### Пример реализации генерации подписи для Node.js:
```js
const crypto = require('crypto');
class XsollaWebhookSignature {
// IMPORTANT: jsonBody must be the raw JSON string exactly as received from Xsolla
static computeSha1(jsonBody, secretKey) {
// Concatenation of the JSON from the request body and the project's secret key
const dataToSign = jsonBody + secretKey;
// Create SHA1 hash
const hash = crypto.createHash('sha1');
hash.update(dataToSign, 'utf8');
// Convert to lowercase hexadecimal string
return hash.digest('hex').toLowerCase();
}
static verifySignature(jsonBody, secretKey, receivedSignature) {
const computedSignature = this.computeSha1(jsonBody, secretKey);
const cleanReceivedSignature = receivedSignature.toLowerCase();
// Check if signatures have the same length before using timingSafeEqual
if (computedSignature.length !== cleanReceivedSignature.length) {
return false;
}
try {
return crypto.timingSafeEqual(
Buffer.from(computedSignature, 'hex'),
Buffer.from(cleanReceivedSignature, 'hex')
);
} catch (error) {
// Return false if there's any error (e.g., invalid hex characters)
return false;
}
}
}
```
## Отправка ответов на вебхук
Чтобы подтвердить получение вебхука, ваш сервер должен вернуть:
* `200`, `201`, или `204` HTTP-код в случае успешного ответа.
* `400` HTTP-код с описанием
проблемы, если указанный пользователь не был найден или если передана
недействительная подпись. Ваш обработчик вебхуков также может возвращать `5xx`
HTTP-код при временных проблемах на вашем сервере.
Если на вебхуки Успешная
оплата заказа и Отмена
заказа сервер Xsolla не получил ответ или получил ответ с кодом `5xx`,
осуществляется повторная отправка вебхуков по следующему расписанию:
* 2 попытки с интервалом 5 минут;
* 7 попыток с интервалом 15 минут;
* 10 попыток с интервалом 60 минут.
Максимально осуществляется 20 попыток отправки вебхуков в течение 12 часов с
момента первой попытки.
Логика повторной отправки вебхуков Успешный платеж и Возврат платежа описана на странице
соответствующего вебхука.
Внимание
При одновременном выполнении следующих условий платеж все равно будет возвращен пользователю:
- Инициатор возврата — Xsolla.
- На вебхук получен ответ с кодом
4xx, или после всех повторных попыток ответ не был получен, или был получен код 5xx.
Если на вебхук Проверка
существования пользователя сервер Xsolla не получил ответ или получил ответ
с `400` или `5xx` HTTP-кодом, повторная отправка вебхука Проверка существования
пользователя не осуществляется. Пользователь увидит ошибку, вебхуки Успешный платеж и Успешная оплата заказа
отправлены не будут.
# Ошибки
Коды ошибок для HTTP-кода 400:
| Код |
Описание |
| INVALID_USER |
Неверный пользователь |
| INVALID_PARAMETER |
Неверный параметр |
| INVALID_SIGNATURE |
Подпись неверна |
| INCORRECT_AMOUNT |
Некорректная сумма |
| INCORRECT_INVOICE |
Неверный заказ |
```
HTTP/1.1 400 Bad Request
{
"error":{
"code":"INVALID_USER",
"message":"Invalid user"
}
}
```
# Список вебхуков
Примечание
Тип оповещения передается в параметре notification_type.
Version: 1.0
## Servers
```
https://api.xsolla.com/merchant/v2
```
## Download OpenAPI description
[Вебхуки](https://developers.xsolla.com/_bundle/@l10n/ru/webhooks/index.yaml)
## Проверка пользователей
### Поиск пользователя
- [POST user-search](https://developers.xsolla.com/ru/webhooks/user-validation/user-search.md): Public User ID — параметр, по которому можно однозначно идентифицировать пользователя и который хорошо известен пользователю в отличие от User ID (в качестве Public User ID может быть email, никнейм и т. д.). Xsolla отправляет вебхук с типом user_search, когда оплата совершается вне игры (например, при оплате в терминале).
### Проверка пользователей
- [POST user-validation](https://developers.xsolla.com/ru/webhooks/user-validation/user-validation.md): Xsolla отправляет вебхук с типом user_validation на URL-адрес вебхука, чтобы
удостовериться, что пользователь зарегистрирован в игре. В процессе оплаты
запрос отправляется несколько раз:
* при выборе способа оплаты в платежном интерфейсе;
* вводе данных в форме оплаты, например, при вводе данных банковской карты или
индекса для оплаты с помощью PayPal;
* нажатии Далее для перехода к оплате;
* завершении обработки платежа и переходе транзакции в статус done.
Запрос отправляется при оплате любыми способами.
После сохранения URL-адреса вебхука в Личном кабинете вы можете настроить
получение дополнительной информации в вебхуке. Для этого в разделе Настройки
проекта > Вебхуки > Расширенные настройки установите необходимые
переключатели в активное положение.
Примечание
Если вы зарегистрировались в Личном кабинете до 22 января 2025 г. (включительно), переключатели располагаются в разделе Настройки проекта > Вебхуки > Тестирование > Payments > Расширенные настройки.
Переключатель
Описание
Показывать только необходимую информацию о пользователе без чувствительных данных
В вебхуке о пользователе будет передаваться только следующая информация:ID;страна.
Передавать кастомные параметры
В вебхуке будет передаваться информация о кастомных параметрах из токена.
### Проверка пользователя в Web Shop
- [POST user-validation-in-webshop](https://developers.xsolla.com/ru/webhooks/user-validation/user-validation-in-webshop.md): Xsolla отправляет вебхук с сайта интернет-магазина на URL-адрес вебхука для проверки существования пользователя в игре. Вебхук поступает с IP-адреса 34.102.38.178.
Примечание Вебхук используется только для
проверки пользователя в Web Shop. Дополнительные сведения о настройке вебхука вы можете найти в инструкции.
## Payments
### Добавление платежного аккаунта
- [POST add-payment-account](https://developers.xsolla.com/ru/webhooks/payments/add-payment-account.md): Когда пользователь добавляет платежный аккаунт вручную или сохраняет платежный аккаунт при совершении покупки, Xsolla отправляет вебхук с типом payment_account_add на URL-адрес вебхука. Чтобы получать вебхук, обратитесь к персональному менеджеру проекта или напишите на csm@xsolla.com.
### Частичный возврат платежа
- [POST partial-refund](https://developers.xsolla.com/ru/webhooks/payments/partial-refund.md): При частичном возврате платежа Xsolla отправляет детали отмененной транзакции в
вебхуке с типом partial_refund на URL-адрес вебхука. Подробная информация о
процессе частичного возврата платежа приведена в инструкции.
После сохранения URL-адреса вебхука в Личном кабинете вы можете настроить
получение дополнительной информации в вебхуке. Для этого в разделе Настройки
проекта > Вебхуки > Расширенные настройки установите следующий
переключатель в активное положение.
Примечание
Если вы зарегистрировались в Личном кабинете до 22 января 2025 г. (включительно), переключатели располагаются в разделе Настройки проекта > Вебхуки > Тестирование > Payments > Расширенные настройки.
Переключатель
Описание
Показывать информацию о транзакциях сохраненными способами оплаты
В вебхуке будет передаваться информация в кастомных параметрах:saved_payment_method:0 — сохраненный способ оплаты не используется;1 — способ оплаты был сохранен при совершении текущей транзакции;2 — используется ранее сохраненный способ оплаты.payment_type:1 — единоразовый платеж;2 — рекуррентный платеж.
Коды отмены:
Код
Причина отмены
Описание
1
Cancellation by the user request / the game request
Используется, если отмена произошла из Личного кабинета.
3
Integration error
Используется в случае проблем с интеграцией между Xsolla и игрой.В этом случае мы не рекомендуем заносить пользователя в черный список.
5
Test payment
Используется в случае совершения тестового платежа с последующей отменой.В этом случае мы не рекомендуем заносить пользователя в черный список.
7
Fraud notification from PS
Используется, если платежная система не произвела выплату по транзакции из-за потенциального фрода.В этом случае мы рекомендуем добавить пользователя в черный список.
9
Cancellation by the user request
Используется, если игра или заказ не удовлетворяют требованиям пользователя по каким-либо причинам.В этом случае мы не рекомендуем заносить пользователя в черный список.
10
Cancellation by the game request
Используется, когда игра просит отменить транзакцию.В этом случае мы не рекомендуем заносить пользователя в черный список.
### Успешный платеж
- [POST payment](https://developers.xsolla.com/ru/webhooks/payments/payment.md): Когда пользователь успешно совершает оплату, Xsolla отправляет детали платежа в
вебхуке с типом payment на URL-адрес вебхука.
Ожидаемые коды ответов описаны в разделе Responses, но вы можете
использовать и другие коды:
Код ответа
Описание
200, 201, 204
Успешный ответ.
4xx
Возникновение ошибки. Например, если указанный пользователь не был найден или если передана недействительная подпись.
5xx
Временная ошибка на сервере. При получении этого ответа Xsolla отправляет вебхук повторно с увеличенным интервалом, пока ваш обработчик не подтвердит их получение. Максимальное количество попыток — 12 в течение 48 часов.
После сохранения URL-адреса вебхука в Личном
кабинете вы можете настроить получение дополнительной информации в вебхуке.
Примечание
Если вы зарегистрировались в Личном кабинете до 22 января 2025 года (включительно), вы можете найти переключатели в проекте в разделе Настройки > Вебхуки > Тестирование > Payments > Расширенные настройки.
Переключатель
Описание
Показывать информацию о сохраненном платежном аккаунте
Информация о сохраненном способе оплаты передается в кастомном объекте payment_account.
Показывать информацию о транзакциях сохраненными способами оплаты
В вебхуке будет передаваться информация в кастомных параметрах:saved_payment_method:0 — сохраненный способ оплаты не используется;1 — способ оплаты был сохранен при совершении текущей транзакции;2 — используется ранее сохраненный способ оплаты.payment_type:1 — единоразовый платеж;2 — рекуррентный платеж.
Добавить объект order в вебхук
В вебхуке Успешный платеж будет передаваться информация о заказе в объекте order.
Показывать только необходимую информацию о пользователе без чувствительных данных
В вебхуке о пользователе будет передаваться только следующая информация:ID;страна.
Показывать БИН карты и последние 4 цифры ее номера
В вебхуке будет передаваться следующая информация о номере карты:первые 6 цифр в параметре card_bin;последние 4 цифры в параметре card_suffix.
Показывать бренд карты
Бренд карты, с которой была совершена оплата. Например, Mastercard или Visa.
Внимание
Набор полей, отправляемых в вебхуке, зависит:от расширенных настроек, которые вы установили в Личном кабинете;кастомных настроек, которые были заданы на стороне Xsolla.При возникновении вопросов обратитесь к персональному менеджеру проекта или напишите на csm@xsolla.com.
### Отмена платежа
- [POST payment-declined](https://developers.xsolla.com/ru/webhooks/payments/payment-declined.md): Если транзакция была отклонена платежной системой, Xsolla присылает детали
транзакции в вебхуке с типом ps_declined на URL-адрес вебхука. Вебхук
отправляется на этапе авторизации или обработки платежа. Вебхук
payment\ order_paid при этом отправлен не будет.
Типичные причины отклонения транзакции платежной системой:
* Авторизация карты не удалась (пример: платежная система не смогла завершить
процесс авторизации из-за технического сбоя или отсутствия ответа от банка) или
была отклонена (пример: банк ответил, но отказал в операции из-за недостатка
средств или неверных данных карты).
* Проверка 3-D Secure не удалась, не была завершена или истекло время ожидания
подтверждения пользователем.
* Процессор или банк-эквайер временно недоступен или возвращает жесткий отказ
(hard decline) из-за необратимой ошибки: например, закрытого счета или
недействительного номера карты. Повторная попытка без устранения причины ошибки
не приведет к успешному результату.
Следует отличать:
* От отклонений транзакции со стороны антифрод-системы, информация о которых
передается в вебхуке
afs_reject.
* Возврата и частичного возврата платежа после успешной оплаты, информация о
котором передается в вебхуках
refund и
partial_refund.
Примечание
Чтобы получать вебхук ps_declined, обратитесь к персональному менеджеру проекта или напишите на csm@xsolla.com.
### Возврат платежа
- [POST refund](https://developers.xsolla.com/ru/webhooks/payments/refund.md): При отмене платежа Xsolla отправляет детали отмененной транзакции в вебхуке с
типом refund на URL-адрес вебхука.
Механизм повторной отправки вебхуков зависит от инициатора возврата платежа:
* Если возврат был инициирован на вашей стороне, повторная отправка не
выполняется. Платеж возвращается пользователю вне зависимости от полученного
ответа на вебхук.
* Если возврат был инициирован третьей стороной, например платежной системой или
службой поддержки Xsolla, и на вебхук был получен ответ с кодом 5xx, вебхуки
отправляются повторно. Максимально выполняется 12 попыток с увеличивающимся
интервалом в течение 48 часов с момента первой попытки.
Подробная информация о процессе возврата платежа приведена в инструкции.
Внимание
При одновременном выполнении следующих условий платеж все равно будет возвращен пользователю:Инициатор возврата — Xsolla.На вебхук получен ответ с кодом 4xx, или после всех повторных попыток ответ не был получен, или был получен код 5xx.
После сохранения URL-адреса вебхука в Личном
кабинете вы можете настроить получение дополнительной информации в вебхуке.
Примечание
Если вы зарегистрировались в Личном кабинете до 22 января 2025 года (включительно), вы можете найти переключатели в проекте в разделе Настройки > Вебхуки > Тестирование > Payments > Расширенные настройки.
Переключатель
Описание
Показывать информацию о транзакциях сохраненными способами оплаты
В вебхуке будет передаваться информация в кастомных параметрах:saved_payment_method:0 — сохраненный способ оплаты не используется;1 — способ оплаты был сохранен при совершении текущей транзакции;2 — используется ранее сохраненный способ оплаты.payment_type:1 — единоразовый платеж;2 — рекуррентный платеж.
Коды отмены:
Код
Причина отмены
Описание
1
Cancellation by the user request / the game request
Используется, если отмена произошла из Личного кабинета.
2
Chargeback
Используется, если по транзакции был chargeback.
3
Integration error
Используется в случае проблем с интеграцией между Xsolla и игрой.В этом случае мы не рекомендуем заносить пользователя в черный список.
4
Potential fraud
Используется в случае потенциального фрода.В этом случае мы рекомендуем добавить пользователя в черный список.
5
Test payment
Используется в случае совершения тестового платежа с последующей отменой.В этом случае мы не рекомендуем заносить пользователя в черный список.
6
User invoice expired
Используется, если был выбран способ оплаты с системой отложенного платежа.
7
Fraud notification from PS
Используется, если платежная система не произвела выплату по транзакции из-за потенциального фрода.В этом случае мы рекомендуем добавить пользователя в черный список.
8
Cancellation by the PS request
Используется, когда платежная система запросила отмену транзакции.В этом случае мы не рекомендуем заносить пользователя в черный список.
9
Cancellation by the user request
Используется, если игра или заказ не удовлетворяют требованиям пользователя по каким-либо причинам.В этом случае мы не рекомендуем заносить пользователя в черный список.
10
Cancellation by the game request
Используется, когда игра просит отменить транзакцию.В этом случае мы не рекомендуем заносить пользователя в черный список.
11
Account holder called to report fraud
Используется, когда владелец аккаунта сообщил, что не совершал данный платеж.
12
Friendly fraud
Используется, если нам сообщили о friendly fraud.
13
Duplicate
Используется, если произошла попытка повторной оплаты по счету.
### Удаление платежного аккаунта
- [POST remove-payment-account](https://developers.xsolla.com/ru/webhooks/payments/remove-payment-account.md): Когда пользователь удаляет платежный аккаунт из сохраненных, Xsolla отправляет вебхук с типом payment_account_remove на URL-адрес вебхука. Чтобы получать вебхук, обратитесь к персональному менеджеру проекта или напишите на csm@xsolla.com.
## Объединенные вебхуки
### Отмена заказа (с деталями платежа и транзакции)
- [POST order-cancellation](https://developers.xsolla.com/ru/webhooks/combined-webhooks/order-cancellation.md): Xsolla отправляет вебхук order_canceled на указанный URL-адрес,
когда платеж отменен пользователем, партнером или автоматически. В вебхуке
содержится информация о возвращенных товарах, платежные данные и детали
отмененного заказа.
Вебхук не отправляется, если оплата не была успешной, например:
* платежный интерфейс был открыт, но пользователь не оплатил заказ;
* платежный интерфейс был открыт, но при оплате возникли ошибки.
Рекомендуемое время обработки вебхука — до 3 секунд.
### Успешная оплата заказа (с деталями платежа и транзакции)
- [POST successful-order-payment](https://developers.xsolla.com/ru/webhooks/combined-webhooks/successful-order-payment.md): Xsolla отправляет вебхук order_paid на указанный URL-адрес, когда
пользователь успешно оплатил заказ.
В вебхуке order_paid содержится информация о купленных товарах,
данные платежа и детали транзакции.
Вебхук order_paid не отправляется, если оплата неуспешна, например:
* форма оплаты была открыта, но пользователь не оплатил заказ;
* форма оплаты была открыта, но при оплате возникли ошибки.
Рекомендуется обеспечить время обработки вебхука order_paid менее
3 секунд.
Внимание
Набор полей, отправляемых в вебхуке, зависит от настроек, которые:вы установили в Личном кабинете в разделе Настройки проекта > Вебхуки > Расширенные настройки;были заданы на стороне Xsolla.При возникновении вопросов обратитесь к персональному менеджеру проекта или напишите на csm@xsolla.com.
Ожидаемые коды ответов описаны в разделе Responses. Вы можете
использовать другие коды ответов. В зависимости от кода ответа и подключения
функциональности автоматического возврата платежа логика обработки вебхука на
стороне Xsolla следующая:
Код ответа
Автоматический возврат платежа не включен (по умолчанию)
Автоматический возврат платежа включен
400, 401, 402, 403, 404, 409, 422, 415
Нет действий
Автоматический возврат средств пользователю.
200, 201, 204
Нет действий
Нет действий
Другой код или отсутствие ответа на вебхук
Многократная отправка вебхуков через заданный временной промежуток: 2 попытки с шагом 5 минут, 7 попыток с шагом 15 минут, 10 попыток с шагом 60 минут.
Многократная отправка вебхуков через заданный временной промежуток: 2 попытки с шагом 5 минут, 7 попыток с шагом 15 минут, 10 попыток с шагом 60 минут. Если все вебхуки отправлены, а успешный ответ не получен, осуществляется автоматический возврат средств пользователю.
Для подключения функциональности автоматических возвратов обратитесь к
персональному менеджеру проекта или напишите на csm@xsolla.com
## Отдельные вебхуки
### Отмена заказа (без деталей платежа и транзакции)
- [POST order-cancellation-separate](https://developers.xsolla.com/ru/webhooks/separate-webhooks/order-cancellation-separate.md): Xsolla отправляет вебхук order_canceled на указанный URL-адрес,
когда платеж отменен пользователем, партнером или автоматически. В вебхуке
содержится информация о возвращенных товарах и детали отмененного заказа.
Вебхук не отправляется, если оплата не была успешной, например:
* платежный интерфейс был открыт, но пользователь не оплатил заказ;
* платежный интерфейс был открыт, но при оплате возникли ошибки.
Рекомендуемое время обработки вебхука — до 3 секунд.
### Успешная оплата заказа (без деталей платежа и транзакции)
- [POST successful-order-payment-separate](https://developers.xsolla.com/ru/webhooks/separate-webhooks/successful-order-payment-separate.md): Xsolla отправляет вебхук order_paid на указанный URL-адрес, когда
выполнены условия:
1. Пользователь успешно оплатил заказ.
2. Xsolla получила ответ об успешной обработке вебхука
payment.
В вебхуке order_paid содержится информация о купленных товарах и
детали транзакции.
Вебхук order_paid не отправляется, если:
* Оплата не была успешной, например:
* форма оплаты была открыта, но пользователь не оплатил заказ;
* форма оплаты была открыта, но при оплате возникли ошибки.
* Ответ об успешной обработке вебхука payment не
получен.
Рекомендуется обеспечить время обработки вебхука order_paid менее
3 секунд.
Ожидаемые коды ответов описаны в разделе Responses. Вы можете
использовать другие коды ответов. В зависимости от кода ответа и подключения
функциональности автоматического возврата платежа логика обработки вебхука на
стороне Xsolla следующая:
Код ответа
Автоматический возврат платежа не включен (по умолчанию)
Автоматический возврат платежа включен
400, 401, 402, 403, 404, 409, 422, 415
Нет действий
Автоматический возврат средств пользователю.
200, 201, 204
Нет действий
Нет действий
Другой код или отсутствие ответа на вебхук
Многократная отправка вебхуков через заданный временной промежуток: 2 попытки с шагом 5 минут, 7 попыток с шагом 15 минут, 10 попыток с шагом 60 минут.
Многократная отправка вебхуков через заданный временной промежуток: 2 попытки с шагом 5 минут, 7 попыток с шагом 15 минут, 10 попыток с шагом 60 минут. Если все вебхуки отправлены, а успешный ответ не получен, осуществляется автоматический возврат средств пользователю.
Для подключения функциональности автоматических возвратов обратитесь к
персональному менеджеру проекта или напишите на csm@xsolla.com
## Вебхук персонализации
### Персонализация каталога на стороне партнера
- [POST personalized-partner-catalog](https://developers.xsolla.com/ru/webhooks/personalization/personalized-partner-catalog.md): Xsolla при взаимодействии пользователя с магазином отправит вебхук
partner_side_catalog, который содержит параметры пользователя и
проекта, на URL-адрес вебхука.
В ответе вам следует вернуть список item_id или артикулов
предметов, которые доступны пользователю. При этом вы также можете передать
информацию о том, что конкретный пользователь может купить определенный товар
заданное количество раз. Эта возможность позволяет регулировать количество и
вид товаров, которые пользователь может добавить в корзину и купить.
Рекомендуется обеспечить время обработки вебхука
partner_side_catalog менее 3 секунд.
## Антифрод
### Обновление черного списка системы Anti-fraud
- [POST afs-rejected-blocklist](https://developers.xsolla.com/ru/webhooks/anti-fraud/afs-rejected-blocklist.md): При обновлении черного списка системы Anti-fraud (добавление или удаление параметра) Xsolla отправляет вебхук с типом afs_black_list на URL-адрес вебхука. Добавление параметра выполняется автоматически на стороне Xsolla или по запросу. Удаление параметра возможно только по запросу. Чтобы получать вебхук, добавить или удалить параметр, обратитесь к персональному менеджеру проекта или напишите на csm@xsolla.com.
### Транзакция отклонена при проверке системой Anti-fraud
- [POST afs-rejected-transaction](https://developers.xsolla.com/ru/webhooks/anti-fraud/afs-rejected-transaction.md): Если транзакция была отклонена при проверке системой Anti-fraud, Xsolla
присылает детали транзакции в вебхуке с типом afs_reject URL-адрес вебхука.
Чтобы получать вебхук, обратитесь к персональному менеджеру проекта или
напишите на csm@xsolla.com.
После сохранения URL-адреса вебхука в Личном кабинете вы можете настроить
получение дополнительной информации в вебхуке. Для этого в разделе Настройки
проекта > Вебхуки > Расширенные настройки установите следующий
переключатель в активное положение.
Примечание
Если вы зарегистрировались в Личном кабинете до 22 января 2025 г. (включительно), переключатели располагаются в разделе Настройки проекта > Вебхуки > Тестирование > Payments > Расширенные настройки.
Переключатель
Описание
Показывать информацию о транзакциях сохраненными способами оплаты
В вебхуке будет передаваться информация в кастомных параметрах:saved_payment_method:0 — сохраненный способ оплаты не используется;1 — способ оплаты был сохранен при совершении текущей транзакции;2 — используется ранее сохраненный способ оплаты.payment_type:1 — единоразовый платеж;2 — рекуррентный платеж.
### Диспут
- [POST dispute](https://developers.xsolla.com/ru/webhooks/anti-fraud/dispute.md): При открытии нового диспута или изменении статуса диспута Xsolla отправляет вебхук с типом dispute на URL-адрес вебхука. Чтобы получать вебхук, обратитесь к персональному менеджеру проекта или напишите на csm@xsolla.com.
## Subscriptions
### Отмена подписки
- [POST canceled-subscription](https://developers.xsolla.com/ru/webhooks/subscriptions/canceled-subscription.md): Когда подписка отменяется по каким-либо причинам, Xsolla отправляет вебхук с типом cancel_subscription на URL-адрес вебхука.
### Создание подписки
- [POST created-subscription](https://developers.xsolla.com/ru/webhooks/subscriptions/created-subscription.md): Когда пользователь создает подписку, Xsolla отправляет вебхук с типом create_subscription на URL-адрес вебхука.
### Непродлеваемая подписка
- [POST nonrenewing-subscription](https://developers.xsolla.com/ru/webhooks/subscriptions/nonrenewing-subscription.md): Если статус подписки меняется на непродлеваемый, Xsolla отправляет вебхук с типом non_renewal_subscription на URL-адрес вебхука. Чтобы получать вебхук, обратитесь к персональному менеджеру проекта или напишите на csm@xsolla.com.
### Изменение подписки
- [POST updated-subscription](https://developers.xsolla.com/ru/webhooks/subscriptions/updated-subscription.md): В случае изменения каких-либо параметров (plan_id, date_next_charge) подписки и в случае каждого продления подписки, Xsolla отправляет вебхук с типом update_subscription на URL-адрес вебхука.