Pregunta ¿Cómo detectar y verificar una renovación para una suscripción auto renovable?


Así que configuré una suscripción de renovación automática para mi aplicación con un período de 1 mes, lo que equivale a 5 minutos más o menos en la caja de arena. En la aplicación cliente que me suscribo, envío el recibo a mi servidor, se verifica y coloco un registro en mi base de datos que este usuario tiene una suscripción.

Mi pregunta es ¿cómo puedo verificar si esta suscripción se ha renovado? He leído los documentos y no puedo entender qué debo hacer.

Aquí es donde estoy hasta ahora:

  1. El recibo inicial que se envía a mi servidor se verifica con un estado 0, estupendo. También me da latest_receipt, que reemplazo en mi base de datos con el recibo más antiguo.
  2. Después de 6 minutos cuando intento verificar el latest_receipt, Obtengo estado 21006 (recibo caducado) y esto:
   { 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 }

El segundo elemento en la matriz solía ser latest_receipt_info, pero ahora es latest_EXPIRED_receipt_info. Esto es lo que dicen los documentos:

Además del campo receipt_data, la respuesta también puede incluir   dos nuevos campos Si la suscripción del usuario está activa y fue   renovado por una transacción que tuvo lugar después del recibo de su   servidor enviado a la App Store, el latest_receipt campo incluye un   recibo codificado de base-64 para la última renovación de esta suscripción.    Los datos decodificados para este nuevo recibo también se proporcionan en el    latest_expired_receipt_info campo. Tu servidor puede usar este nuevo   recibo para mantener un registro de la renovación más reciente.

Entonces, si el submarino ha sido renovado desde la última vez que se verificó mi servidor, el recibo decodificado para la renovación debe estar en latest_expired_receipt_info. En ese objeto el expires_date es lo mismo que el recibo original expires_date.

¿Que demonios? Solo quiero comprobar si el submarino está activo. ¿Alguien puede explicar en palabras simples cómo lo hago?

¡Gracias!


22
2017-08-10 10:34


origen


Respuestas:


Mi experiencia. Supongamos que siempre enviamos un recibo inicial al servidor de Apple.

En cualquier caso, obtendrá JSON con al menos dos campos: status (sin comentarios) y receipt (información sobre el recibo que ha enviado).

Además de eso:

1) Si la suscripción es Aún en activo, también obtendrás latest_receipt (cadena codificada en base64) y latest_receipt_info (información sobre ese recibo).

2) Si la suscripción es ya expiró, también obtendrás latest_expired_receipt_info (información sobre el último recibo de renovación). Sí, solo obtiene información al respecto, sin cadena codificada en base64.

Y sí, AFAIK, eso no está documentado en ningún lado. Espero que ayude.


28
2017-08-10 10:45