REST Resource: purchases.subscriptions

Risorsa: SubscriptionPurchase

Una risorsa SubscriptionPurchase indica lo stato dell'acquisto di un abbonamento da parte di un utente.

Rappresentazione 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
}
Campi
kind

string

Questo tipo rappresenta un oggetto subscriptionPurchase nel servizio androidpublisher.

startTimeMillis

string (int64 format)

Ora in cui è stato concesso l'abbonamento, in millisecondi trascorsi dall'epoca.

expiryTimeMillis

string (int64 format)

Ora in cui l'abbonamento scadrà, in millisecondi dall'epoca.

autoResumeTimeMillis

string (int64 format)

Ora in cui l'abbonamento verrà ripristinato automaticamente, in millisecondi dall'epoca. Presente solo se l'utente ha richiesto di mettere in pausa l'abbonamento.

autoRenewing

boolean

Indica se l'abbonamento verrà rinnovato automaticamente al raggiungimento della data di scadenza attuale.

priceCurrencyCode

string

Codice valuta ISO 4217 per il prezzo dell'abbonamento. Ad esempio, se il prezzo è specificato in sterline inglesi, priceCurrencyCode è "GBP".

priceAmountMicros

string (int64 format)

Prezzo dell'abbonamento. Per i paesi in cui i prezzi non sono comprensivi di imposte, il prezzo non include le tasse. Per i paesi in cui i prezzi devono essere comprensivi di IVA, il prezzo include le tasse. Il prezzo è espresso in micro-unità, dove 1.000.000 micro-unità rappresentano un'unità della valuta. Ad esempio, se il prezzo dell'abbonamento è 1,99 €, priceAmountMicros è 1990000.

introductoryPriceInfo

object (IntroductoryPriceInfo)

Informazioni sul prezzo di lancio dell'abbonamento. È presente solo quando l'abbonamento è stato acquistato a un prezzo di lancio.

Questo campo non indica che l'abbonamento si trova attualmente nel periodo di prezzo di lancio.

countryCode

string

Codice paese/regione di fatturazione ISO 3166-1 alpha-2 dell'utente al momento della concessione dell'abbonamento.

developerPayload

string

Una stringa specificata dallo sviluppatore che contiene informazioni supplementari su un ordine.

paymentState

integer

Lo stato del pagamento dell'abbonamento. I valori possibili sono: 0. Pagamento in attesa 1. Pagamento ricevuto 2. Prova senza costi 3. In attesa di upgrade/downgrade differito

Non presente per gli abbonamenti annullati o scaduti.

cancelReason

integer

Il motivo per cui un abbonamento è stato annullato o non viene rinnovato automaticamente. I valori possibili sono: 0. L'utente ha annullato l'abbonamento 1. L'abbonamento è stato annullato dal sistema, ad esempio a causa di un problema di fatturazione. L'abbonamento è stato sostituito con un nuovo abbonamento 3. L'abbonamento è stato annullato dallo sviluppatore

userCancellationTimeMillis

string (int64 format)

Il momento in cui l'abbonamento è stato annullato dall'utente, espresso in millisecondi dall'epoca. Presente solo se cancelReason è 0.

cancelSurveyResult

object (SubscriptionCancelSurveyResult)

Informazioni fornite dall'utente quando completa la procedura di annullamento dell'abbonamento (sondaggio sul motivo dell'annullamento).

orderId

string

L'ID ordine dell'ultimo ordine ricorrente associato all'acquisto dell'abbonamento. Se l'abbonamento è stato annullato perché il pagamento è stato rifiutato, questo sarà l'ID ordine dell'ordine con pagamento rifiutato.

linkedPurchaseToken

string

Il token di acquisto dell'acquisto di origine se questo abbonamento è uno dei seguenti: 0. Nuova registrazione di un abbonamento annullato ma non scaduto 1. Eseguire l'upgrade/il downgrade da un abbonamento precedente

Ad esempio, supponiamo che un utente si registri inizialmente e tu riceva il token di acquisto X, poi l'utente annulla l'abbonamento e completa la procedura di nuova registrazione (prima della scadenza dell'abbonamento) e tu riceva il token di acquisto Y e infine l'utente esegue l'upgrade dell'abbonamento e tu riceva il token di acquisto Z. Se chiami questa API con il token di acquisto Z, questo campo verrà impostato su Y. Se chiami questa API con il token di acquisto Y, questo campo verrà impostato su X. Se chiami questa API con il token di acquisto X, questo campo non verrà impostato.

purchaseType

integer

Il tipo di acquisto dell'abbonamento. Questo campo viene impostato solo se l'acquisto non è stato effettuato utilizzando il flusso di fatturazione in-app standard. I valori possibili sono: 0. Test (ovvero acquistato da un account di test delle licenze) 1. Promozionale (ovvero acquistato utilizzando un codice promozionale)

priceChange

object (SubscriptionPriceChange)

Le informazioni più recenti sulle variazioni di prezzo disponibili. Questo campo è presente solo quando è prevista una variazione di prezzo dell'abbonamento che deve ancora essere applicata.

Una volta rinnovato l'abbonamento con il nuovo prezzo o annullato l'abbonamento, non verranno restituite informazioni sulla variazione di prezzo.

profileName

string

Il nome del profilo dell'utente al momento dell'acquisto dell'abbonamento. Presente solo per gli acquisti effettuati con "Abbonati con Google".

emailAddress

string

L'indirizzo email dell'utente al momento dell'acquisto dell'abbonamento. Presente solo per gli acquisti effettuati con "Abbonati con Google".

givenName

string

Il nome specificato dell'utente al momento dell'acquisto dell'abbonamento. Presente solo per gli acquisti effettuati con "Abbonati con Google".

familyName

string

Il cognome dell'utente al momento dell'acquisto dell'abbonamento. Presente solo per gli acquisti effettuati con "Abbonati con Google".

profileId

string

L'ID profilo Google dell'utente al momento dell'acquisto dell'abbonamento. Presente solo per gli acquisti effettuati con "Abbonati con Google".

acknowledgementState

integer

Lo stato di conferma del prodotto in abbonamento. I valori possibili sono: 0. Ancora da confermare 1. Confermato

externalAccountId

string

Identificatore dell'account utente nel servizio di terze parti. Presente solo se il collegamento dell'account è avvenuto nell'ambito del flusso di acquisto dell'abbonamento.

promotionType

integer

Il tipo di promozione applicata a questo acquisto. Questo campo viene impostato solo se è stata applicata una promozione al momento dell'acquisto dell'abbonamento. I valori possibili sono: 0. Codice monouso 1. Codice vanity

promotionCode

string

Il codice promozionale applicato a questo acquisto. Questo campo viene impostato solo se è stata applicata una promozione con codice personalizzato al momento dell'acquisto dell'abbonamento.

obfuscatedExternalAccountId

string

Una versione offuscata dell'ID associato in modo univoco all'account dell'utente nella tua app. Presente per i seguenti acquisti: * Se il collegamento dell'account è avvenuto nell'ambito del flusso di acquisto dell'abbonamento. * È stato specificato utilizzando https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setobfuscatedaccountid al momento dell'acquisto.

obfuscatedExternalProfileId

string

Una versione offuscata dell'ID associato in modo univoco al profilo dell'utente nella tua app. Presente solo se specificato utilizzando https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setobfuscatedprofileid al momento dell'acquisto.

IntroductoryPriceInfo

Contiene le informazioni sul prezzo di lancio di un abbonamento.

Rappresentazione JSON
{
  "introductoryPriceCurrencyCode": string,
  "introductoryPriceAmountMicros": string,
  "introductoryPricePeriod": string,
  "introductoryPriceCycles": integer
}
Campi
introductoryPriceCurrencyCode

string

Codice valuta ISO 4217 per il prezzo dell'abbonamento introduttivo. Ad esempio, se il prezzo è specificato in sterline inglesi, priceCurrencyCode è "GBP".

introductoryPriceAmountMicros

string (int64 format)

Prezzo di lancio dell'abbonamento, tasse escluse. La valuta corrisponde a priceCurrencyCode. Il prezzo è espresso in micro-unità, dove 1.000.000 micro-unità rappresentano un'unità della valuta. Ad esempio, se il prezzo dell'abbonamento è 1,99 €, priceAmountMicros è 1990000.

introductoryPricePeriod

string

Il periodo di prezzo introduttivo, specificato nel formato ISO 8601. I valori comuni sono (a titolo esemplificativo) "P1W" (una settimana), "P1M" (un mese), "P3M" (tre mesi), "P6M" (sei mesi) e "P1Y" (un anno).

introductoryPriceCycles

integer

Il numero di periodi di fatturazione per offrire prezzi di lancio.

SubscriptionCancelSurveyResult

Informazioni fornite dall'utente quando completa la procedura di annullamento dell'abbonamento (sondaggio sul motivo dell'annullamento).

Rappresentazione JSON
{
  "cancelSurveyReason": integer,
  "userInputCancelReason": string
}
Campi
cancelSurveyReason

integer

Il motivo dell'annullamento scelto dall'utente nel sondaggio. I valori possibili sono: 0. Altro 1. Non uso abbastanza il servizio 2. Problemi tecnici 3. Per motivi di costi 4. Ho trovato un'app migliore

userInputCancelReason

string

Il motivo dell'annullamento dell'input personalizzato da parte dell'utente. Presente solo quando cancelReason è 0.

SubscriptionPriceChange

Contiene le informazioni sulla variazione di prezzo di un abbonamento che possono essere utilizzate per controllare il percorso dell'utente per la variazione di prezzo nell'app. Ciò può avvenire sotto forma di richiesta di conferma da parte dell'utente o di personalizzazione dell'esperienza per una conversione riuscita.

Rappresentazione JSON
{
  "newPrice": {
    object (Price)
  },
  "state": integer
}
Campi
newPrice

object (Price)

Il nuovo prezzo con cui verrà rinnovato l'abbonamento se la modifica del prezzo viene accettata dall'utente.

state

integer

Lo stato attuale della modifica del prezzo. I valori possibili sono: 0. In attesa: stato di una variazione di prezzo in attesa dell'approvazione dell'utente. In questo stato, puoi richiedere facoltativamente la conferma all'utente utilizzando l'API In-App. 1. Accettata: stato di una variazione di prezzo accettata con cui l'abbonamento verrà rinnovato, a meno che non venga annullato. La variazione di prezzo entra in vigore in una data futura, al momento del rinnovo dell'abbonamento. Tieni presente che la modifica potrebbe non essere applicata al successivo rinnovo dell'abbonamento.

Metodi

acknowledge

Conferma l'acquisto di un abbonamento.

cancel

Annulla l'acquisto di un abbonamento di un utente.

defer

Posticipa l'acquisto di un abbonamento da parte di un utente fino a una data di scadenza futura specificata.

get
(deprecated)

Deprecato: utilizza purchases.subscriptionsv2.get.

refund
(deprecated)

Deprecato: utilizza orders.refund.

revoke
(deprecated)

Deprecato: utilizza purchases.subscriptionsv2.revoke.

Codici di errore

Le operazioni di questa risorsa restituiscono i seguenti codici di errore HTTP:

Codice di errore Motivo Descrizione Risoluzione
400 / 410 subscriptionExpired L'abbonamento è scaduto e l'operazione richiesta non può essere eseguita. Controlla l'ora di scadenza dell'abbonamento. Questa operazione non è consentita sugli abbonamenti scaduti.
400 subscriptionInvalidArgument Nella richiesta di abbonamento è stato fornito un argomento non valido. Consulta la documentazione dell'API e assicurati che tutti i campi obbligatori siano forniti e formattati correttamente.
400 invalidPurchaseState L'acquisto non è in uno stato valido per eseguire l'operazione richiesta. Ad esempio, potresti tentare di confermare un acquisto già consumato o annullare un abbonamento non attivo. Prima di tentare l'operazione, controlla lo stato attuale della risorsa utilizzando l'API Get corrispondente. Assicurati che la risorsa si trovi in uno stato appropriato per l'azione.
400 invalidValue Nella richiesta è stato fornito un valore non valido. Questo errore viene spesso restituito per un token di acquisto non valido o con un formato non corretto. Correggi il valore del campo non valido nel corpo della richiesta o nei parametri in base al riferimento API.
400 prepaidSubscriptionNotSupported L'operazione richiesta non è supportata per gli abbonamenti prepagati. Assicurati che l'operazione sia applicabile al tipo di abbonamento. Questo errore è specifico per metodi come Annulla, Posticipa, Rimborso o Revoca.
400 productNotOwnedByUser Il token di acquisto fornito è valido, ma l'utente non possiede attualmente il prodotto. Ciò può verificarsi se l'acquisto è stato rimborsato, revocato o è scaduto prima della conferma. Prima di tentare l'operazione, controlla lo stato attuale della risorsa utilizzando l'API Get corrispondente. Assicurati che la risorsa si trovi in uno stato appropriato per l'azione.
400 purchaseTokenMismatch Il token di acquisto fornito non corrisponde all'acquisto, al nome del pacchetto, all'ID abbonamento o all'ID prodotto. Verifica che tutti i dettagli della richiesta siano corretti e corrispondano tra loro.
400 required Nella richiesta manca un campo o un parametro obbligatorio. Consulta la documentazione dell'API per assicurarti di includere tutti i campi e i parametri obbligatori.
400 unsupportedIabType L'operazione non è supportata per il tipo di fatturazione in-app specificato. Assicurati che il metodo API sia compatibile con il tipo di elemento gestito.
403 userInsufficientPermission L'utente non dispone di autorizzazioni sufficienti per eseguire l'operazione richiesta. Assicurati che l'utente autenticato disponga delle autorizzazioni necessarie in Google Play Console. Per ulteriori dettagli, consulta Utilizzo di un service account.
404 notFound Impossibile trovare la risorsa richiesta. Verifica che gli identificatori (ad es. token di acquisto, nome del pacchetto, ID prodotto, ID abbonamento) siano corretti.
409 concurrentUpdate È stato effettuato un tentativo di aggiornamento di un oggetto in fase di aggiornamento simultaneo. Riprova a inviare la richiesta con il backoff esponenziale. Evita modifiche simultanee alla stessa risorsa.
410 purchaseTokenNoLongerValid Il token di acquisto non è più valido perché l'account utente associato è stato eliminato o il record di acquisto non esiste più. Interrompi l'utilizzo di questo token di acquisto.
410 subscriptionNoLongerAvailable L'acquisto dell'abbonamento non è più disponibile per la query perché è scaduto da troppo tempo. Questo errore indica che l'abbonamento è scaduto da più di 60 giorni. Non devi più eseguire query su questi abbonamenti.
5xx Generic error Errore generico nel server Google Play. Riprova a inviare la richiesta.

Se il problema persiste, contatta il tuo Account Manager Google Play o invia una richiesta di assistenza. Ti consigliamo di controllare la dashboard dello stato di Play per eventuali interruzioni note.