Отслеживание статуса заказа
Отслеживание статуса заказа требуется, чтобы убедиться, что оплата прошла успешно, и начислить товары пользователю.
Выберите способ отслеживания статуса заказа:
Выберите наиболее подходящий для вашего проекта способ обращения к данным Xsolla:
Если у вас нет своего сервера или вы используете логику обработки покупок на стороне клиента, вы можете использовать следующие способы:
Получение статуса заказа на стороне клиента с помощью веб-сокет-соединения
Решение предусматривает использование веб-сокетов для получения статусов заказа без получения подробной информации о самом заказе. Этот способ является предпочтительным: между клиентом (например, вашим сайтом или мобильным приложением) и сервером Xsolla устанавливается только одно подключение, поэтому нет дополнительной нагрузки ни на клиент, ни на сервер.
Выполните следующие действия:
- Для того чтобы веб-сокет-сервер Xsolla и ваш клиент могли идентифицировать сообщения со статусом заказа, создайте соединение:
- javascript
const client = new Centrifuge(
connectionURL,
{
data: {
user_external_id: user_external_id,
auth: auth,
project_id: project_id
}
}
)
connectionURL - wss://ws-store.xsolla.com/connection/websocket
auth - user JWT token
- Чтобы получать новые сообщения о статусах заказов, подпишитесь на события с помощью функции
client.on
:
- javascript
client.on('publication', (ctx) => {
//handle the status
});
- Установите соединение:
- javascript
client.connect()
- Чтобы получать историю изменений статусов заказов, подключите метод API history method.
- javascript
client.on('subscribed', function (ctx) {
client.history(ctx.channel, { limit: -1, since: { offset: 0 }, reverse: false }).then(function (resp) {
resp.publications.forEach((ctx) => {
/handle the status
});
}, function (err) {
//handle the status
});
});
Пример тела сообщения:
- javascript
{
order_id: 59614241,
status: 'new'
}
Возможны следующие статусы заказа:
New
— заказ создан и еще не оплачен.Paid
— заказ оплачен.Done
— заказ полностью доставлен (в том числе отправлены все чеки, выполнены доставки на стороне Xsolla, внешних платформ и т.д.).Canceled
— заказ отменен, оплата возвращена пользователю.
Рекомендации при работе с веб-сокетами:
- Установите максимальное время ожидания ответча через веб-сокет — 5 минут.
- Устанавливайте соединение при открытии платежного интерфейса.
- Прерывайте соединение после получения финального статуса заказа:
Canceled
илиDone
. - По истечении времени жизни веб-сокета или при возникновении проблем с соединением используйте простые запросы.
Простые запросы (short-polling)
Чтобы получить детальную информацию о товарах в заказе после перехода в нужный статус, используйте API-метод Получение заказа.
ПримечаниеИспользуется периодический опрос статуса заказа — простой HTTP-запрос, который получает текущий статус заказа, а также информацию по нему. Рекомендуемая задержка между запросами — 3 секунды.
Метод XsollaCatalog.Purchase
инкапсулирует в себе несколько методов отслеживания статуса заказа. Механизм отслеживания подробно описан в документации SDK для Unity (ПК, веб).
Дополнительно вы можете реализовать обработку статуса и содержимого заказа, которые передаются в функцию обратного вызова onSuccess
метода покупки.
Для запроса статуса и содержимого заказа вызовите метод SDK CheckPendingOrder
, передав в него следующие параметры:
AccessToken
— платежный токен, который был получен при покупке товара.OrderId
— ID заказа, который был получен при покупке товара.SuccessCallback
— обработчик, вызываемый после успешной проверки заказа. В ответе будет получен статус заказа.ErrorCallback
— обработчик, вызываемый в случае ошибки при выполнении запроса.bIsUserInvolvedToPayment
— участвует ли пользователь в процессе оплаты. Передайте значениеtrue
для покупки за реальную валюту, ffalse
— для бесплатной покупки товара и покупки за виртуальную валюту.
Механизм отслеживания подробно описан в документации SDK для Unreal Engine.
Для запроса статуса и содержимого заказа вызовите метод SDK CheckOrder
, передав в него следующие параметры:
AccessToken
— платежный токен, который был получен при покупке товара.OrderId
— ID заказа, который был получен при покупке товара.SuccessCallback
— обработчик, вызываемый после успешной проверки заказа. В ответе будет получен статус заказа.ErrorCallback
— обработчик, вызываемый в случае ошибки при выполнении запроса.
Для отслеживания статусов создаваемых заказов и их валидации вам потребуется настроить обработку вебхуков на серверной части вашего приложения.
На стороне 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 ) | Информация о купленных товарах. Используйте данные вебхука для списания купленных товаров у пользователя. |
Если вы используете персонализацию каталога товаров, реализованную на стороне вашего приложения, настройте обработку вебхука Персонализация каталога на стороне партнера.
Полный список вебхуков и общая информация о работе с ними приведены в документации по вебхукам.
Настройка отправки вебхуков
Чтобы настроить вебхуки на стороне Xsolla:
- Откройте проект в Личном кабинете.
- Нажмите Настройки проекта в боковом меню и перейдите в раздел Вебхуки.
- В поле URL вебхука укажите URL-адрес, на который Xsolla будет отправлять вебхуки.
- Нажмите Получать вебхуки.
Реализация обработчика вебхуков
Обработчик вебхуков — это программный код, который позволяет принимать поступающие вебхуки на указанный URL-адрес, генерировать подпись и отправлять ответ на вебхук на сервер Xsolla.
Генерация подписи
При получении вебхука необходимо обеспечить безопасность передачи данных. Для этого из данных вебхука необходимо сгенерировать подпись и проверить, что она совпадает с подписью, отправленной в заголовке HTTP-запроса.
Чтобы сгенерировать подпись:
- Осуществите конкатенацию JSON из тела запроса и секретного ключа проекта.
- Примените SHA-1 криптографическую хэш-функцию к получившейся на первом шаге строке.
Отправка ответов на вебхук
Чтобы подтвердить получение вебхука, ваш сервер должен вернуть:
200
,201
, или204
HTTP-код в случае успешного ответа.400
HTTP-код с описанием проблемы, если указанный пользователь не был найден или если передана недействительная подпись.
Ваш обработчик вебхуков также может возвращать код 5xx
при временных проблемах на вашем сервере.
Если на вебхуки Успешная оплата заказа и Отмена заказа сервер Xsolla не получил ответ или получил ответ с кодом 5xx
, осуществляется повторная отправка вебхуков по следующему расписанию:
- 2 попытки с интервалом 5 минут;
- 7 попыток с интервалом 15 минут;
- 10 попыток с интервалом 60 минут.
Максимально осуществляется 20 попыток отправки вебхуков в течение 12 часов с момента первой попытки.
Если на вебхук Успешный платеж сервер Xsolla не получил ответ или получил ответ с 5xx
HTTP-кодом, также осуществляется повторная отправка вебхуков через увеличивающийся временной интервал. Максимально осуществляется 12 попыток в течение 12 часов.
Если на вебхук Проверка существования пользователя сервер Xsolla не получил ответ или получил ответ с 400
или 5xx
HTTP-кодом, повторная отправка вебхука Проверка существования пользователя не осуществляется.
Пользователь увидит ошибку, вебхуки Успешный платеж и Успешная оплата заказа отправлены не будут.
Нашли опечатку или ошибку в тексте? Выделите ее и нажмите Ctrl+Enter.