Разработка
Разработка
Выберите платформу

API дополнений сервера

Обновлено: 15 апр 2025 г.
В этом руководстве обсуждается реализация в приложении процессов, связанных с покупками в приложении (ПВП). Обзор вариантов ПВП см. в статье Дополнения — скачиваемый контент и покупки в приложении.

Запросы REST "сервер-сервер"

Наши API REST "сервер-сервер" предлагают безопасный канал для взаимодействия с платформой Meta Horizon. Например, вы можете отслеживать и расходовать монеты, приобретенные через покупки в приложении на своем доверенном сервере. Это предотвращает любые попытки клиента вмешаться с целью получения драгоценных камней, которые он не покупал. Использовать API "сервер-сервер" не обязательно.
Подробнее о взаимодействии с нашими API см. на странице Основы межсерверного взаимодействия API.

Подтверждение права собственности на товар

Подтверждение того, что пользователь владеет товаром.

Метод запроса/URI:

POST https://graph.oculus.com/$APP_ID/verify_entitlement

Параметры

ПараметрОбязательный или нетОписаниеТипПример
access_token
Обязательный
Маркер носителя, содержащий OC|$APP_ID |$APP_SECRET или маркер доступа пользователя.
Строка
OC|1234|456789
sku
Необязательный
SKU для дополнительного товара, определенный при создании на панели разработчика. Если он не указан, вызывается проверка прав на основное приложение.
Строка
50_gems
user_id
Обязательный
Идентификатор пользователя, покупки которого вы хотите видеть
Строка
123456789
Пример запроса
curl -d "access_token=OC|$APP_ID|$APP_SECRET" -d "user_id=$USER_ID" -d "sku=$SKU" https://graph.oculus.com/$APP_ID/verify_entitlement
Пример ответа
{"success":true,"grant_time":1744148687}

Значения

ПолеОпределениеТип
success
Определяет, имеет ли пользователь право собственности на предмет.
Логическое значение
grant_time
Время, когда пользователь получил права на этот элемент (метка времени в формате Unix).
Число

Расходование товара ПВП

Расходование товара ПВП, приобретенного пользователем. Когда пользователь приобретает расходуемый товар ПВП, приложению необходимо подтвердить покупку, вызвав API расходования.
Подробнее см. в статье Работа с дополнениями.

Метод запроса/URI:

POST https://graph.oculus.com/$APP_ID/consume_entitlement

Параметры

ПараметрОбязательный или нетОписаниеТипПример
access_token
Обязательный
Маркер носителя, содержащий OC|$APP_ID |$APP_SECRET или маркер доступа пользователя.
Строка
OC|1234|456789
sku
SKU товара, определенный при создании на панели разработчика.
Строка
50_gems
 
user_id
Обязательный
Идентификатор пользователя, покупки которого вы хотите видеть
Строка
123456789
Пример запроса
curl -d "access_token=OC|$APP_ID|$APP_SECRET" -d "user_id=$USER_ID" -d "sku=$SKU" https://graph.oculus.com/$APP_ID/consume_entitlement
Пример ответа
{"success":true}

Значения

ПолеОпределениеТип
success
Определяет, успешно ли было использовано право на доступ.
Логическое значение

Получение товаров, которыми владеет пользователь

Получение товаров, принадлежащих пользователю. Результаты поддерживают, разбивку на страницы по курсору, поэтому обязательно извлеките весь список.

Метод запроса/URI:

GET https://graph.oculus.com/$APP_ID/viewer_purchases

Параметры

ПараметрОбязательный или нетОписаниеТипПример
access_token
Обязательный
Маркер носителя, содержащий OC|$APP_ID |$APP_SECRET или маркер доступа пользователя.
Строка
OC|1234|456789
user_id
Обязательный
Идентификатор пользователя, покупки которого вы хотите видеть
Строка
123456789
fields
Необязательный
Список имен полей, разделенных запятыми. Может содержать: id, grant_time, expiration_item, item.
Строка значений через запятую
fields=id,grant_time,expiration_time,item{sku}
Пример запроса
curl -G -d "access_token=OC|$APP_ID|$APP_SECRET" -d "user_id=$USER_ID" -d "fields=id,grant_time,expiration_time,item{sku}" https://graph.oculus.com/$APP_ID/viewer_purchases
Пример ответа
{
  "data": [
    {
      "id":"0",
      "grant_time":1626821865,
      "expiration_time":0,
      "item": {
        "sku":"EXAMPLE1",
        "id":"3911516768971206"
      }
    }
  ],
  "paging": {
    "cursors": {
      "after": "QYFIUjlhQjNhOTJZAR0ZAaMkhhM1JKZADdNX2o0a2FSSlJLSWcw",
      "before": "QYFIUkZAxd2FRSkNoWHJQV3FmRG5TY3BDeUgwRzFaMXd"
    },
    "previous": "https://graph.oculus.com/$APP_ID/viewer_purchases?access_token=..."
    "next": "https://graph.oculus.com/$APP_ID/viewer_purchases?access_token=..."
  }
}

Значения

ПолеОпределениеТип
id
Уникальный идентификатор.
Строка
grant_time
Время, когда пользователь получил права на этот элемент (метка времени в формате Unix).
Число
expiration_time
Время, когда пользователь утратит права на этот элемент (метка времени в формате Unix). Если пользователю предоставлено бессрочное право, его значение будет установлено на 0.
Число
item.sku
SKU времени
Строка

Получить товары, доступные для покупки

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

Метод запроса/URI:

GET https://graph.oculus.com/application/available_purchases

Параметры

Использование секретного маркера приложения позволяет получить доступ ко всем товарам, доступным для покупки. При использовании маркера доступа пользователя отображаются только те товары, которые доступны для покупки этому пользователю.
ПараметрОбязательный или нетОписаниеТипПример
access_token
Обязательный
Маркер носителя, содержащий OC|$APP_ID |$APP_SECRET или маркер доступа пользователя.
Строка
OC|1234|456789
fields
Необязательный
Список имен полей, разделенных запятыми. Может содержать: sku, current_offer, billing_plans (для товаров по подписке).
Строка с разделителями-запятыми
sku,current_offer{description,price{currency,amount_in_hundredths,formatted},name},billing_plans{paid_offer{description,price{currency,amount_in_hundredths,formatted},name},trial_offers{max_term_count,trial_type,trial_term,description,name,price{currency,amount_in_hundredths,formatted}}}
Пример запроса
curl -d "access_token=OC|$APP_ID|$APP_SECRET" -d "fields=sku,current_offer{description,price{currency,amount_in_hundredths,formatted},name},billing_plans{paid_offer{description,price{currency,amount_in_hundredths,formatted},name},trial_offers{max_term_count,trial_type,trial_term,description,name,price{currency,amount_in_hundredths,formatted}}}" -G https://graph.oculus.com/application/available_purchases
Пример ответа
{
  "data": [
    {
      "id": "23518108958879017",
      "sku": "subs-bronze:SUBSCRIPTION__MONTHLY",
      "current_offer": {
        "description": "Subscription - Bronze Description",
        "price": {
          "currency": "USD",
          "amount_in_hundredths": 299,
          "formatted": "$2.99"
        },
        "name": "Subscription - Bronze",
        "id": "6974589902912852"
      },
      "billing_plans": [
        {
          "paid_offer": {
            "description": "Subscription - Bronze Description",
            "price": {
              "currency": "USD",
              "amount_in_hundredths": 299,
              "formatted": "$2.99"
            },
            "name": "Subscription - Bronze",
            "id": "2274589902912852"
          },
          "trial_offers": [
            {
              "trial_type": "FREE_TRIAL",
              "trial_term": "MONTHLY",
              "description": "Subscription - Bronze Description",
              "name": "Subscription - Bronze",
              "price": {
                "currency": "USD",
                "amount_in_hundredths": 0,
                "formatted": "$0.00"
              },
              "id": "3012763990016787"
            }
          ]
        }
      ]
    },
    {
      "id": "23518108958879017",
      "sku": "subs-bronze:SUBSCRIPTION__SEMIANNUAL",
      "current_offer": {
        "description": "Subscription - Bronze Description",
        "price": {
          "currency": "USD",
          "amount_in_hundredths": 999,
          "formatted": "$9.99"
        },
        "name": "Subscription - Bronze",
        "id": "1277845290061617"
      },
      "billing_plans": [
        {
          "paid_offer": {
            "description": "Subscription - Bronze Description",
            "price": {
              "currency": "USD",
              "amount_in_hundredths": 999,
              "formatted": "$9.99"
            },
            "name": "Subscription - Bronze",
            "id": "127784349006157"
          },
          "trial_offers": [
            {
              "trial_type": "FREE_TRIAL",
              "trial_term": "MONTHLY",
              "description": "Subscription - Bronze Description",
              "name": "Subscription - Bronze",
              "price": {
                "currency": "USD",
                "amount_in_hundredths": 0,
                "formatted": "$0.00"
              },
              "id": "121211290016787"
            }
          ]
        }
      ]
    },
  ],
  "paging": {
    "cursors": {
      "after": "QYFIUjlhQjNhOTJZAR0ZAaMkhhM1JKZADdNX2o0a2FSSlJLSWcw",
      "before": "QYFIUkZAxd2FRSkNoWHJQV3FmRG5TY3BDeUgwRzFaMXd"
    }
  }
}

Значения

ПолеОпределениеТип
id
Уникальный идентификатор.
Строка
sku
SKU товара. Товары подписки с несколькими сроками будут возвращаться как отдельные объекты в ответе в формате {SKU}:SUBSCRIPTION__{TERM}.
Строка
current_offer
Самое выгодное платное или пробное предложение по цене.
CurrentOffer
billing_plans
Массив, отображающий тарифные планы подписки. Тарифные планы включают в себя данные о платных предложениях, стартовых предложениях и пробных периодах. ПРИМЕЧАНИЕ. Это относится только к товарам по подписке.
Массив BillingPlan

BillingPlan

ПолеОпределениеТип
trial_offers
Пробные предложения для подписки: Бесплатная пробная версия или ознакомительное предложение.
Массив TrialOffer
paid_offer
Платное предложение, связанное с условием подписки.
PaidOffer

CurrentOffer

ПолеОпределениеТип
description
Описание условий предложения.
Строка
name
Наименование предложения.
Строка
price
Информация о цене, связанная с предложением.
Цена

PaidOffer

ПолеОпределениеТип
subscription_term
Тип подписки (например: MONTHLY, ANNUAL, WEEKLY, BIWEEKLY, QUARTERLY, SEMIANNUAL).
Строка
description
Описание условий предложения.
Строка
name
Наименование предложения.
Строка
price
Стоимость предложения.
Цена

TrialOffer

ПолеОпределениеТип
trial_term
Тип подписки (например: MONTHLY, ANNUAL, WEEKLY, BIWEEKLY, QUARTERLY, SEMIANNUAL).
Строка
trial_type
Вид пробного периода (например: FREE_TRIAL, INTRO_OFFER).
Строка
max_term_count
Число периодов, в течение которых будет действовать intro_offer. Действует только для вводных предложений.
Целое число
description
Описание условий предложения.
Строка
name
Наименование предложения.
Строка
price
Стоимость предложения.
Цена

Цена

ПолеОпределениеТип
currency
Валюта цены (например, USD, EUR).
Строка
amount_in_hundredths
Сумма цены в сотых. Например, цена 11,99 представлена как 1199.
Число
formatted
Отформатированная цена (например, $11,99).
Строка

Возврат средств за товар ПВП

Возврат средств за приобретённый пользователем товар или набор ПВП. Этот метод можно вызвать только для возврата неиспользованных прав на DURABLE или CONSUMABLE

Метод запроса/URI:

POST https://graph.oculus.com/$APP_ID/refund_iap_entitlement

Параметры

ПараметрОбязательный или нетОписаниеТипПример
access_token
Обязательный
Маркер носителя, содержащий OC|$APP_ID |$APP_SECRET или маркер доступа пользователя.
Строка
OC|1234|456789
sku
Обязательный
SKU товара, определенный при создании на панели разработчика.
Строка
50_gems
user_id
Обязательный
Идентификатор пользователя, покупки которого вы хотите видеть
Строка
123456789
reason
Обязательный
Причина возврата (например, customer_support, unable_to_fulfill, другое)
Строка
customer_support
Пример запроса
curl -d "access_token=OC|$APP_ID|$APP_SECRET" -d "user_id=$USER_ID" -d "sku=$SKU" -d "reason=$REASON" https://graph.oculus.com/$APP_ID/refund_iap_entitlement
Пример ответа
{"success":true}

Значения

ПолеОпределениеТип
success
Определяет, был ли возврат права на встроенную покупку успешным.
Логическое значение
Логотип навигации
Русский
© 2026 Meta