2013-08-10 7 views
21

Così ho impostato un abbonamento auto-rinnovabile per la mia app con un periodo di 1 mese, che equivale a circa 5 minuti nella sandbox. Nell'app client mi iscrivo, invio la ricevuta al mio server, viene verificata e inserisco un record nel mio database che questo utente ha un abbonamento.Come rilevare e verificare un rinnovo per un abbonamento auto-rinnovabile?

La mia domanda è: come posso verificare se questo abbonamento è stato rinnovato? Ho letto i documenti e non riesco a capire cosa dovrei fare.

Ecco dove sono finora:

  1. Il ricevimento iniziale che viene inviato al mio server è verificata con uno stato 0, grande. Ricevo anche latest_receipt, che sostituisco nel mio database con la ricevuta più vecchia.
  2. Dopo 6 minuti, quando provo a verificare il latest_receipt, ottengo lo stato 21006 (ricezione scaduto) e questo:
{ receipt: 
     { original_purchase_date_pst: '2013-08-06 11:58:04 America/Los_Angeles', 
     unique_identifier: '------------', 
     original_transaction_id: '----------', 
     expires_date: '1376129825000', 
     transaction_id: '------------', 
     quantity: '1', 
     product_id: 'subscription', 
     item_id: '--------', 
     bid: 'com.--------', 
     unique_vendor_identifier: '---------', 
     web_order_line_item_id: '---------', 
     bvrs: '2.0', 
     expires_date_formatted: '2013-08-10 10:17:05 Etc/GMT', 
     purchase_date: '2013-08-10 10:12:05 Etc/GMT', 
     purchase_date_ms: '1376129525000', 
     expires_date_formatted_pst: '2013-08-10 03:17:05 America/Los_Angeles', 
     purchase_date_pst: '2013-08-10 03:12:05 America/Los_Angeles', 
     original_purchase_date: '2013-08-06 18:58:04 Etc/GMT', 
     original_purchase_date_ms: '1375815484000' }, 
     latest_expired_receipt_info: 
     { original_purchase_date_pst: '2013-08-06 11:58:04 America/Los_Angeles', 
     unique_identifier: '-------', 
     original_transaction_id: '-', 
     expires_date: '1376129825000', 
     transaction_id: '-', 
     quantity: '1', 
     product_id: 'subscription', 
     item_id: '-', 
     bid: 'com.-', 
     unique_vendor_identifier: '--', 
     web_order_line_item_id: '-', 
     bvrs: '2.0', 
     expires_date_formatted: '2013-08-10 10:17:05 Etc/GMT', 
     purchase_date: '2013-08-10 10:12:05 Etc/GMT', 
     purchase_date_ms: '1376129525000', 
     expires_date_formatted_pst: '2013-08-10 03:17:05 America/Los_Angeles', 
     purchase_date_pst: '2013-08-10 03:12:05 America/Los_Angeles', 
     original_purchase_date: '2013-08-06 18:58:04 Etc/GMT', 
     original_purchase_date_ms: '1375815484000' }, 
     status: 21006 } 

Il secondo elemento della matrice usato per essere latest_receipt_info, ma ora è latest_EXPIRED_receipt_info. Ecco cosa dicono i documenti:

Oltre al campo receipt_data, la risposta può anche includere due nuovi campi. Se abbonamento dell'utente è attivo ed è stato rinnovato da una transazione che ha avuto luogo dopo il ricevimento del server inviato ad App Store, il campo latest_receipt comprende una base-64 il ricevimento codificato per l'ultimo rinnovo per questa sottoscrizione . I dati decodificati per questa nuova ricevuta vengono anche forniti nel campo latest_expired_receipt_info. Il tuo server può utilizzare questa nuova ricevuta per mantenere un record del rinnovo più recente.

Quindi, se il sub è stato rinnovato dal mio server dell'ultimo controllo, la ricevuta decodificato per il rinnovo deve essere in latest_expired_receipt_info. In questo oggetto lo expires_date è uguale a quello della ricevuta originale expires_date.

Che diavolo? Voglio solo verificare se il sub è attivo. Qualcuno può spiegare in parole semplici come faccio?

Grazie!

risposta

25

La mia esperienza. Supponiamo di inviare sempre una ricevuta iniziale al server Apple.

In ogni caso, otterrete JSON con almeno due campi: status (senza commenti) e receipt (informazioni sulla ricevuta che avete inviato).

In aggiunta a questo:

1) Se l'abbonamento è ancora attivo, potrai inoltre ottenere latest_receipt (stringa con codifica base64) e latest_receipt_info (informazioni su quella ricevuta).

2) Se l'abbonamento è già scaduto, è inoltre possibile ottenere latest_expired_receipt_info (informazioni sull'ultimo scontrino di rinnovo). Sì, ottieni solo informazioni su di esso, nessuna stringa con codifica Base64.

E sì, AFAIK, che non è documentato da nessuna parte. Spero possa aiutare.

+0

E la domanda immediata: perché la sandbox non rinnova automaticamente l'abbonamento? O come lo rinnovo da solo? In questo momento la ricevuta scade dopo 5 minuti e questo è tutto. Ho bisogno di testare il mio codice in qualche modo. –

+4

In sandbox, si sta lavorando con gli account di prova. Non è possibile utilizzare l'account di prova per accedere a iTunes e disabilitare il rinnovo automatico dell'abbonamento. Per testare la situazione, quando l'abbonamento auto-rinnovabile diventa scaduto e inattivo, Apple esegue solo 5 rinnovi in ​​sandbox (ovvero hai una transazione iniziale e 5 si rinnova dopo di essa -> la coda delle sottoscrizioni totali 'è 6 volte l'abbonamento lunghezza). Questo si aggiornerà dopo 8 ore. Oppure puoi usare un altro account di prova. –

+0

Ok, l'ho capito. Ecco una spiegazione più semplice: http://stackoverflow.com/questions/8033673/ios-sboxbox-environment-auto-renewal-subscription –

Problemi correlati