REST Resource: purchases.subscriptions

Ресурс: Покупка подписки

Ресурс SubscriptionPurchase указывает статус покупки подписки пользователем.

JSON-представление
{
  "kind": string,
  "startTimeMillis": string,
  "expiryTimeMillis": string,
  "autoResumeTimeMillis": string,
  "autoRenewing": boolean,
  "priceCurrencyCode": string,
  "priceAmountMicros": string,
  "introductoryPriceInfo": {
    object (IntroductoryPriceInfo)
  },
  "countryCode": string,
  "developerPayload": string,
  "paymentState": integer,
  "cancelReason": integer,
  "userCancellationTimeMillis": string,
  "cancelSurveyResult": {
    object (SubscriptionCancelSurveyResult)
  },
  "orderId": string,
  "linkedPurchaseToken": string,
  "purchaseType": integer,
  "priceChange": {
    object (SubscriptionPriceChange)
  },
  "profileName": string,
  "emailAddress": string,
  "givenName": string,
  "familyName": string,
  "profileId": string,
  "acknowledgementState": integer,
  "externalAccountId": string,
  "promotionType": integer,
  "promotionCode": string,
  "obfuscatedExternalAccountId": string,
  "obfuscatedExternalProfileId": string
}
Поля
kind

string

Этот тип представляет собой объект subscriptionPurchase в службе androidpublisher.

startTimeMillis

string ( int64 format)

Время, когда была оформлена подписка, в миллисекундах с начала эпохи.

expiryTimeMillis

string ( int64 format)

Время истечения срока действия подписки, в миллисекундах с начала эпохи.

autoResumeTimeMillis

string ( int64 format)

Время, по истечении которого подписка будет автоматически возобновлена, в миллисекундах с начала эпохи. Отображается только в том случае, если пользователь запросил приостановку подписки.

autoRenewing

boolean

Будет ли подписка автоматически продлеваться по истечении текущего срока действия?

priceCurrencyCode

string

Код валюты ISO 4217 для стоимости подписки. Например, если цена указана в британских фунтах стерлингов, priceCurrencyCode будет "GBP".

priceAmountMicros

string ( int64 format)

Цена подписки. Для стран, где налог не включен в цену, цена включает налог. Для стран, где налог включен в цену, цена включает налог. Цена выражается в микроединицах, где 1 000 000 микроединиц представляет собой одну единицу валюты. Например, если цена подписки составляет €1,99, priceAmountMicros равно 1990000.

introductoryPriceInfo

object ( IntroductoryPriceInfo )

Информация о вводной цене подписки. Она отображается только в том случае, если подписка была приобретена по вводной цене.

Это поле не указывает на то, что подписка в данный момент находится в периоде действия льготной цены.

countryCode

string

Код страны/региона ISO 3166-1 alpha-2, используемый для выставления счетов пользователем на момент оформления подписки.

developerPayload

string

Строка, заданная разработчиком, содержащая дополнительную информацию о заказе.

paymentState

integer

Состояние оплаты подписки. Возможные значения: 0. Оплата в ожидании; 1. Оплата получена; 2. Бесплатная пробная версия; 3. Ожидание отложенного обновления/понижения версии.

Отсутствует для отмененных или истекших подписок.

cancelReason

integer

Причина отмены подписки или невозможности автоматического продления. Возможные значения: 0. Пользователь отменил подписку; 1. Подписка была отменена системой, например, из-за проблем с оплатой; 2. Подписка была заменена новой; 3. Подписка была отменена разработчиком.

userCancellationTimeMillis

string ( int64 format)

Время отмены подписки пользователем в миллисекундах с начала эпохи. Отображается только в том случае, если cancelReason равно 0.

cancelSurveyResult

object ( SubscriptionCancelSurveyResult )

Информация, предоставляемая пользователем при прохождении процедуры отмены подписки (опрос о причинах отмены).

orderId

string

Идентификатор заказа последнего повторяющегося заказа, связанного с покупкой подписки. Если подписка была отменена из-за отклонения платежа, это будет идентификатор заказа, по которому был отклонен платеж.

linkedPurchaseToken

string

Токен покупки, использованный при первоначальной покупке данной подписки, если она относится к одной из следующих категорий: 0. Повторная регистрация отмененной, но не истекшей подписки; 1. Повышение/понижение уровня предыдущей подписки.

Например, предположим, что пользователь изначально зарегистрировался, и вы получили токен покупки X, затем пользователь отменяет регистрацию и проходит процедуру повторной регистрации (до истечения срока действия подписки), и вы получаете токен покупки Y, и, наконец, пользователь обновляет свою подписку, и вы получаете токен покупки Z. Если вы вызываете этот API с токеном покупки Z, это поле будет установлено в значение Y. Если вы вызываете этот API с токеном покупки Y, это поле будет установлено в значение X. Если вы вызываете этот API с токеном покупки X, это поле не будет установлено.

purchaseType

integer

Тип покупки подписки. Это поле заполняется только в том случае, если покупка была совершена не с использованием стандартного способа оплаты внутри приложения. Возможные значения: 0. Тестовая версия (т.е. приобретена с тестового аккаунта) 1. Промоверсия (т.е. приобретена с использованием промокода)

priceChange

object ( SubscriptionPriceChange )

Актуальная информация об изменении цен. Она отображается только в случае предстоящего изменения цены на подписку, которое еще не вступило в силу.

После продления подписки по новой цене или ее отмены информация об изменении цены предоставляться не будет.

profileName

string

Имя пользователя в профиле на момент покупки подписки. Отображается только для покупок, совершенных с помощью функции «Подписаться через Google».

emailAddress

string

Адрес электронной почты пользователя на момент покупки подписки. Отображается только для покупок, совершенных с помощью функции «Подписаться через Google».

givenName

string

Имя пользователя, указанное при покупке подписки. Отображается только для покупок, совершенных с помощью функции «Подписаться через Google».

familyName

string

Фамилия пользователя на момент покупки подписки. Отображается только для покупок, совершенных с помощью функции «Подписка через Google».

profileId

string

Идентификатор профиля Google пользователя на момент покупки подписки. Отображается только для покупок, совершенных с помощью функции «Подписаться через Google».

acknowledgementState

integer

Состояние подтверждения подписки на продукт. Возможные значения: 0 — Подтверждение еще не получено; 1 — Подтверждено.

externalAccountId

string

Идентификатор учетной записи пользователя в стороннем сервисе. Присутствует только в том случае, если привязка учетной записи произошла в процессе покупки подписки.

promotionType

integer

Тип акции, примененной к этой покупке. Это поле заполняется только в том случае, если акция применялась при покупке подписки. Возможные значения: 0. Разовый код; 1. Индивидуальный код.

promotionCode

string

Промокод, примененный к этой покупке. Это поле заполняется только в том случае, если при покупке подписки был применен промокод.

obfuscatedExternalAccountId

string

Зашифрованная версия идентификатора, уникально связанного с учетной записью пользователя в вашем приложении. Присутствует при следующих покупках: * Если привязка учетной записи произошла в процессе покупки подписки. * Если идентификатор был указан с помощью https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setobfuscatedaccountid при совершении покупки.

obfuscatedExternalProfileId

string

Зашифрованная версия идентификатора, уникально связанного с профилем пользователя в вашем приложении. Присутствует только в том случае, если указан с помощью https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setobfuscatedprofileid при совершении покупки.

Информация о вводной цене

Содержит информацию о вводной цене подписки.

JSON-представление
{
  "introductoryPriceCurrencyCode": string,
  "introductoryPriceAmountMicros": string,
  "introductoryPricePeriod": string,
  "introductoryPriceCycles": integer
}
Поля
introductoryPriceCurrencyCode

string

Код валюты ISO 4217 для вводной цены подписки. Например, если цена указана в британских фунтах стерлингов, priceCurrencyCode будет "GBP".

introductoryPriceAmountMicros

string ( int64 format)

Вводная цена подписки без учета налогов. Валюта совпадает с priceCurrencyCode. Цена выражается в микроединицах, где 1 000 000 микроединиц представляет собой одну единицу валюты. Например, если цена подписки составляет €1,99, priceAmountMicros будет равно 1990000.

introductoryPricePeriod

string

Вводный ценовой период, указанный в формате ISO 8601. Распространенные значения (но не ограничиваясь ими): "P1W" (одна неделя), "P1M" (один месяц), "P3M" (три месяца), "P6M" (шесть месяцев) и "P1Y" (один год).

introductoryPriceCycles

integer

Количество расчетных периодов, в течение которых предлагается вводная цена.

Результаты опроса об отмене подписки

Информация, предоставляемая пользователем при прохождении процедуры отмены подписки (опрос о причинах отмены).

JSON-представление
{
  "cancelSurveyReason": integer,
  "userInputCancelReason": string
}
Поля
cancelSurveyReason

integer

Причина отмены, указанная пользователем в опросе. Возможные значения: 0. Другое 1. Я недостаточно часто пользуюсь этим сервисом 2. Технические проблемы 3. Причины, связанные со стоимостью 4. Я нашел лучшее приложение

userInputCancelReason

string

Пользовательский ввод причины отмены. Присутствует только тогда, когда cancelReason равен 0.

Изменение цены подписки

Содержит информацию об изменении цены подписки, которую можно использовать для управления действиями пользователя при изменении цены в приложении. Это может быть, например, запрос подтверждения от пользователя или персонализация пользовательского опыта для успешной конверсии.

JSON-представление
{
  "newPrice": {
    object (Price)
  },
  "state": integer
}
Поля
newPrice

object ( Price )

Новая цена, по которой будет продлена подписка, если пользователь примет изменение цены.

state

integer

Текущее состояние изменения цены. Возможные значения: 0. Ожидается: состояние, при котором изменение цены ожидает подтверждения пользователя. В этом состоянии вы можете дополнительно запросить подтверждение у пользователя с помощью API приложения. 1. Принято: состояние, при котором изменение цены будет принято, и подписка будет продлеваться, если не будет отменена. Изменение цены вступит в силу в будущем, при продлении подписки. Обратите внимание, что изменение может не произойти при следующем продлении подписки.

Методы

acknowledge

Подтверждает покупку подписки.

cancel

Отменяет покупку подписки пользователем.

defer

Откладывает покупку подписки пользователем до указанного будущего времени истечения срока действия.

get
(deprecated)

Устарело: используйте purchases.subscriptionsv2.get вместо этого.

refund
(deprecated)

Устарело: используйте orders.refund вместо этого.

revoke
(deprecated)

Устарело: используйте purchases.subscriptionsv2.revoke вместо этого.

коды ошибок

При работе с этим ресурсом возвращаются следующие коды ошибок HTTP:

Код ошибки Причина Описание Разрешение
400 / 410 subscriptionExpired Срок действия подписки истек, и запрошенная операция не может быть выполнена. Проверьте срок действия подписки. Эта операция не допускается для подписок с истекшим сроком действия.
400 subscriptionInvalidArgument В запросе на подписку был указан недопустимый аргумент. Ознакомьтесь с документацией API и убедитесь, что все необходимые поля заполнены и правильно отформатированы.
400 invalidPurchaseState Покупка находится в недействительном состоянии для выполнения запрошенной операции. Например, вы можете пытаться подтвердить уже совершенную покупку или отменить неактивную подписку. Перед выполнением операции проверьте текущее состояние ресурса с помощью соответствующего API-запроса Get. Убедитесь, что ресурс находится в подходящем состоянии для выполнения действия.
400 invalidValue В запросе было предоставлено недопустимое значение. Такая ошибка часто возникает при получении некорректного или недействительного токена покупки. Исправьте недопустимое значение поля в теле запроса или параметрах в соответствии со справочником API.
400 prepaidSubscriptionNotSupported Данная операция не поддерживается для предоплаченных подписок. Убедитесь, что операция применима к типу подписки. Эта ошибка характерна именно для таких методов, как «Отмена», «Отсрочка», «Возврат средств» или «Отзыв».
400 productNotOwnedByUser Предоставленный токен покупки действителен, но пользователь в данный момент не является владельцем продукта. Это может произойти, если покупка была возвращена, аннулирована или истек срок ее действия до подтверждения. Перед выполнением операции проверьте текущее состояние ресурса с помощью соответствующего API-запроса Get. Убедитесь, что ресурс находится в подходящем состоянии для выполнения действия.
400 purchaseTokenMismatch Предоставленный токен покупки не соответствует покупке, названию пакета, идентификатору подписки или идентификатору продукта. Убедитесь, что все данные в запросе верны и соответствуют друг другу.
400 required В запросе отсутствует обязательное поле или параметр. Ознакомьтесь с документацией API, чтобы убедиться в наличии всех обязательных полей и параметров.
400 unsupportedIabType Данная операция не поддерживается для указанного типа внутриигровых покупок. Убедитесь, что метод API совместим с управляемым типом элемента.
403 userInsufficientPermission У пользователя недостаточно прав для выполнения запрошенной операции. Убедитесь, что авторизованный пользователь имеет необходимые разрешения в консоли Google Play. Дополнительные сведения см. в разделе «Использование служебной учетной записи» .
404 notFound Запрошенный ресурс не найден. Убедитесь в правильности идентификаторов (например, токен покупки, название пакета, идентификатор продукта, идентификатор подписки).
409 concurrentUpdate Была предпринята попытка обновить объект, который обновляется одновременно с первым. Повторите запрос с экспоненциальной задержкой. Избегайте одновременных изменений одного и того же ресурса.
410 purchaseTokenNoLongerValid Токен покупки окончательно недействителен, поскольку связанная с ним учетная запись пользователя была удалена или запись о покупке больше не существует. Прекратите использование этого токена покупки.
410 subscriptionNoLongerAvailable Возможность приобретения подписки больше недоступна для запроса, поскольку срок ее действия истек слишком давно. Эта ошибка указывает на то, что срок действия подписки истек более 60 дней назад. Вам больше не следует запрашивать информацию по этим подпискам.
5xx Generic error Общая ошибка на сервере Google Play. Повторите запрос.

Если проблема не исчезнет, ​​обратитесь к своему менеджеру аккаунта Google Play или отправьте запрос в службу поддержки. Рекомендуем проверить панель состояния Play на наличие известных сбоев.