- Ресурс: Покупка подписки
- Информация о вводной цене
- Результаты опроса об отмене подписки
- Изменение цены подписки
- Методы
Ресурс: Покупка подписки
Ресурс SubscriptionPurchase указывает статус покупки подписки пользователем.
| JSON-представление |
|---|
{ "kind": string, "startTimeMillis": string, "expiryTimeMillis": string, "autoResumeTimeMillis": string, "autoRenewing": boolean, "priceCurrencyCode": string, "priceAmountMicros": string, "introductoryPriceInfo": { object ( |
| Поля | |
|---|---|
kind | Этот тип представляет собой объект subscriptionPurchase в службе androidpublisher. |
startTimeMillis | Время, когда была оформлена подписка, в миллисекундах с начала эпохи. |
expiryTimeMillis | Время истечения срока действия подписки, в миллисекундах с начала эпохи. |
autoResumeTimeMillis | Время, по истечении которого подписка будет автоматически возобновлена, в миллисекундах с начала эпохи. Отображается только в том случае, если пользователь запросил приостановку подписки. |
autoRenewing | Будет ли подписка автоматически продлеваться по истечении текущего срока действия? |
priceCurrencyCode | Код валюты ISO 4217 для стоимости подписки. Например, если цена указана в британских фунтах стерлингов, priceCurrencyCode будет "GBP". |
priceAmountMicros | Цена подписки. Для стран, где налог не включен в цену, цена включает налог. Для стран, где налог включен в цену, цена включает налог. Цена выражается в микроединицах, где 1 000 000 микроединиц представляет собой одну единицу валюты. Например, если цена подписки составляет €1,99, priceAmountMicros равно 1990000. |
introductoryPriceInfo | Информация о вводной цене подписки. Она отображается только в том случае, если подписка была приобретена по вводной цене. Это поле не указывает на то, что подписка в данный момент находится в периоде действия льготной цены. |
countryCode | Код страны/региона ISO 3166-1 alpha-2, используемый для выставления счетов пользователем на момент оформления подписки. |
developerPayload | Строка, заданная разработчиком, содержащая дополнительную информацию о заказе. |
paymentState | Состояние оплаты подписки. Возможные значения: 0. Оплата в ожидании; 1. Оплата получена; 2. Бесплатная пробная версия; 3. Ожидание отложенного обновления/понижения версии. Отсутствует для отмененных или истекших подписок. |
cancelReason | Причина отмены подписки или невозможности автоматического продления. Возможные значения: 0. Пользователь отменил подписку; 1. Подписка была отменена системой, например, из-за проблем с оплатой; 2. Подписка была заменена новой; 3. Подписка была отменена разработчиком. |
userCancellationTimeMillis | Время отмены подписки пользователем в миллисекундах с начала эпохи. Отображается только в том случае, если cancelReason равно 0. |
cancelSurveyResult | Информация, предоставляемая пользователем при прохождении процедуры отмены подписки (опрос о причинах отмены). |
orderId | Идентификатор заказа последнего повторяющегося заказа, связанного с покупкой подписки. Если подписка была отменена из-за отклонения платежа, это будет идентификатор заказа, по которому был отклонен платеж. |
linkedPurchaseToken | Токен покупки, использованный при первоначальной покупке данной подписки, если она относится к одной из следующих категорий: 0. Повторная регистрация отмененной, но не истекшей подписки; 1. Повышение/понижение уровня предыдущей подписки. Например, предположим, что пользователь изначально зарегистрировался, и вы получили токен покупки X, затем пользователь отменяет регистрацию и проходит процедуру повторной регистрации (до истечения срока действия подписки), и вы получаете токен покупки Y, и, наконец, пользователь обновляет свою подписку, и вы получаете токен покупки Z. Если вы вызываете этот API с токеном покупки Z, это поле будет установлено в значение Y. Если вы вызываете этот API с токеном покупки Y, это поле будет установлено в значение X. Если вы вызываете этот API с токеном покупки X, это поле не будет установлено. |
purchaseType | Тип покупки подписки. Это поле заполняется только в том случае, если покупка была совершена не с использованием стандартного способа оплаты внутри приложения. Возможные значения: 0. Тестовая версия (т.е. приобретена с тестового аккаунта) 1. Промоверсия (т.е. приобретена с использованием промокода) |
priceChange | Актуальная информация об изменении цен. Она отображается только в случае предстоящего изменения цены на подписку, которое еще не вступило в силу. После продления подписки по новой цене или ее отмены информация об изменении цены предоставляться не будет. |
profileName | Имя пользователя в профиле на момент покупки подписки. Отображается только для покупок, совершенных с помощью функции «Подписаться через Google». |
emailAddress | Адрес электронной почты пользователя на момент покупки подписки. Отображается только для покупок, совершенных с помощью функции «Подписаться через Google». |
givenName | Имя пользователя, указанное при покупке подписки. Отображается только для покупок, совершенных с помощью функции «Подписаться через Google». |
familyName | Фамилия пользователя на момент покупки подписки. Отображается только для покупок, совершенных с помощью функции «Подписка через Google». |
profileId | Идентификатор профиля Google пользователя на момент покупки подписки. Отображается только для покупок, совершенных с помощью функции «Подписаться через Google». |
acknowledgementState | Состояние подтверждения подписки на продукт. Возможные значения: 0 — Подтверждение еще не получено; 1 — Подтверждено. |
externalAccountId | Идентификатор учетной записи пользователя в стороннем сервисе. Присутствует только в том случае, если привязка учетной записи произошла в процессе покупки подписки. |
promotionType | Тип акции, примененной к этой покупке. Это поле заполняется только в том случае, если акция применялась при покупке подписки. Возможные значения: 0. Разовый код; 1. Индивидуальный код. |
promotionCode | Промокод, примененный к этой покупке. Это поле заполняется только в том случае, если при покупке подписки был применен промокод. |
obfuscatedExternalAccountId | Зашифрованная версия идентификатора, уникально связанного с учетной записью пользователя в вашем приложении. Присутствует при следующих покупках: * Если привязка учетной записи произошла в процессе покупки подписки. * Если идентификатор был указан с помощью https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setobfuscatedaccountid при совершении покупки. |
obfuscatedExternalProfileId | Зашифрованная версия идентификатора, уникально связанного с профилем пользователя в вашем приложении. Присутствует только в том случае, если указан с помощью https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setobfuscatedprofileid при совершении покупки. |
Информация о вводной цене
Содержит информацию о вводной цене подписки.
| JSON-представление |
|---|
{ "introductoryPriceCurrencyCode": string, "introductoryPriceAmountMicros": string, "introductoryPricePeriod": string, "introductoryPriceCycles": integer } |
| Поля | |
|---|---|
introductoryPriceCurrencyCode | Код валюты ISO 4217 для вводной цены подписки. Например, если цена указана в британских фунтах стерлингов, priceCurrencyCode будет "GBP". |
introductoryPriceAmountMicros | Вводная цена подписки без учета налогов. Валюта совпадает с priceCurrencyCode. Цена выражается в микроединицах, где 1 000 000 микроединиц представляет собой одну единицу валюты. Например, если цена подписки составляет €1,99, priceAmountMicros будет равно 1990000. |
introductoryPricePeriod | Вводный ценовой период, указанный в формате ISO 8601. Распространенные значения (но не ограничиваясь ими): "P1W" (одна неделя), "P1M" (один месяц), "P3M" (три месяца), "P6M" (шесть месяцев) и "P1Y" (один год). |
introductoryPriceCycles | Количество расчетных периодов, в течение которых предлагается вводная цена. |
Результаты опроса об отмене подписки
Информация, предоставляемая пользователем при прохождении процедуры отмены подписки (опрос о причинах отмены).
| JSON-представление |
|---|
{ "cancelSurveyReason": integer, "userInputCancelReason": string } |
| Поля | |
|---|---|
cancelSurveyReason | Причина отмены, указанная пользователем в опросе. Возможные значения: 0. Другое 1. Я недостаточно часто пользуюсь этим сервисом 2. Технические проблемы 3. Причины, связанные со стоимостью 4. Я нашел лучшее приложение |
userInputCancelReason | Пользовательский ввод причины отмены. Присутствует только тогда, когда cancelReason равен 0. |
Изменение цены подписки
Содержит информацию об изменении цены подписки, которую можно использовать для управления действиями пользователя при изменении цены в приложении. Это может быть, например, запрос подтверждения от пользователя или персонализация пользовательского опыта для успешной конверсии.
| JSON-представление |
|---|
{
"newPrice": {
object ( |
| Поля | |
|---|---|
newPrice | Новая цена, по которой будет продлена подписка, если пользователь примет изменение цены. |
state | Текущее состояние изменения цены. Возможные значения: 0. Ожидается: состояние, при котором изменение цены ожидает подтверждения пользователя. В этом состоянии вы можете дополнительно запросить подтверждение у пользователя с помощью API приложения. 1. Принято: состояние, при котором изменение цены будет принято, и подписка будет продлеваться, если не будет отменена. Изменение цены вступит в силу в будущем, при продлении подписки. Обратите внимание, что изменение может не произойти при следующем продлении подписки. |
Методы | |
|---|---|
| Подтверждает покупку подписки. |
| Отменяет покупку подписки пользователем. |
| Откладывает покупку подписки пользователем до указанного будущего времени истечения срока действия. |
(deprecated) | Устарело: используйте purchases.subscriptionsv2.get вместо этого. |
(deprecated) | Устарело: используйте orders.refund вместо этого. |
(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 на наличие известных сбоев. |