REST Resource: purchases.subscriptions

Zasób: SubscriptionPurchase

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 dla nowych subskrybentów. Ta informacja jest widoczna tylko wtedy, gdy subskrypcja została kupiona w cenie początkowej.

To pole nie wskazuje, czy subskrypcja jest obecnie w okresie obowiązywania 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. Oczekująca płatność 1. Otrzymano płatność 2. Bezpłatny okres próbny 3. Oczekuje na odroczone przejście na wyższą lub 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 z pytaniem o powód rezygnacji).

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 zarejestruje się i otrzymasz token zakupu X, a potem anuluje subskrypcję i ponownie się zarejestruje (zanim subskrypcja wygaśnie) i otrzymasz token zakupu Y, a na koniec użytkownik uaktualni subskrypcję i otrzymasz 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

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

priceChange

object (SubscriptionPriceChange)

Najnowsze dostępne informacje o zmianach cen. Ten element jest widoczny tylko wtedy, gdy wkrótce nastąpi zmiana ceny subskrypcji, która nie została jeszcze zastosowana.

Gdy subskrypcja zostanie odnowiona z nową ceną 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ą „Subskrybuj w Google”.

emailAddress

string

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

givenName

string

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

familyName

string

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

profileId

string

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

acknowledgementState

integer

Stan potwierdzenia subskrypcji. Możliwe wartości: 0. Niepotwierdzone 1. Potwierdzono

externalAccountId

string

Identyfikator konta użytkownika w usłudze zewnętrznej. Występuje tylko wtedy, gdy połą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 Vanity

promotionCode

string

Kod promocyjny zastosowany przy tym zakupie. To pole jest ustawiane tylko wtedy, gdy podczas 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 połączenie konta nastąpiło w ramach procesu zakupu subskrypcji. * Został określony za pomocą 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 ceny subskrypcji wprowadzającej w formacie ISO 4217. Jeśli na przykład cena jest podana w funtach brytyjskich, priceCurrencyCode to „GBP”.

introductoryPriceAmountMicros

string (int64 format)

Cena wprowadzająca subskrypcji bez podatku. Waluta jest taka sama jak 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 wprowadzającej podany w formacie ISO 8601. Typowe wartości to (między innymi) „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 początkowa.

SubscriptionCancelSurveyResult

Informacje podane przez użytkownika podczas procesu anulowania subskrypcji (ankieta z pytaniem o powód rezygnacji).

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 podany 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 uzyskania 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

Obecny stan zmiany ceny. Możliwe wartości: 0. Oczekuje na akceptację: 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 API w aplikacji. 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

Anuluje zakup subskrypcji użytkownika.

defer

Odroczenie zakupu subskrypcji użytkownika do określonego czasu wygaśnięcia w przyszłości.

get
(deprecated)

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

refund
(deprecated)

Wycofano: zamiast tego używaj orders.refund.

revoke
(deprecated)

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

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ą interfejsu API i upewnij się, że 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ść. Często jest 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 konkretnych metod, takich jak Cancel, Defer, Refund czy Revoke.
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, anulowany 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ą interfejsu 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. Sprawdź, czy 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ównolegle. 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 Nie można już wysłać zapytania o zakup subskrypcji, ponieważ wygasła ona zbyt dawno. Ten błąd oznacza, że subskrypcja wygasła 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. Ponów żądanie.

Jeśli problem nie ustąpi, skontaktuj się z menedżerem konta Google Play lub prześlij prośbę o pomoc. Sprawdź Panel stanu Google Play, aby dowiedzieć się, czy występują znane awarie.