Suscripción de renovación automática de iOS (sandbox)

Actualmente estoy probando mi código para renovar automáticamente las suscripciones. En la mayoría de los casos funciona como se esperaba. Pero, de vez en cuando, veo resultados inesperados.

Compro una nueva suscripción, obtengo un recibo (transaction_id = 1000000075229775). Justo después de recibir este recibo (antes de que llegue la date de vencimiento), envío este recibo a sandbox.itunes.apple.com y devuelve un nuevo recibo con una ID de transacción diferente (latest_receipt_info con transaction_id = 1000000075229779). No esperaba get este nuevo recibo (con un ID de transacción diferente) antes de que se scope la primera date de vencimiento. Aquí hay un extracto de ambos recibos. Tenga en count que las dates de caducidad son muy cercanas (less de una segunda diferencia).

¿Podrías ayudarme a entender lo que está sucediendo?

Gracias.

["receipt"]=>object(stdClass)#14 (19) { ["original_purchase_date_pst"]=>string(39) "2012-12-03 08:20:49 America/Los_Angeles" ["unique_identifier"]=>string(40) "af430ef98d6bdbbf92ed34e4addec2e834bc25d6" ["original_transaction_id"]=>string(16) "1000000059708880" ["expires_date"]=>string(13) "1369421691100" ["transaction_id"]=>string(16) "1000000075229775" ["quantity"]=>string(1) "1" ["expires_date_formatted"]=>string(27) "2013-05-24 18:54:51 Etc/GMT" ["purchase_date"]=>string(27) "2013-05-24 18:49:51 Etc/GMT" ["purchase_date_ms"]=>string(13) "1369421391100" ["original_purchase_date"]=>string(27) "2012-12-03 16:20:49 Etc/GMT" ["original_purchase_date_ms"]=>string(13) "1354551649000" ... } ["latest_receipt_info"]=>object(stdClass)#12 (19) { ["original_purchase_date_pst"]=>string(39) "2012-12-03 08:20:49 America/Los_Angeles" ["unique_identifier"]=>string(40) "345fade172e62c805d0d354edda97575fc9b9d50" ["original_transaction_id"]=>string(16) "1000000059708880" ["expires_date"]=>string(13) "1369421691000" ["transaction_id"]=>string(16) "1000000075229779" ["quantity"]=>string(1) "1" ["expires_date_formatted"]=>string(27) "2013-05-24 18:54:51 Etc/GMT" ["purchase_date"]=>string(27) "2013-05-24 18:49:51 Etc/GMT" ["purchase_date_ms"]=>string(13) "1369421391000" ["original_purchase_date"]=>string(27) "2012-12-03 16:20:49 Etc/GMT" ["original_purchase_date_ms"]=>string(13) "1354551649000" ... } ["status"]=>int(0) 

Eche un vistazo a original_transaction_id y no se preocupe por transaction_id. Puede get un transaction_id diferente bajo ciertas circunstancias (por ejemplo: al restaurar una compra). No creo que todos los detalles sobre cuándo puede cambiar un transaction_id están documentados.

Según la documentation de Apple sobre suscripción renovable (aquí: https://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/RenewableSubscriptions/RenewableSubscriptions.html#//apple_ref/doc/uid/TP40008267 -CH4-SW2 ):

original_transaction_id: contiene el identificador de transacción para la compra inicial. Todas las renovaciones posteriores de esta suscripción y las transactions recuperadas comparten este identificador.

Esta identificación siempre reflejará la identificación de la transacción para realizar inicialmente la compra.