Вебхуки — это оповещения о происходящих в системе событиях. При наступлении определенного события Xsolla отправляет HTTP-запрос к вашему приложению, в котором передаются данные о событии. Чаще всего отправляется POST-запрос в JSON-формате.
Примеры событий:
Когда происходит настроенное событие, Xsolla через вебхук оповещает вашу систему об этом. В результате вы можете:
Пример работы вебхука обработки платежей:
Видеоинструкция по интеграции вебхуков Xsolla:
Настройка вебхуков при работе с продуктами и решениями Xsolla:
Продукт/ Решение | Обязательно/ Опционально | Для чего нужны вебхуки |
---|---|---|
Payments | Обязательно |
|
In-Game Store | Обязательно |
|
Game Sales | Опционально | Для продажи ключей не требуется валидация пользователя и начисление ему товаров. Вы можете подключить вебхуки, если вы хотите получать информацию о событиях, например об оплате или отмене заказа. Если вы подключите вебхуки, важно обрабатывать все поступающие обязательные вебхуки. |
Subscriptions | Опционально | Получение информации о создании, изменении или отмене подписки. Альтернативный вариант — запрос информации с помощью API. |
Web Shop | Обязательно |
|
Digital Distribution Hub | Обязательно |
Подробная информация по настройке вебхуков для Digital Distribution Hub приведена в инструкции. |
Если вы используете продукты и решения, для которых работа с вебхуками обязательна, подключите и протестируйте вебхуки в Личном кабинете и настройте их обработку. При наступлении определенных событий вебхуки отправляются последовательно. Поэтому, если вы не обработаете какой-то из вебхуков, последующие вебхуки не будут отправлены. Список необходимых вебхуков представлен ниже.
На стороне 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 ) |
Информация о купленных товарах. Используйте данные вебхука для списания купленных товаров у пользователя. |
Если вы используете персонализацию каталога товаров, реализованную на стороне вашего приложения, настройте обработку вебхука Персонализация каталога на стороне партнера.
Примечание
Чтобы принимать реальные платежи, достаточно подписать лицензионный договор и реализовать обработку вебхуков:
Для автоматического управления планами подписок необходимо реализовать обработку основных вебхуков:
user_validation
) — отправляется на разных этапах оплаты,
чтобы удостовериться, что пользователь зарегистрирован в игре.payment
) —
отправляется, когда заказ оплачен, и содержит информацию о данных платежа и
детали транзакции.create_subscription
) — отправляется, когда был получен ответ об успешной
обработке вебхука Успешный платеж или
пользователь приобрел подписку с пробным периодом. Содержит детали купленной
подписки и данные пользователя. Используйте данные вебхука для добавления
подписки пользователю.update_subscription
) — отправляется при продлении или изменении подписки,
когда был получен ответ об успешной обработке вебхука Успешный
платеж. Содержит детали купленной подписки и данные пользователя.
Используйте данные вебхука для продления подписки пользователю или изменения
параметров подписки.refund
) —
отправляется, когда заказ был отменен, и содержит информацию о данных
отмененного платежа и детали транзакции.cancel_subscription
) — отправляется, если был получен ответ об успешной
обработке вебхука Возврат платежа или
подписка была отменена по другой причине. Содержит информацию о подписке и
данные пользователя. Используйте данные вебхука для списания купленных подписок
у пользователя.Чтобы включить получение вебхуков:
https://example.com
. Вы также можете ввести
URL-адрес из инструмента для тестирования вебхуков.Внимание
Для передачи данных используется протокол HTTPS, протокол HTTP не поддерживается.
Примечание
Для тестирования вебхуков вы можете выбрать любой специализированный сайт, например webhook.site, или платформу, например ngrok.
Внимание
Вы не можете отправлять вебхуки на разные URL-адреса одновременно. Однако вы можете сначала указать в Личном кабинете URL-адрес для тестирования, а затем изменить его на боевой.
Чтобы отключить получение вебхуков:
Для вебхуков раздела Payments and Store доступны расширенные настройки. Они автоматически отобразятся под блоком Общие настройки после того, как вы нажмете кнопку Получать вебхуки.
Примечание
Если расширенные настройки не отображаются, убедитесь, что получение вебхуков подключено в общих настройках и вы находитесь на вкладке Тестирование > Payments and Store.
В этом разделе вы можете настроить получение дополнительной информации в вебхуках. Для этого установите соответствующие переключатели в активное положение. В строке каждого разрешения указаны вебхуки, на которые повлияют изменение настроек.
Переключатель | Описание |
---|---|
Показывать информацию о сохраненном платежном аккаунте | Информация о сохраненном способе оплаты передается в кастомном объекте payment_account . |
Показывать информацию о транзакциях сохраненными способами оплаты | В вебхуке будет передаваться информация в кастомных параметрах:
|
Добавить объект order в вебхук | В вебхуке Успешный платеж будет передаваться информация о заказе в объекте order . |
Показывать только необходимую информацию о пользователе без чувствительных данных | В вебхуке о пользователе будет передаваться только следующая информация:
|
Передавать кастомные параметры | В вебхуке будет передаваться информация о кастомных параметрах из токена. |
Показывать БИН карты и последние 4 цифры ее номера | В вебхуке будет передаваться следующая информация о номере карты:
|
Показывать бренд карты | Бренд карты, с которой была совершена оплата. Например, Mastercard или Visa. |
Тестирование вебхуков помогает убедиться в корректной настройке проекта как на вашей стороне, так и на стороне Xsolla.
Если вебхуки настроены успешно, ниже блока настройки вебхуков отобразится блок тестирования вебхуков.
Содержание блока зависит от варианта получения вебхуков.
Если вы получаете объединенные вебхуки:
Название вкладки для тестирования вебхуков | Название и тип вебхука |
---|---|
Payments and Store | Проверка пользователей > Проверка существования пользователя (user_validation ) |
Игровые сервисы > Объединенные вебхуки > Успешная оплата заказа (order_paid ) |
|
Игровые сервисы > Объединенные вебхуки > Отмена заказа (order_canceled ) |
|
Subscriptions | Проверка пользователей > Проверка существования пользователя (user_validation ) |
Платежи > Успешный платеж (payment ) |
Если вы получаете отдельные вебхуки:
Название вкладки для тестирования вебхуков | Название и тип вебхука |
---|---|
Store | Игровые сервисы > Отдельные вебхуки > Успешная оплата заказа (order_paid ) |
Игровые сервисы > Отдельные вебхуки > Отмена заказа (order_canceled ) |
|
Payments | Проверка пользователей > Проверка существования пользователя (user_validation ) |
Платежи > Успешный платеж (payment ) |
|
Subscriptions | Проверка пользователей > Проверка существования пользователя (user_validation ) |
Платежи > Успешный платеж (payment ) |
Примечание
Если в блоке тестирования отобразилось предупреждение, что тест не пройден, проверьте настройки ответа на вебхук в вашем обработчике вебхуков. Причины ошибок в тестировании указаны в результатах тестирования.
Пример:
Для тестирования вы используете специализированный сайт webhook.site.
В разделе Тестирование ответа на неверную подпись отображается ошибка.
Это происходит, потому что Xsolla отправляет вебхук с неверной подписью и ожидает, что ваш обработчик ответит 4xx
HTTP-кодом с указанием кода ошибки INVALID_SIGNATURE
.
webhook.site отправляет 200
HTTP-код в ответ на все вебхуки, в том числе на вебхук с неверной подписью. Ожидаемый 4xx
HTTP-код не может быть получен, поэтому в результате тестирования отображается ошибка.
Далее описан процесс тестирования для сценария с объединенными вебхуками.
На вкладке Payments and Store вы можете протестировать работу следующих вебхуков:
user_validation
)order_paid
)order_canceled
)Чтобы протестировать вебхуки:
В блоке тестирования вебхуков перейдите на вкладку Payments and Store.
В раскрывающемся списке выберите тип товара. Если выбранный тип товара еще не настроен в Личном кабинете, нажмите:
Заполните необходимые поля:
Нажмите Проверить вебхук.
На URL-адрес сервера вебхуков придут вебхуки Проверка существования пользователя, Успешная оплата заказа и Отмена заказа с указанными данными. Ниже кнопки Проверить вебхук отобразятся результаты тестирования каждого типа вебхука.
Если в вашем проекте включен public user ID, в результатах тестирования также отобразится проверка поиска пользователя.
Для каждого вебхука вам необходимо настроить обработку обоих сценариев: успешного и с ошибкой.
На вкладке Subscriptions вы можете протестировать работу следующих вебхуков при управлении подписками:
user_validation
)payment
)Примечание
В Личном кабинете вы можете протестировать только базовые вебхуки Проверка существования пользователей и Успешный платеж. Для тестирования остальных вебхуков перейдите к разделам:
Примечание
Для тестирования вебхуков у вас должен быть создан хотя бы один план подписки в разделе Личный кабинет> Subscriptions > Планы подписки.
Чтобы выполнить тестирование:
0
.На указанный URL-адрес придут вебхуки с введенными данными. Ниже кнопки Тестировать вебхуки отобразятся результаты тестирования каждого вебхука как для успешного сценария, так и для случая возникновения ошибки.
Обработчик вебхуков – это программный код, который позволяет принимать поступающие вебхуки на указанный URL-адрес, генерировать подпись и отправлять ответ на вебхук на сервер Xsolla.
Примечание
Вы можете использовать библиотеку Pay Station PHP SDK, которая содержит готовые классы для обработки вебхуков.
На стороне вашего приложения реализуйте прием вебхуков со следующих IP-адресов:
185.30.20.0/24
, 185.30.21.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
.
Ограничения:
При получении вебхука необходимо обеспечить безопасность передачи данных. Для этого из данных вебхука необходимо сгенерировать подпись и проверить, что она совпадает с подписью, отправленной в заголовке 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 -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"
}
}'
Чтобы подтвердить получение вебхука, ваш сервер должен вернуть:
200
, 201
, или 204
HTTP-код в случае успешного ответа.400
HTTP-код с описанием
проблемы, если указанный пользователь не был найден или если передана
недействительная подпись. Ваш обработчик вебхуков также может возвращать 5xx
HTTP-код при временных проблемах на вашем сервере.Если на вебхуки Успешная
оплата заказа и Отмена
заказа сервер Xsolla не получил ответ или получил ответ с кодом 5xx
,
осуществляется повторная отправка вебхуков по следующему расписанию:
Максимально осуществляется 20 попыток отправки вебхуков в течение 12 часов с момента первой попытки.
Если на вебхук Успешный платеж или Возврат платежа сервер Xsolla не получил
ответ или получил ответ с 5xx
HTTP-кодом, также осуществляется повторная
отправка вебхуков через увеличивающийся временной интервал. Максимально
осуществляется 12 попыток в течение 12 часов.
Внимание
Если возврат платежа был инициирован Xsolla и в ответе на вебхук Возврат платежа пришел ответ с `5xx` HTTP-кодом, платеж все равно будет возвращен.
Если на вебхук Проверка
существования пользователя сервер 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
.
Вебхук | Тип оповещения | Описание |
---|---|---|
Проверка существования пользователя | user_validation |
Проверка существования пользователя в игре. |
Поиск пользователя | user_search |
Получение информации о пользователе по публичному ID пользователя. |
Успешный платеж | payment |
Оповещение об успешном платеже. |
Возврат платежа | refund |
Оповещение об отмене платежа. |
Частичный возврат платежа | partial_refund |
Оповещение о частичном возврате платежа. |
Транзакция отклонена при проверке AFS | afs_reject |
Оповещение об отмене транзакции системой расширенного антифрода. |
Обновление черного списка AFS | afs_black_list |
Оповещение об изменении черного списка AFS. |
Создание подписки | create_subscription |
Оповещение о создании подписки. |
Изменение подписки | update_subscription |
Оповещение о продлении подписки или о смене каких-либо параметров внутри подписки. |
Отмена подписки | cancel_subscription |
Оповещение об отмене подписки. |
Непродлеваемая подписка | non_renewal_subscription |
Оповещение о смене статуса на непродлеваемый. |
Добавление платежного аккаунта | payment_account_add |
Оповещение о добавлении или сохранении платежного аккаунта. |
Удаление платежного аккаунта | payment_account_remove |
Оповещение об удалении платежного аккаунта. |
Проверка пользователя в Web Shop | - |
Отправлено из Web Shop для проверки существования пользователя в игре. |
Персонализация каталога на стороне партнера | partner_side_catalog |
Отправляется, когда пользователь взаимодействует с магазином. |
Успешная оплата заказа | order_paid |
Отправляется, когда заказ оплачен. |
Отмена заказа | order_canceled |
Отправляется, когда заказ отменен. |
Диспут | dispute |
Оповещение об открытии нового диспута. |