Una notifica di acquisto annullato consente al tuo server Google Play di revocare l'accesso nel momento in cui arriva un rimborso
Google Play può inviare al tuo server una notifica di acquisto annullato nell'istante in cui un acquisto viene rimborsato, sottoposto a chargeback o annullato. Trasporta purchaseToken, orderId, productType e refundType, e significa una cosa sola, revoca l'accesso. Ecco come leggerla e collegarla.

Punti chiave
- Una notifica di acquisto annullato è una Real-time Developer Notification che Google Play invia al tuo topic Cloud Pub/Sub nel momento in cui un acquisto viene rimborsato, sottoposto a chargeback o altrimenti annullato. È un segnale push, non qualcosa per cui devi fare polling.
- La notifica trasporta esattamente quattro campi: `purchaseToken`, `orderId`, `productType` e `refundType`. Bastano a trovare l'acquisto esatto nel tuo database e a revocare il diritto a esso collegato.
- `productType` è `1` per un abbonamento annullato e `2` per un acquisto una tantum annullato. `refundType` è `1` per un rimborso completo e `2` per un rimborso parziale basato sulla quantità, che si applica solo agli acquisti una tantum a quantità multipla.
- Una notifica di acquisto annullato significa che il cliente ha già riavuto i propri soldi. L'indicazione di Google è di revocare l'accesso ai contenuti associati, perché l'acquirente non dovrebbe più detenere il diritto.
- Le notifiche di acquisto annullato sono disattivate finché non le attivi. In Play Console, in Monetization setup, scegli o gli abbonamenti più tutti gli acquisti annullati, oppure quello più gli eventi dei prodotti una tantum. Entrambe le opzioni includono gli acquisti annullati.
- Una notifica di acquisto annullato non è uno dei due flussi di rimborso che ti chiedono prove. È un avviso a posteriori. Gli unici flussi che accolgono il tuo contributo sono la CONSUMPTION_REQUEST di Apple, con una finestra di 12 ore, e la revisione del chargeback di Google Play tramite `orders.reviewrefund`, con una finestra di 24 ore.
- Dal 3 agosto 2026, Google trasferisce allo sviluppatore il prezzo di acquisto più la commissione bancaria di un chargeback. Una notifica di acquisto annullato è spesso il modo in cui il tuo server viene a sapere per primo che un annullamento per chargeback è arrivato, quindi collegarla è ciò che ti permette di smettere di servire un cliente per cui non vieni più pagato.
Un rimborso su Google Play non deve per forza essere qualcosa che scopri più tardi in un report. Google Play può inviare al tuo server una notifica di acquisto annullato nell'istante in cui un acquisto viene annullato, che l'acquirente abbia ottenuto un rimborso self-service, che un addetto all'assistenza lo abbia concesso, che una banca abbia imposto un chargeback, o che tu stesso abbia rimborsato l'ordine con il flag di revoca attivo. Il messaggio è minuscolo, nomina l'acquisto esatto e trasporta una sola istruzione, restituisci il diritto, perché i soldi sono già andati.
Cos'è davvero una notifica di acquisto annullato
Una notifica di acquisto annullato è uno dei tipi di Real-time Developer Notifications di Google Play, ovvero RTDN. RTDN è un canale push. Google pubblica un messaggio su un topic Cloud Pub/Sub di tua proprietà, e il tuo backend lo riceve entro pochi istanti dall'evento, invece di scoprirlo al prossimo polling programmato. Questo è tutto il senso della notifica di acquisto annullato rispetto al vecchio percorso pull: vieni a conoscenza del rimborso mentre accade, non ore dopo.
Il percorso pull esiste ancora e conta ancora. La Voided Purchases API permette al tuo server di chiedere, secondo un tuo calendario, l'elenco degli acquisti annullati in un intervallo di tempo. I due sono complementari. La notifica ti dice l'istante in cui un acquisto cambia stato; l'API ti permette di riconciliare in blocco e di recuperare tutto ciò che un messaggio perso avrebbe lasciato indietro.
Viaggia dentro una Real-time Developer Notification
La notifica di acquisto annullato non arriva mai da sola. Sta dentro un wrapper DeveloperNotification, e quel wrapper viene consegnato come un'unica stringa codificata in base64 nel campo data del messaggio Pub/Sub. Il tuo handler decodifica quella stringa in JSON prima di poter leggere qualsiasi cosa. Il wrapper nomina sempre l'app e l'orario dell'evento, e contiene esattamente un oggetto di notifica tra i cinque che Google definisce. Sono mutuamente esclusivi, quindi un messaggio che trasporta un voidedPurchaseNotification non trasporterà anche un evento di abbonamento o una tantum.
| Campo del wrapper | Cosa contiene |
|---|---|
version | La versione dello schema della notifica, per esempio 1.0 |
packageName | L'app a cui appartiene l'evento, per esempio com.acme.app |
eventTimeMillis | Quando è avvenuto l'evento, in millisecondi dall'epoch |
| Uno di cinque oggetti di notifica | oneTimeProductNotification, subscriptionNotification, voidedPurchaseNotification, pendingRefundReviewNotification o testNotification. Ne è presente uno solo per messaggio |
I quattro campi che trasporta
Togli il wrapper e la notifica di acquisto annullato in sé è quattro campi. È volutamente essenziale. La posizione di Google è che se tutto ciò che ti serve è trovare l'acquisto giusto e regolare il diritto, questi quattro bastano, e non devi richiamare alcuna API per agire.
| Campo | Cos'è | Come lo usi |
|---|---|---|
purchaseToken | Il token consegnato al dispositivo quando l'articolo è stato acquistato | La tua chiave primaria. Abbinalo al record di acquisto che hai salvato al momento della concessione |
orderId | L'id dell'ordine mostrato all'acquirente, per esempio GS.0000-0000-0000 | Una seconda chiave leggibile per l'assistenza e la riconciliazione |
productType | Se l'articolo annullato era un abbonamento o un acquisto una tantum | Instrada verso il giusto percorso di revoca |
refundType | Se l'annullamento era un rimborso completo o un rimborso parziale basato sulla quantità | Decidi se revocare tutto o solo la quantità rimborsata |
productType ti dice cosa è stato annullato
productType è un piccolo intero, e decide quale dei tuoi percorsi di revoca prendere. Un annullamento di abbonamento deve smontare un accesso in corso; un annullamento di acquisto una tantum rimuove semplicemente un singolo diritto.
| Valore di `productType` | Costante | Significato |
|---|---|---|
1 | PRODUCT_TYPE_SUBSCRIPTION | È stato annullato un acquisto di abbonamento |
2 | PRODUCT_TYPE_ONE_TIME | È stato annullato un acquisto una tantum |
refundType ti dice quanto è tornato indietro
refundType distingue un'inversione completa e pulita da una parziale. Il caso parziale è ristretto. Compare solo quando un acquisto una tantum a quantità multipla ha avuto rimborsata una parte, ma non tutta, della sua quantità.
| Valore di `refundType` | Costante | Significato |
|---|---|---|
1 | REFUND_TYPE_FULL_REFUND | L'acquisto è stato annullato per intero |
2 | REFUND_TYPE_QUANTITY_BASED_PARTIAL_REFUND | È stata annullata parte di un acquisto a quantità multipla |
Attivala prima, o non arriverà mai
Le notifiche di acquisto annullato non fluiscono per impostazione predefinita. Abiliti RTDN una volta, in Play Console, e la punti su un topic Pub/Sub che controlli. L'interruttore si trova sotto Monetize, poi Monetization setup, nella sezione Real-time developer notifications in cima alla pagina. Spunta Enable real-time notifications, poi incolla il nome completo del topic nella forma projects/{project_id}/topics/{topic_name}, e usa Send Test Message per confermare che il condotto funzioni prima di fidartene.
L'interruttore dei contenuti è il punto in cui le persone perdono gli acquisti annullati. Entrambe le scelte li includono, quindi non puoi rinunciare accidentalmente ai rimborsi mantenendo gli abbonamenti.
- Ricevi notifiche per gli abbonamenti e tutti gli acquisti annullati. Ricevi gli eventi di abbonamento e ogni acquisto annullato, ma non gli eventi di acquisto dei prodotti una tantum.
- Ricevi tutte le notifiche per gli abbonamenti e i prodotti una tantum. Ricevi quanto sopra più gli eventi dei prodotti una tantum come
ONE_TIME_PRODUCT_PURCHASEDeONE_TIME_PRODUCT_CANCELED.

Quanto ti costa, in denaro
Un annullamento è una perdita già contabilizzata nel momento in cui la notifica ti raggiunge. Il prezzo di vendita è andato, e così anche tutto ciò che hai speso per servire quel cliente. Se ha generato immagini, effettuato chiamate ai tuoi modelli, usato spazio di archiviazione o innescato un pagamento a terzi, quei costi sono stati pagati in denaro reale e non tornano con il rimborso. La notifica non può recuperare nulla di tutto ciò. Ciò che può fare è fermare l'emorragia da qui in avanti, che è l'intero motivo per agire in fretta.
L'emorragia è peggiore sugli abbonamenti e peggiore sui chargeback. Un abbonamento che non revochi continua a costarti per essere servito, mese dopo mese, per un cliente che non paga più. E un chargeback è il tipo di annullamento più costoso. Dal 3 agosto 2026, la documentazione di Google afferma che un chargeback trasferisce allo sviluppatore il prezzo di acquisto più la commissione della banca. La notifica di acquisto annullato è spesso il primo luogo in cui i tuoi stessi sistemi vengono a sapere che un chargeback si è concluso, quindi un handler che revoca sul posto è ciò che impedisce a una vendita persa di trasformarsi in una vendita persa più settimane di servizio gratuito.
Come gestire una notifica di acquisto annullato, passo dopo passo
Verifica e deduplica il messaggio
- Conferma che il messaggio Pub/Sub provenga da Google e sia destinato al topic che hai configurato, poi decodifica il campo
database64 per ottenere il JSONDeveloperNotification. - Usa il
messageIddi Pub/Sub per scartare i duplicati. Google avverte che la stessa notifica può essere consegnata più di una volta, quindi tratta la riconsegna come normale e rendi il tuo handler idempotente. - Conferma il messaggio solo dopo averlo registrato in modo sicuro, così un crash a metà handler non perde l'evento.
Cerca l'acquisto
- Abbina il
purchaseTokenall'acquisto che hai salvato quando hai concesso per la prima volta il diritto. Ripiega suorderIdper le ricerche dell'assistenza e la riconciliazione manuale. - Leggi
productTypeper scegliere il percorso di revoca dell'abbonamento o della tantum, e leggirefundTypeper decidere tra una revoca completa e una parziale.
Revoca e registra
- Rimuovi il diritto. Per un rimborso completo, taglia l'accesso all'articolo. Per un rimborso parziale basato sulla quantità, riduci la quantità concessa dell'importo rimborsato e lascia intatto il resto.
- Annota cosa hai fatto e quando, con chiave
purchaseTokeneorderId. Quel record è ciò che ti permette di rispondere a un ticket di assistenza più tardi, ed è ciò che permette alla Voided Purchases API di riconciliare in modo pulito con il tuo stato.
Dove si colloca tra gli altri segnali di rimborso
Una notifica di acquisto annullato è un avviso, non una trattativa. Ti comunica un esito già deciso. Vale la pena vederla accanto ai segnali con cui è facile confonderla, perché solo alcuni di essi chiedono mai la tua versione dei fatti.
| Segnale | Direzione | Accoglie il tuo contributo |
|---|---|---|
| Notifica di acquisto annullato (RTDN) | Google invia al tuo server | No. Riporta un annullamento già avvenuto |
| Voided Purchases API | Il tuo server preleva da Google | No. È un elenco in sola lettura degli annullamenti passati |
pendingRefundReviewNotification (RTDN) | Google invia al tuo server | Sì, indirettamente. Segnala un chargeback che poi contesti tramite orders.reviewrefund entro 24 ore |
| Apple CONSUMPTION_REQUEST | Apple interroga il tuo server | Sì. Rispondi con Send Consumption Information entro 12 ore |
Il punto da tenere a mente è semplice. Tra i due store esistono esattamente due flussi di rimborso in cui lo sviluppatore ha voce in capitolo, la CONSUMPTION_REQUEST di Apple e la revisione del chargeback di Google Play. Una notifica di acquisto annullato non è nessuno dei due. Quando ti raggiunge, la decisione è alle tue spalle e l'unica cosa che ti resta in mano è quanto in fretta revochi.
Domande frequenti
- Cosa significa una notifica di acquisto annullato su Google Play?
- Significa che un acquisto è stato rimborsato, sottoposto a chargeback o altrimenti annullato, e il cliente ha riavuto i propri soldi. L'indicazione di Google è di revocare l'accesso ai contenuti associati, perché l'acquirente non dovrebbe più detenere il diritto. La notifica nomina l'acquisto esatto tramite il suo `purchaseToken` e l'`orderId`.
- Quali campi contiene una notifica di acquisto annullato di Google Play?
- Quattro: `purchaseToken`, `orderId`, `productType` e `refundType`. `productType` è `1` per un abbonamento e `2` per un acquisto una tantum. `refundType` è `1` per un rimborso completo e `2` per un rimborso parziale basato sulla quantità su un acquisto a quantità multipla.
- Come attivo le notifiche di acquisto annullato?
- In Play Console, apri Monetize poi Monetization setup, e nella sezione Real-time developer notifications spunta Enable real-time notifications, poi inserisci il nome del tuo topic Cloud Pub/Sub. Entrambe le opzioni di contenuto, gli abbonamenti più tutti gli acquisti annullati, e quello più gli eventi dei prodotti una tantum, includono gli acquisti annullati.
- Qual è la differenza tra la notifica di acquisto annullato e la Voided Purchases API?
- La notifica è un segnale push consegnato in tempo reale tramite Cloud Pub/Sub nel momento in cui un acquisto viene annullato. La Voided Purchases API è un percorso pull che il tuo server interroga secondo il proprio calendario per elencare gli annullamenti in un intervallo di tempo. Usa la notifica per reagire all'istante e l'API per riconciliare e recuperare.
- Una notifica di acquisto annullato mi permette di contestare il rimborso?
- No. È un avviso a posteriori di una decisione già presa. L'unico flusso di Google Play che accoglie il tuo contributo è la revisione del chargeback tramite `orders.reviewrefund`, a cui hai 24 ore per rispondere, e su Apple è la CONSUMPTION_REQUEST con una finestra di 12 ore.
Fonti e approfondimenti
- Android Developers: Real-time developer notifications reference guide
- Google Play Developer API: Voided Purchases API
- Google Play Developer API: REST Resource purchases.voidedpurchases
- Android Developers: Purchase lifecycle and RTDNs
- Google Play Console Help: refund protection and chargeback cost responsibility
- Google Play Developer API: Method orders.reviewrefund
RefundHalt
Il pilota automatico dei rimborsi per App Store e Google Play
Continua a leggere
Puoi rimborsare tu stesso un ordine di Google Play, e farlo prima di uno storno ti fa risparmiare la commissione bancaria
Puoi rimborsare qualsiasi ordine di Google Play più recente di tre anni con una singola chiamata API, con o senza revocare l'accesso. Farlo tu stesso prima che una contestazione diventi uno storno ti fa risparmiare la commissione bancaria che ricade sugli sviluppatori dal 3 agosto 2026. Ecco come funziona orders.refund.
Il Send Consumption Information di Apple ora chiede cinque campi, non dodici, ed ecco ciascuno di essi
Quando un cliente chiede un rimborso ad Apple, il payload di Send Consumption Information è la tua risposta. Apple lo ha ridotto da dodici campi a cinque, tre obbligatori e due facoltativi. Ecco ogni campo, i valori che ciascuno accetta e la finestra di 12 ore entro cui inviarlo.