История покупок
Для обеих операций необходима авторизованная сессия игрока. Операции охватывают магазин, игровую валюту и игровые услуги, включая бесплатные покупки и оплату с баланса. История платежей запрашивается отдельно.
playerPurchases
playerPurchases
Описание
Возвращает покупки от новых к старым. Чтобы продолжить список, передайте pageInfo.endCursor в after, сохранив фильтры. После изменения фильтра начинайте с after: null. hasNextPage: false означает конец списка.
Входные данные
| Поле | Тип | Описание |
|---|---|---|
first | Int | От 1 до 100, по умолчанию 20. |
after | ID | Курсор предыдущей страницы или null. |
kind | PlayerPurchaseKind | SHOP, GAME_CURRENCY, GAME_SERVICE; null = все типы. |
gameServerId | Int | ID игрового сервера; null = все серверы в истории. |
Пример обмена
{
"documentId": "playerPurchases",
"variables": {
"first": 20,
"after": null,
"kind": "SHOP",
"gameServerId": 1
}
}
{
"data": {
"playerPurchases": {
"items": [
{
"id": "d9b29e6b-ce50-4c3b-9de6-a2b2ea2d839d",
"gameServerId": 1,
"kind": "SHOP",
"total": {
"units": "10000",
"decimal": "100.00",
"currencyCode": "ELX",
"currencyScale": 2
},
"createdAt": "2026-09-11 10:15:00",
"status": "PAID",
"recovery": {
"status": "REQUIRES_REVIEW",
"paid": {
"units": "10000",
"decimal": "100.00",
"currencyCode": "USD",
"currencyScale": 2
},
"recovered": {
"units": "2500",
"decimal": "25.00",
"currencyCode": "USD",
"currencyScale": 2
}
}
}
],
"pageInfo": {
"endCursor": null,
"hasNextPage": false
}
}
}
}
playerPurchase
playerPurchase
Описание
Возвращает карточку покупки: общие сведения, позиции с ценами и состояние каждой награды. Используйте ID заказа из результата оформления или playerPurchases.items[].id.
Входные данные
| Поле | Тип | Описание |
|---|---|---|
id | ID! | Обязательный ID покупки. Это не ID платежа. |
Пример обмена
{
"documentId": "playerPurchase",
"variables": {
"id": "d9b29e6b-ce50-4c3b-9de6-a2b2ea2d839d"
}
}
{
"data": {
"playerPurchase": {
"purchase": {
"id": "d9b29e6b-ce50-4c3b-9de6-a2b2ea2d839d",
"gameServerId": 1,
"kind": "SHOP",
"total": {
"units": "10000",
"decimal": "100.00",
"currencyCode": "ELX",
"currencyScale": 2
},
"createdAt": "2026-09-11 10:15:00",
"status": "PAID",
"recovery": {
"status": "REQUIRES_REVIEW",
"paid": {
"units": "10000",
"decimal": "100.00",
"currencyCode": "USD",
"currencyScale": 2
},
"recovered": {
"units": "2500",
"decimal": "25.00",
"currencyCode": "USD",
"currencyScale": 2
}
}
},
"lines": [
{
"id": "01941f29-7c00-7000-8000-000000000003",
"quantity": "1",
"unitPrice": {
"units": "10000",
"decimal": "100.00",
"currencyCode": "ELX",
"currencyScale": 2
},
"total": {
"units": "10000",
"decimal": "100.00",
"currencyCode": "ELX",
"currencyScale": 2
}
}
],
"rewards": [
{
"id": "01941f29-7c00-7000-8000-000000000004",
"deliveryStatus": "PENDING",
"recovery": "RESTRICTED",
"target": {
"kind": "WAREHOUSE",
"account": null,
"character": null
},
"content": {
"__typename": "PlayerPurchaseItems",
"items": [
{
"itemId": "57",
"quantity": "120",
"enchantLevel": 0
},
{
"itemId": "4037",
"quantity": "2",
"enchantLevel": 0
}
]
}
}
]
}
}
}
Состав ответа
| Поле | Содержание |
|---|---|
purchase.id | Номер покупки. |
purchase.gameServerId | Сервер покупки. |
purchase.kind | SHOP, GAME_CURRENCY, GAME_SERVICE. |
purchase.total | Итоговая сумма покупки. |
purchase.createdAt | Дата оформления в UTC. |
purchase.status | PENDING_PAYMENT, CONFIRMED, PAID, FULFILLING, FULFILLED, CANCELLED. |
purchase.recovery | Сведения об обработке возврата; null, если их нет. |
lines[] | ID позиции, количество, цена единицы и сумма позиции. |
rewards[] | ID награды, получатель, состав и два отдельных состояния: выдачи и возврата. |
Денежные значения передаются без округления: units и decimal являются строками, currencyCode указывает валюту, currencyScale задаёт число знаков после запятой. Количества также передаются строками. Не преобразуйте их в числа с плавающей точкой. Исходный платёж и сумма заказа могут иметь разные валюты.
Возврат покупки
recovery.status | Значение |
|---|---|
PENDING | Возврат обрабатывается. |
REQUIRES_REVIEW | Покупка на рассмотрении. |
RECOVERED | Возврат обработан; итог указан у наград. |
RELEASING | Ограничения снимаются. |
KEPT | Покупка сохранена. |
MANUALLY_RESOLVED | Рассмотрение завершено вручную. |
paid содержит сумму исходного платежа. recovered содержит текущую сумму возврата или проигранного спора в той же валюте. Эти поля не заменяют purchase.total.
Выдача и состояние награды
deliveryStatus принимает PENDING, DELIVERING, DELIVERED, RETRY_SCHEDULED, REQUIRES_REVIEW, CANCELLED.
rewards[].recovery | Значение |
|---|---|
NONE | Нет отдельного состояния возврата. |
PROCESSING | Результат обрабатывается. |
RESTRICTED | Награда временно ограничена. |
DELIVERY_STOPPED | Дальнейшая выдача остановлена. |
RECALLED | Ранее выданная награда отозвана. |
RELEASED | Ограничение снято. |
NEEDS_REVIEW | Необходимо рассмотрение. |
target.kind: WAREHOUSE (склад), GAME_ACCOUNT (игровой аккаунт), CHARACTER (персонаж). account и character равны null, когда для выбранного получателя они не нужны.
Типы содержимого
В persisted-ответе content.__typename определяет доступные поля:
__typename | Поля |
|---|---|
PlayerPurchaseItems | items[]: itemId: ID!, quantity: String!, enchantLevel: Int!. |
PlayerPurchaseCurrency | quantity: String!, itemId: ID, deliveryType: CHARACTER_ITEM | ACCOUNT_POINTS. |
PlayerPurchaseGameService | featureCode: String!. |
При ACCOUNT_POINTS поле itemId равно null. featureCode обозначает заказанную игровую услугу.
Ошибки
extensions.code | Действие |
|---|---|
PLAYER_PURCHASE_NOT_FOUND | Обновите список и проверьте номер покупки. |
PLAYER_PURCHASE_INVALID_REQUEST | Проверьте параметры; при смене фильтров сбросьте курсор. |
PLAYER_PURCHASE_UNAVAILABLE | Повторите чтение позже. |
Ошибки полей возвращаются в стандартном ответе валидации. Эти операции только читают историю и не оформляют возврат.