REST Resource: purchases.subscriptions

Zasób: SubscriptionPurchase

Wycofano: zamiast niego używaj SubscriptionPurchaseV2. Zasób SubscriptionPurchase wskazuje stan zakupu subskrypcji przez użytkownika.

Zapis 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
}
Pola
kind

string

Ten rodzaj reprezentuje obiekt subscriptionPurchase w usłudze androidpublisher.

startTimeMillis

string (int64 format)

Czas przyznania subskrypcji w milisekundach od początku epoki.

expiryTimeMillis

string (int64 format)

Czas wygaśnięcia subskrypcji w milisekundach od początku epoki.

autoResumeTimeMillis

string (int64 format)

Czas, w którym subskrypcja zostanie automatycznie wznowiona (w milisekundach od początku epoki). Występuje tylko wtedy, gdy użytkownik poprosił o wstrzymanie subskrypcji.

autoRenewing

boolean

Czy subskrypcja zostanie automatycznie odnowiona po upływie bieżącego okresu ważności.

priceCurrencyCode

string

Kod waluty ceny subskrypcji w formacie ISO 4217. Jeśli na przykład cena jest podana w funtach brytyjskich, priceCurrencyCode to „GBP”.

priceAmountMicros

string (int64 format)

Cena subskrypcji. W krajach, w których podatek nie jest wliczony w cenę, cena nie zawiera podatku. W krajach, w których podatek jest wliczony w cenę, cena zawiera podatek. Cena jest wyrażona w mikrojednostkach, gdzie milion mikrojednostek odpowiada jednej jednostce waluty. Jeśli na przykład cena subskrypcji wynosi 1, 99 PLN, wartość priceAmountMicros to 1990000.

introductoryPriceInfo

object (IntroductoryPriceInfo)

Informacje o cenie początkowej subskrypcji. Jest to widoczne tylko wtedy, gdy subskrypcja została kupiona w cenie dla nowych użytkowników.

To pole nie wskazuje, czy subskrypcja jest obecnie w okresie ceny dla nowych użytkowników.

countryCode

string

Kod kraju lub regionu rozliczeniowego użytkownika w formacie ISO 3166-1 alfa-2 w momencie przyznania subskrypcji.

developerPayload

string

Ciąg znaków określony przez dewelopera, który zawiera dodatkowe informacje o zamówieniu.

paymentState

integer

Stan płatności subskrypcji. Możliwe wartości: 0. Płatność oczekująca 1. Otrzymano płatność 2. Bezpłatny okres próbny 3. Oczekuje na odroczone przejście na wyższą/niższą wersję

Nie występuje w przypadku anulowanych i wygasłych subskrypcji.

cancelReason

integer

Powód anulowania subskrypcji lub braku automatycznego odnawiania. Możliwe wartości: 0. Użytkownik anulował subskrypcję 1. Subskrypcja została anulowana przez system, np. z powodu problemu z płatnością. Subskrypcja została zastąpiona nową subskrypcją 3. Subskrypcja została anulowana przez dewelopera

userCancellationTimeMillis

string (int64 format)

Czas anulowania subskrypcji przez użytkownika (w milisekundach od początku epoki). Występuje tylko wtedy, gdy cancelReason ma wartość 0.

cancelSurveyResult

object (SubscriptionCancelSurveyResult)

Informacje podane przez użytkownika podczas procesu anulowania subskrypcji (ankieta dotycząca powodu anulowania).

orderId

string

Identyfikator ostatniego zamówienia cyklicznego powiązanego z zakupem subskrypcji. Jeśli subskrypcja została anulowana z powodu odrzucenia płatności, będzie to identyfikator zamówienia, w którym odrzucono płatność.

linkedPurchaseToken

string

Token zakupu pierwotnego zakupu, jeśli ta subskrypcja jest jedną z tych opcji: 0. Ponowna rejestracja anulowanej, ale nie wygasłej subskrypcji 1. Przechodzenie z poprzedniej subskrypcji na wyższą lub niższą wersję

Załóżmy na przykład, że użytkownik rejestruje się i otrzymujesz token zakupu X, a następnie anuluje subskrypcję i ponownie się rejestruje (zanim subskrypcja wygaśnie) i otrzymujesz token zakupu Y, a na koniec użytkownik uaktualnia subskrypcję i otrzymujesz token zakupu Z. Jeśli wywołasz ten interfejs API z tokenem zakupu Z, to pole zostanie ustawione na Y. Jeśli wywołasz ten interfejs API z tokenem zakupu Y, to pole zostanie ustawione na X. Jeśli wywołasz ten interfejs API z tokenem zakupu X, to pole nie zostanie ustawione.

purchaseType

integer

Rodzaj zakupu subskrypcji. To pole jest ustawiane tylko wtedy, gdy zakup nie został dokonany przy użyciu standardowego procesu rozliczeniowego w aplikacji. Możliwe wartości: 0. Test (czyli zakupiony na koncie testowym licencji) 1. Promocyjna (czyli kupiona przy użyciu kodu promocyjnego)

priceChange

object (SubscriptionPriceChange)

Najnowsze dostępne informacje o zmianie ceny. Ten komunikat pojawia się tylko wtedy, gdy w przypadku subskrypcji nastąpi wkrótce zmiana ceny, która nie została jeszcze zastosowana.

Gdy subskrypcja zostanie odnowiona w nowej cenie lub anulowana, nie będą zwracane żadne informacje o zmianie ceny.

profileName

string

Nazwa profilu użytkownika w momencie zakupu subskrypcji. Występuje tylko w przypadku zakupów dokonanych za pomocą funkcji „Subskrybuj z Google”.

emailAddress

string

Adres e-mail użytkownika w momencie zakupu subskrypcji. Występuje tylko w przypadku zakupów dokonanych za pomocą funkcji „Subskrybuj z Google”.

givenName

string

Imię użytkownika w momencie zakupu subskrypcji. Występuje tylko w przypadku zakupów dokonanych za pomocą funkcji „Subskrybuj z Google”.

familyName

string

Nazwisko użytkownika w momencie zakupu subskrypcji. Występuje tylko w przypadku zakupów dokonanych za pomocą funkcji „Subskrybuj z Google”.

profileId

string

Identyfikator profilu Google użytkownika w momencie zakupu subskrypcji. Występuje tylko w przypadku zakupów dokonanych za pomocą funkcji „Subskrybuj z Google”.

acknowledgementState

integer

Stan potwierdzenia produktu objętego subskrypcją. Możliwe wartości: 0. Niepotwierdzony 1. Potwierdzono

externalAccountId

string

Identyfikator konta użytkownika w usłudze innej firmy. Występuje tylko wtedy, gdy łączenie konta nastąpiło w ramach procesu zakupu subskrypcji.

promotionType

integer

Typ promocji zastosowanej w przypadku tego zakupu. To pole jest ustawiane tylko wtedy, gdy w momencie zakupu subskrypcji zastosowano promocję. Możliwe wartości: 0. Kod jednorazowy 1. Kod dostępu

promotionCode

string

Kod promocyjny zastosowany w przypadku tego zakupu. To pole jest ustawiane tylko wtedy, gdy w momencie zakupu subskrypcji zastosowano promocję z kodem niestandardowym.

obfuscatedExternalAccountId

string

Zaciemniona wersja identyfikatora, który jest jednoznacznie powiązany z kontem użytkownika w Twojej aplikacji. Występuje w przypadku tych zakupów: * jeśli łączenie kont nastąpiło w ramach procesu zakupu subskrypcji. * Został określony za pomocą metody https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setobfuscatedaccountid podczas dokonywania zakupu.

obfuscatedExternalProfileId

string

Zaciemniona wersja identyfikatora, który jest jednoznacznie powiązany z profilem użytkownika w Twojej aplikacji. Występuje tylko wtedy, gdy podczas zakupu został określony za pomocą parametru https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setobfuscatedprofileid.

IntroductoryPriceInfo

Zawiera informacje o cenie początkowej subskrypcji.

Zapis JSON
{
  "introductoryPriceCurrencyCode": string,
  "introductoryPriceAmountMicros": string,
  "introductoryPricePeriod": string,
  "introductoryPriceCycles": integer
}
Pola
introductoryPriceCurrencyCode

string

Kod waluty w formacie ISO 4217 dla ceny subskrypcji na okres wprowadzający. Jeśli na przykład cena jest podana w funtach brytyjskich, priceCurrencyCode to „GBP”.

introductoryPriceAmountMicros

string (int64 format)

Cena początkowa subskrypcji bez podatku. Waluta jest taka sama jak w przypadku atrybutu priceCurrencyCode. Cena jest wyrażona w mikrojednostkach, gdzie milion mikrojednostek odpowiada jednej jednostce waluty. Jeśli na przykład cena subskrypcji wynosi 1, 99 PLN, wartość priceAmountMicros to 1990000.

introductoryPricePeriod

string

Okres obowiązywania ceny początkowej podany w formacie ISO 8601. Typowe wartości to m.in. „P1W” (1 tydzień), „P1M” (1 miesiąc), „P3M” (3 miesiące), „P6M” (6 miesięcy) i „P1Y” (1 rok).

introductoryPriceCycles

integer

Liczba okresów rozliczeniowych, w których obowiązuje cena wprowadzająca.

SubscriptionCancelSurveyResult

Informacje podane przez użytkownika podczas procesu anulowania subskrypcji (ankieta dotycząca powodu anulowania).

Zapis JSON
{
  "cancelSurveyReason": integer,
  "userInputCancelReason": string
}
Pola
cancelSurveyReason

integer

Powód anulowania wybrany przez użytkownika w ankiecie. Możliwe wartości: 0. Inne 1. Nie używam tej usługi zbyt często. Problemy techniczne 3. Chodzi o koszty 4. Udało mi się znaleźć lepszą aplikację

userInputCancelReason

string

Dostosowany powód anulowania wprowadzony przez użytkownika. Występuje tylko wtedy, gdy cancelReason ma wartość 0.

SubscriptionPriceChange

Zawiera informacje o zmianie ceny subskrypcji, które można wykorzystać do kontrolowania ścieżki użytkownika w aplikacji w przypadku zmiany ceny. Może to być prośba o potwierdzenie od użytkownika lub dostosowanie działania aplikacji w celu zwiększenia skuteczności konwersji.

Zapis JSON
{
  "newPrice": {
    object (Price)
  },
  "state": integer
}
Pola
newPrice

object (Price)

Nowa cena, po której subskrypcja zostanie odnowiona, jeśli użytkownik zaakceptuje zmianę ceny.

state

integer

Bieżący stan zmiany ceny. Możliwe wartości: 0. Oczekująca: stan oczekującej zmiany ceny, która czeka na akceptację użytkownika. W tym stanie możesz opcjonalnie poprosić użytkownika o potwierdzenie za pomocą interfejsu In-App API. 1. Zaakceptowano: stan zaakceptowanej zmiany ceny, która spowoduje odnowienie subskrypcji, chyba że zostanie ona anulowana. Zmiana ceny zacznie obowiązywać w przyszłości, gdy subskrypcja zostanie odnowiona. Pamiętaj, że zmiana może nie nastąpić przy kolejnym odnowieniu subskrypcji.

Metody

acknowledge

Potwierdza zakup subskrypcji.

cancel
(deprecated)

Wycofano: zamiast tego użyj purchases.subscriptionsv2.cancel.

defer
(deprecated)

Wycofano: zamiast tego użyj purchases.subscriptionsv2.defer.

Kody błędów

Operacje na tym zasobie zwracają te kody błędów HTTP:

Kod błędu Przyczyna Opis Rozdzielczość
400 / 410 subscriptionExpired Subskrypcja wygasła i nie można wykonać żądanej operacji. Sprawdź czas wygaśnięcia subskrypcji. Tej operacji nie można wykonać w przypadku wygasłych subskrypcji.
400 subscriptionInvalidArgument W żądaniu subskrypcji podano nieprawidłowy argument. Zapoznaj się z dokumentacją API i sprawdź, czy wszystkie wymagane pola są wypełnione i prawidłowo sformatowane.
400 invalidPurchaseState Zakup nie jest w prawidłowym stanie, aby wykonać żądaną operację. Możesz na przykład próbować potwierdzić zakup, który został już wykorzystany, lub anulować subskrypcję, która nie jest aktywna. Przed podjęciem próby wykonania operacji sprawdź bieżący stan zasobu za pomocą odpowiedniego interfejsu Get API. Upewnij się, że zasób jest w odpowiednim stanie do wykonania działania.
400 invalidValue W żądaniu podano nieprawidłową wartość. Ten kod jest często zwracany w przypadku nieprawidłowego lub nieprawidłowo sformatowanego tokena zakupu. Popraw nieprawidłową wartość pola w treści żądania lub parametrach na podstawie dokumentacji API.
400 prepaidSubscriptionNotSupported Żądana operacja nie jest obsługiwana w przypadku subskrypcji przedpłaconych. Sprawdź, czy operacja dotyczy danego typu subskrypcji. Ten błąd dotyczy metod takich jak Cancel.
400 productNotOwnedByUser Podany token zakupu jest prawidłowy, ale użytkownik nie jest obecnie właścicielem produktu. Może się tak zdarzyć, jeśli zakup został zwrócony, cofnięty lub wygasł przed potwierdzeniem. Przed podjęciem próby wykonania operacji sprawdź bieżący stan zasobu za pomocą odpowiedniego interfejsu Get API. Upewnij się, że zasób jest w odpowiednim stanie do wykonania działania.
400 purchaseTokenMismatch Podany token zakupu nie pasuje do zakupu, nazwy pakietu, identyfikatora subskrypcji ani identyfikatora produktu. Sprawdź, czy wszystkie szczegóły w prośbie są prawidłowe i zgodne ze sobą.
400 required W żądaniu brakuje wymaganego pola lub parametru. Zapoznaj się z dokumentacją API, aby upewnić się, że uwzględniono wszystkie obowiązkowe pola i parametry.
400 unsupportedIabType Ta operacja nie jest obsługiwana w przypadku danego typu płatności w aplikacji. Upewnij się, że metoda interfejsu API jest zgodna z typem zarządzanego elementu.
403 userInsufficientPermission Użytkownik nie ma wystarczających uprawnień do wykonania żądanej operacji. Sprawdź, czy uwierzytelniony użytkownik ma niezbędne uprawnienia w Konsoli Google Play. Więcej informacji znajdziesz w artykule Korzystanie z konta usługi.
404 notFound Nie znaleziono żądanego zasobu. Sprawdź, czy identyfikatory (np. token zakupu, nazwa pakietu, identyfikator produktu, identyfikator subskrypcji) są prawidłowe.
409 concurrentUpdate Podjęto próbę zaktualizowania obiektu, który jest aktualizowany równocześnie. Ponów próbę wysłania żądania ze wzrastającym czasem do ponowienia. Unikaj jednoczesnego modyfikowania tego samego zasobu.
410 purchaseTokenNoLongerValid Token zakupu jest trwale nieprawidłowy, ponieważ powiązane z nim konto użytkownika zostało usunięte lub rekord zakupu już nie istnieje. Zaprzestań używania tego tokena zakupu.
410 subscriptionNoLongerAvailable Zakup subskrypcji nie jest już dostępny w zapytaniu, ponieważ wygasł zbyt dawno. Ten błąd oznacza, że abonament wygasł ponad 60 dni temu. Nie należy już wysyłać zapytań dotyczących tych subskrypcji.
5xx Generic error Ogólny błąd serwera Google Play. Powtórz żądanie.

Jeśli problem będzie nadal występował, skontaktuj się z menedżerem konta Google Play lub prześlij prośbę o pomoc. Sprawdź panel stanu Google Play, aby dowiedzieć się, czy nie występują znane przerwy w działaniu usługi.