Tutti gli articoli
Guida pratica7 min di lettura

L'order ID sulla ricevuta App Store di un cliente ti dice cosa ha comprato e se Apple lo ha già rimborsato

L'endpoint Look Up Order ID di Apple trasforma l'order ID della ricevuta App Store di un cliente in transazioni firmate, con date e motivi dei rimborsi. Come usarlo con le email di rimborso, cosa non può fare e come si confronta con l'order ID di Google Play.

Una postazione di assistenza con un portatile aperto sulla posta in arrivo e un iPhone che mostra una ricevuta d'acquisto, dove l'order ID App Store apre la conversazione su un rimborso

Punti chiave

  • Apple invia via email una ricevuta con un order ID ogni volta che un cliente fa acquisti in-app, e il cliente può trovare i suoi order ID anche nella cronologia acquisti dell'App Store.
  • L'endpoint Look Up Order ID della App Store Server API di Apple (GET /inApps/v1/lookup/{orderId}) restituisce una o più transazioni firmate per un order ID valido, così l'assistenza vede productId e purchaseDate senza tirare a indovinare.
  • Una transazione App Store decodificata contiene revocationDate e revocationReason, quindi la ricerca per order ID mostra se Apple ha già rimborsato l'acquisto. Il motivo 1 significa che Apple l'ha rimborsato per un problema reale o percepito all'interno dell'app.
  • Look Up Order ID restituisce OrderLookupStatus 1 e nessun array signedTransactions quando l'order ID non è valido per la tua app, il che segnala una ricevuta sbagliata o un acquisto fatto in un'altra app.
  • Look Up Order ID non è disponibile nell'ambiente sandbox di Apple, e il suo limite in produzione è di 10 richieste al secondo per app, applicato su base oraria.
  • Gli sviluppatori non possono emettere rimborsi App Store. Li decide Apple su reportaproblem.apple.com, e l'unico passaggio in cui lo sviluppatore porta prove è rispondere a un CONSUMPTION_REQUEST entro 12 ore.
  • Google Play invia via email un order ID per ogni acquisto singolo e ogni rinnovo di abbonamento, e lo sviluppatore può cercare quell'order ID in Play Console e rimborsarlo direttamente. Play Console dice che un rimborso non si può annullare.

Prima di rispondere all'email di rimborso di un cliente iPhone, chiedigli l'order ID App Store che trovi sulla sua ricevuta Apple. Quella sola stringa, passata all'endpoint Look Up Order ID di Apple, ti dice quale prodotto ha comprato, quando e se Apple lo ha già rimborsato. Senza, confronti uno screenshot e un indirizzo email con il tuo database e speri. Con quella, sai in pochi secondi se stai parlando con un cliente pagante, con un cliente che Apple ha già rimborsato o con qualcuno che ha in mano la ricevuta di un'altra app.

Da dove viene l'order ID App Store

La documentazione di Apple è precisa. Quando i clienti fanno uno o più acquisti in-app nella tua app, l'App Store invia loro una ricevuta via email, e quella ricevuta contiene un order ID. I clienti possono trovare i loro order ID anche nella cronologia acquisti dell'App Store. La pagina della cronologia acquisti di Apple è su reportaproblem.apple.com e nell'app App Store, sotto App e cronologia acquisti, e mostra per impostazione predefinita gli ultimi 90 giorni, con filtri per gli acquisti più vecchi.

Quindi il cliente ha già la chiave. Il tuo modulo di assistenza deve solo chiedergliela.

Perché un indirizzo email non basta

Apple non condivide con te l'email dell'Account Apple del cliente. L'indirizzo che scrive alla tua casella di assistenza può non avere niente a che fare con l'account che ha pagato. Se imposti un appAccountToken all'acquisto, puoi collegare una transazione al tuo ID utente, ma solo dal tuo lato. L'order ID funziona dal lato del cliente, partendo da una ricevuta che può inoltrare con un tocco.

Cosa restituisce Look Up Order ID

Look Up Order ID fa parte della App Store Server API, disponibile dalla versione 1.1.0. Chiami GET https://api.storekit.apple.com/inApps/v1/lookup/{orderId} con il tuo JWT firmato. Apple dice che la risposta si basa sulla cronologia degli acquisti in-app del cliente, indipendentemente dal fatto che abbia installato, rimosso o reinstallato l'app.

Campo o comportamentoCosa dice la documentazione di AppleCosa ne fa l'assistenza
OrderLookupStatus 0Order ID valido. La risposta contiene un array di una o più transazioni firmateDecodifica ciascuna e leggi l'acquisto
OrderLookupStatus 1La risposta non contiene un array signedTransactionsConsidera l'order ID non valido per la tua app. Chiedi la ricevuta giusta
productId e purchaseDateApple li indica come i campi da usare per l'assistenza clientiConferma cosa è stato comprato e quando
revocationDateIl momento in cui l'App Store ha rimborsato la transazione o l'ha revocata da In famigliaSe presente, Apple ha già restituito i soldi al cliente
revocationReason0: rimborsata per altri motivi, come un acquisto accidentale. 1: rimborsata per un problema reale o percepito all'interno della tua appUn 1 è un segnale di prodotto, non solo un ticket di assistenza
appAccountTokenL'UUID che imposti all'acquisto, se lo impostiCollega l'ordine al tuo record utente
price e currencyApple dice di non usarli per la riconciliazione dei ricaviUsa i report di App Store Connect per i soldi
SandboxL'endpoint non è disponibile nell'ambiente sandboxTesta solo con order ID di produzione
Limite di richieste10 richieste al secondo per app, applicato su base oraria. Chi lo supera riceve HTTP 429 con un header Retry-AfterPiù che sufficiente per l'assistenza, non per scansioni di massa

È una ricevuta valida per la mia app?

È la prima domanda a cui risponde OrderLookupStatus. Un 1 significa che l'order ID non corrisponde ad acquisti nella tua app. I casi tipici sono un errore di battitura, una ricevuta di un'altra app o una ricevuta che non viene nemmeno dall'App Store. Con un 1 non rimborsare, non accreditare e non ripristinare nulla. Chiedi al cliente di ricontrollare la ricevuta.

Apple ha già rimborsato questo acquisto?

Controlla revocationDate in ogni transazione decodificata. Se è valorizzato, Apple ha già rimborsato quell'acquisto o l'ha revocato da In famiglia, e il cliente ha già i suoi soldi. Le tue App Store Server Notifications avrebbero dovuto inviare un REFUND per la stessa transazione, quindi questo è anche un modo economico per verificare che il tuo server abbia davvero revocato l'accesso.

Uno sviluppatore confronta una ricevuta App Store stampata con righe di transazioni su un portatile, controllando un order ID App Store prima di rispondere a una richiesta di rimborso

Cosa l'order ID non può fare sull'App Store

Non può emettere un rimborso. Gli sviluppatori non hanno un pulsante di rimborso sull'App Store. I rimborsi li decide Apple, e il suo articolo di supporto manda i clienti su reportaproblem.apple.com, dove scelgono “I'd like to”, poi “Request a refund”, indicano un motivo e selezionano l'articolo. Apple aggiunge che un addebito in sospeso non può essere rimborsato finché il cliente non ha ricevuto la ricevuta via email.

L'unico punto in cui hai voce in capitolo è il CONSUMPTION_REQUEST di Apple. Quando un cliente chiede un rimborso ad Apple, Apple può inviare quella notifica, e hai 12 ore per rispondere con Send Consumption Information. La ricerca per order ID è uno strumento di assistenza. Non apre quella finestra e non la allunga.

Quanto costa un'email di rimborso se salti la ricerca

L'assistenza senza order ID è il punto da cui i soldi escono in silenzio. Tre schemi si ripetono di continuo.

  • Omaggi sopra un rimborso. Apple rimborsa l'acquisto, il cliente scrive anche a te e l'assistenza concede crediti gratuiti o un mese in più. Ogni credito che regali gira su calcolo, chiamate API e storage che paghi tu, su un account già rimborsato.
  • Accesso mai revocato. Se la tua gestione dei REFUND non ha funzionato, il cliente rimborsato continua a generare utilizzo. Una ricerca che mostra un revocationDate mentre il tuo database dice ancora attivo è una segnalazione di bug con un prezzo.
  • Account sbagliato, correzione sbagliata. Ripristinare o accreditare l'account dietro un'email inoltrata, quando l'order ID appartiene a qualcun altro, regala un servizio a pagamento a chi non l'ha mai comprato.

Nessuno di questi casi ha bisogno di una contestazione o di una scadenza per fare danni. Sono solo risposte di assistenza date senza i fatti. Una chiamata API per ticket elimina le congetture.

revocationReason 1 vuol dire che ho sbagliato qualcosa?

Non per forza. Apple dice che il motivo 1 significa che ha rimborsato l'acquisto per un problema reale o percepito all'interno della tua app. La parola percepito pesa parecchio. Ma un gruppo di rimborsi con motivo 1 sullo stesso prodotto, dopo la stessa release, è il feedback di prodotto più chiaro che Apple ti dà. Contali.

Come si confronta l'order ID di Google Play

Google Play funziona al contrario. La documentazione di fatturazione di Google dice che gli utenti ricevono un'email con un order ID univoco per ogni acquisto di prodotto singolo, per l'acquisto iniziale dell'abbonamento e per ogni rinnovo ricorrente, e che puoi usare l'order ID per gestire i rimborsi in Play Console. Cerchi nella gestione degli ordini per order ID o per l'email completa dell'utente, poi rimborsi tu stesso.

DomandaOrder ID App StoreOrder ID Google Play
Dove lo trova il clienteRicevuta via email e cronologia acquisti dell'App StoreRicevuta via email per ogni acquisto e ogni rinnovo
Come lo cerchiLook Up Order ID nella App Store Server APIRicerca nella gestione degli ordini di Play Console
Puoi rimborsare con essoNo. Decide AppleSì. Rimborsi totali, e parziali su acquisti in-app e abbonamenti
Finestra per le prove sul rimborsoCONSUMPTION_REQUEST, 12 ore, decide AppleRevisione dello storno tramite orders.reviewrefund, 24 ore
Un rimborso si può annullareNon da teNo. Play Console dice che un rimborso non si può annullare

Su Google Play l'order ID conta di più perché sei tu a premere il pulsante. Play Console dice che rimborsare l'ordine di abbonamento più recente rimuove subito l'abbonamento e annulla i rinnovi futuri, mentre rimborsare un ordine precedente è solo un rimborso e lascia l'abbonamento attivo. I rimborsi parziali sono supportati solo per gli ordini effettuati dopo marzo 2018, e non puoi rimborsare parzialmente un'app a pagamento.

Metti l'order ID all'inizio del tuo flusso di assistenza sui rimborsi

  • Chiedi l'order ID nel modulo di assistenza, con un suggerimento di una riga: si trova nell'email con la ricevuta di Apple o di Google Play.
  • Su iOS, chiama Look Up Order ID, decodifica ogni transazione e mostra all'assistenza productId, purchaseDate, revocationDate e revocationReason in un'unica schermata.
  • Se OrderLookupStatus è 1, fermati e chiedi la ricevuta giusta. Non concedere nulla.
  • Se revocationDate è valorizzato, verifica che l'accesso sia già revocato sul tuo server, poi chiudi il ticket. Niente omaggi in più.
  • Se non lo è e il cliente vuole indietro i soldi, mandalo su reportaproblem.apple.com e tieni pronto il tuo gestore del CONSUMPTION_REQUEST per la finestra di 12 ore. RefundHalt risponde a quella richiesta con i dati di consumo che Apple chiede.
  • Su Android, trova l'ordine esatto in Play Console prima di rimborsare, e scegli consapevolmente tra solo rimborso e rimborso con revoca.

Domande frequenti

Come cerco un order ID App Store da sviluppatore?
Chiama l'endpoint Look Up Order ID della App Store Server API, GET https://api.storekit.apple.com/inApps/v1/lookup/{orderId}, con il tuo JWT firmato. Un order ID valido restituisce OrderLookupStatus 0 e una o più transazioni firmate che decodifichi per leggere productId, purchaseDate ed eventuali dettagli del rimborso. L'endpoint non è disponibile in sandbox.
Dove trova un cliente il suo order ID App Store?
Nella ricevuta via email che Apple invia ogni volta che fa acquisti in-app, e nella cronologia acquisti dell'App Store, su reportaproblem.apple.com o sotto App e cronologia acquisti nell'app App Store. La cronologia mostra per impostazione predefinita gli ultimi 90 giorni, con filtri per gli acquisti più vecchi.
Posso rimborsare un acquisto App Store con l'order ID?
No. Gli sviluppatori non possono emettere rimborsi App Store. Li decide Apple quando il cliente ne chiede uno su reportaproblem.apple.com. Il tuo contributo è rispondere al CONSUMPTION_REQUEST di Apple entro 12 ore con Send Consumption Information.
Come capisco se Apple ha già rimborsato un acquisto?
Cerca l'order ID e controlla revocationDate in ogni transazione decodificata. Se è valorizzato, Apple ha rimborsato l'acquisto o l'ha revocato da In famiglia. revocationReason 0 indica altri motivi, come un acquisto accidentale, e 1 indica un problema reale o percepito all'interno della tua app.
Cosa significa OrderLookupStatus 1?
Significa che l'order ID non è valido per la tua app, e la risposta non ha l'array signedTransactions. Di solito il cliente ha inviato la ricevuta di un'altra app, ha scritto male l'ID o ha inviato una ricevuta che non viene dall'App Store. Chiedi la ricevuta giusta prima di concedere qualsiasi cosa.

Fonti e approfondimenti

RefundHalt

Il pilota automatico dei rimborsi per App Store e Google Play

Continua a leggere

La prossima richiesta di rimborso è già in arrivo.

Configura RefundHalt nel tempo che impiegheresti a leggere un'altra e-mail dell'assistenza su un rimborso che non sei riuscito a contestare.