- Risorsa: SubscriptionPurchase
- IntroductoryPriceInfo
- SubscriptionCancelSurveyResult
- SubscriptionPriceChange
- Metodi
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 ( |
| Campi | |
|---|---|
kind |
Questo tipo rappresenta un oggetto subscriptionPurchase nel servizio androidpublisher. |
startTimeMillis |
Ora in cui è stato concesso l'abbonamento, in millisecondi trascorsi dall'epoca. |
expiryTimeMillis |
Ora in cui l'abbonamento scadrà, in millisecondi dall'epoca. |
autoResumeTimeMillis |
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 |
Indica se l'abbonamento verrà rinnovato automaticamente al raggiungimento della data di scadenza attuale. |
priceCurrencyCode |
Codice valuta ISO 4217 per il prezzo dell'abbonamento. Ad esempio, se il prezzo è specificato in sterline inglesi, priceCurrencyCode è "GBP". |
priceAmountMicros |
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 |
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 |
Codice paese/regione di fatturazione ISO 3166-1 alpha-2 dell'utente al momento della concessione dell'abbonamento. |
developerPayload |
Una stringa specificata dallo sviluppatore che contiene informazioni supplementari su un ordine. |
paymentState |
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 |
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 |
Il momento in cui l'abbonamento è stato annullato dall'utente, espresso in millisecondi dall'epoca. Presente solo se cancelReason è 0. |
cancelSurveyResult |
Informazioni fornite dall'utente quando completa la procedura di annullamento dell'abbonamento (sondaggio sul motivo dell'annullamento). |
orderId |
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 |
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 |
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 |
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 |
Il nome del profilo dell'utente al momento dell'acquisto dell'abbonamento. Presente solo per gli acquisti effettuati con "Abbonati con Google". |
emailAddress |
L'indirizzo email dell'utente al momento dell'acquisto dell'abbonamento. Presente solo per gli acquisti effettuati con "Abbonati con Google". |
givenName |
Il nome specificato dell'utente al momento dell'acquisto dell'abbonamento. Presente solo per gli acquisti effettuati con "Abbonati con Google". |
familyName |
Il cognome dell'utente al momento dell'acquisto dell'abbonamento. Presente solo per gli acquisti effettuati con "Abbonati con Google". |
profileId |
L'ID profilo Google dell'utente al momento dell'acquisto dell'abbonamento. Presente solo per gli acquisti effettuati con "Abbonati con Google". |
acknowledgementState |
Lo stato di conferma del prodotto in abbonamento. I valori possibili sono: 0. Ancora da confermare 1. Confermato |
externalAccountId |
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 |
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 |
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 |
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 |
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 |
Codice valuta ISO 4217 per il prezzo dell'abbonamento introduttivo. Ad esempio, se il prezzo è specificato in sterline inglesi, priceCurrencyCode è "GBP". |
introductoryPriceAmountMicros |
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 |
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 |
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 |
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 |
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 ( |
| Campi | |
|---|---|
newPrice |
Il nuovo prezzo con cui verrà rinnovato l'abbonamento se la modifica del prezzo viene accettata dall'utente. |
state |
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 |
|
|---|---|
|
Conferma l'acquisto di un abbonamento. |
|
Annulla l'acquisto di un abbonamento di un utente. |
|
Posticipa l'acquisto di un abbonamento da parte di un utente fino a una data di scadenza futura specificata. |
(deprecated) |
Deprecato: utilizza purchases.subscriptionsv2.get. |
(deprecated) |
Deprecato: utilizza orders.refund. |
(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. |