CHARGEBACKGOOGLE PLAY

Rimborsi e acquisti annullati su Google Play: cosa farne

Come funzionano rimborsi, revoche e chargeback per gli abbonamenti Google Play: notifiche di acquisto annullato, Voided Purchases API e revisione rimborsi.

Pubblicato il 6 min di lettura

Su Google Play, i soldi possono tornare a un abbonato in diversi modi: l’utente ottiene un rimborso, lo rimborsi tu dalla Play Console o dall’API, un acquisto non viene mai confermato, oppure il pagamento subisce un chargeback. Google raggruppa tutti questi casi sotto un unico termine: un voided purchase (acquisto annullato). Se concedi accesso o crediti dal tuo backend, devi sapere di ognuno di essi.

Questa guida spiega dove compaiono gli acquisti annullati, cosa ti dice Google su ciascuno, la nuova revisione dei rimborsi per i chargeback e come rispondere. Si attiene alla documentazione di Google: il riferimento delle notifiche in tempo reale per sviluppatori, le best practice di sicurezza sugli acquisti annullati, la gestione degli acquisti rifiutati, il ciclo di vita degli abbonamenti e il riferimento della Google Play Developer API per voided purchases, orders.refund e orders.reviewrefund (tutti consultati a novembre 2026).

Cosa conta come acquisto annullato

La pagina sulla sicurezza di Google definisce gli acquisti annullati come “acquisti che sono stati annullati, revocati o oggetto di chargeback”, ed elenca le cause principali:

  • L’acquisto viene annullato dall’utente, dallo sviluppatore o da Google, compresi gli acquisti annullati automaticamente perché non sono mai stati confermati. Per gli abbonamenti, significa annullare l’acquisto stesso, non solo disattivare il rinnovo.
  • L’acquisto subisce un chargeback.
  • Lo sviluppatore annulla o rimborsa un ordine e seleziona l’opzione “revoke”.

Una normale disdetta dell’abbonamento (l’utente ferma il rinnovo) non è un acquisto annullato. È un evento SUBSCRIPTION_CANCELED, e l’utente mantiene l’accesso fino alla fine del periodo.

Rimborsare, revocare o entrambi

Hai tre azioni, e fanno cose diverse:

Azione API Soldi Accesso
Solo rimborso orders.refund senza revoke Rimborsati Mantenuto
Rimborso e revoca orders.refund con revoke=true, o purchases.subscriptionsv2.revoke con rimborso totale Rimborsati Terminato subito
Disdetta purchases.subscriptionsv2.cancel Non rimborsati Mantenuto fino alla fine del periodo

Punti della documentazione di Google da conoscere:

  • orders.refund non può rimborsare ordini più vecchi di tre anni. Con revoke impostato a true, l’accesso termina subito e, per un abbonamento ricorrente, tutti i pagamenti futuri si fermano.
  • La guida all’integrazione di Google dice che le revoche dello sviluppatore e i rimborsi con revoca attivano notifiche e compaiono nella Voided Purchases API con voidedSource impostato su sviluppatore. Per gli abbonamenti, ricevi sia SUBSCRIPTION_REVOKED sia una VoidedPurchaseNotification.
  • Un rimborso senza revoca “non attiva una notifica di revoca o di acquisto annullato”. Se lo usi, registralo tu.
  • Se non confermi un nuovo abbonamento entro tre giorni, l’utente viene rimborsato automaticamente e l’acquisto viene revocato. Google chiede di non affidarsi a questo meccanismo per rifiutare gli acquisti: revoca e rimborsa esplicitamente.

Dove compaiono gli acquisti annullati

In tempo reale: VoidedPurchaseNotification

Se la tua app Play ha attive le notifiche in tempo reale per sviluppatori, un acquisto annullato arriva come voidedPurchaseNotification con:

  • purchaseToken: l’acquisto annullato.
  • orderId: l’ordine esatto. Per gli abbonamenti, ogni rinnovo ha il proprio ID ordine, quindi questo ti dice quale pagamento è stato annullato.
  • productType: 1 abbonamento, 2 prodotto una tantum.
  • refundType: 1 rimborso totale, 2 rimborso parziale basato sulla quantità (solo per acquisti con più quantità).

Google nota che questo basta per “individuare l’acquisto e l’ordine giusti per adeguare il diritto di accesso”. Per gli abbonamenti, una revoca invia anche una notifica di abbonamento SUBSCRIPTION_REVOKED; la guida al ciclo di vita dice di revocare subito il diritto di accesso dell’utente in quel caso.

In blocco: la Voided Purchases API

purchases.voidedpurchases.list è un’API a richiesta. Dal riferimento dell’API:

  • Copre gli ultimi 30 giorni: startTime non può essere più vecchio.
  • Di default restituisce solo i prodotti una tantum. Passa type=1 per includere gli abbonamenti.
  • Ogni record ha un voidedReason: 0 Other, 1 Remorse, 2 Not_received, 3 Defective, 4 Accidental_purchase, 5 Fraud, 6 Friendly_fraud, 7 Chargeback, 8 Unacknowledged_purchase.
  • E un voidedSource: 0 utente, 1 sviluppatore, 2 Google.

I codici motivo sono la parte più utile, perché la notifica non li include. Un’avvertenza dalla pagina sulla sicurezza: gli acquisti annullati “senza alcun contenuto da recuperare associato non sono esposti dalla Voided Purchases API”.

Usa entrambi: la notifica per agire in pochi secondi, e una richiesta giornaliera all’API per avere i motivi e recuperare ciò che ti è sfuggito.

Chargeback: la revisione del rimborso

Google ha aggiunto un modo per permettere agli sviluppatori di dire la loro su alcuni chargeback. Quando un utente richiede un chargeback che necessita della revisione dello sviluppatore, ricevi una pendingRefundReviewNotification. Secondo il riferimento RTDN, dovresti valutare la richiesta e inviare “un suggerimento sul rimborso e prove di utilizzo dell’acquisto entro 24 ore” chiamando orders.reviewrefund. Al momento le revisioni in sospeso supportano solo CHARGEBACK come motivo.

Il corpo della richiesta, secondo il riferimento dell’API:

Campo Significato
pendingRefundToken Dalla notifica; obbligatorio
refundPreference APPROVE, DECLINE o NEUTRAL; obbligatorio
sampleContentProvided Se hai offerto un campione gratuito, una prova o una descrizione prima dell’acquisto; obbligatorio
consumptionPercentageMilliunits Facoltativo, da 0 a 100.000 (45.200 significa 45,2%)
consumptionUsageEvents Elenco facoltativo di eventi di utilizzo (ora, descrizione dell’elemento, indirizzo IP, posizione, account o profilo ID offuscato); gli elenchi con più di 1.000 elementi vengono rifiutati

La notifica include obfuscatedAccountId e obfuscatedProfileId se li hai impostati all’acquisto. Senza di essi, faticherai a trovare l’utilizzo dell’utente entro 24 ore.

Sii sincero. Se l’utente non ha potuto usare ciò per cui ha pagato, APPROVE è la risposta giusta. Se ha usato l’abbonamento per tutto il periodo, un DECLINE con eventi di utilizzo concreti è ciò a cui serve il campo.

Cosa fare con ogni acquisto annullato

La guida alla sicurezza di Google raccomanda, a seconda del motivo e dello storico dell’utente:

  1. Recuperare gli elementi non usati, come la valuta in-app concessa.
  2. Più avvertimenti: un avviso in-app per un primo caso, misure più forti per i casi ripetuti.
  3. Disattivare temporaneamente gli acquisti mentre indaghi.
  4. Limitare l’accesso alla tua app in casi estremi e ripetuti.
  5. Chiamare la Voided Purchases API più spesso quando rilevi acquisti annullati.

Per un’app in abbonamento, una policy pratica è questa:

Motivo Risposta suggerita
Acquisto accidentale, pentimento Termina l’accesso per il periodo rimborsato; nessun avvertimento. Magari chiedi un feedback
Non ricevuto, difettoso Trattalo come un bug del prodotto; indaga sull’account dell’utente
Acquisto non confermato Sistema l’elaborazione degli acquisti; è un tuo bug, non dell’utente
Frode, friendly fraud, chargeback Termina l’accesso, segnala l’account, blocca i nuovi acquisti fino alla revisione

Errori comuni

  • Gestire solo SUBSCRIPTION_CANCELED. Significa “smetti di rinnovare”, non “rimborsato”. Le revoche arrivano come SUBSCRIPTION_REVOKED e notifiche di acquisto annullato.
  • Rimborsare senza revoca e dimenticarsene. Nessuna notifica te lo ricorderà.
  • Interrogare l’API meno di una volta al mese. Tutto ciò che ha più di 30 giorni sparisce dall’API.
  • Nessun account ID offuscato. Non puoi rispondere in tempo a una revisione del rimborso se non riesci a trovare l’utente.
  • Punire i rimborsi per pentimento come le frodi. I codici motivo esistono proprio per distinguerli.

Farlo con NoChurn

NoChurn legge le tue notifiche in tempo reale per sviluppatori di Google Play e la Voided Purchases API, così rimborsi, revoche e chargeback compaiono nella cronologia di ogni cliente con il loro motivo e alimentano il churn score. Su Google Play, in NoChurn i rimborsi sono in sola lettura: le decisioni di rimborso e le revisioni dei rimborsi restano a te e a Google, e pagamenti e nuovi tentativi restano a Google. Per abbinare gli acquisti ai clienti, imposta un account ID offuscato all’acquisto. Vedi NoChurn + Google Play.

PROMPT

Read https://www.nochurn.sh/llms.txt,
then follow https://www.nochurn.sh/docs/quickstart/
to add NoChurn to this app. Use a test key
(nc_test_…) until I say we go live.

Smetti di perdere ricavi.

  • Gratis fino a $300 MRR
  • Nessuna carta richiesta
  • Attivo in 10 minuti
  • Mai una quota di ciò che recuperiamo