Todos los artículos
Deep dive7 min de lectura

Una notificación de compra anulada permite que tu servidor de Google Play revoque el acceso en el momento en que llega un reembolso

Google Play puede enviar a tu servidor una notificación de compra anulada en el instante en que una compra se reembolsa, se revierte por contracargo o se anula. Lleva un purchaseToken, orderId, productType y refundType, y significa una sola cosa, revocar el acceso. Así es como se lee y se conecta.

Un espacio de trabajo de desarrollador al anochecer con un teléfono que muestra un pago revertido, ilustrando una notificación de compra anulada de Google Play que llega a un servidor

Puntos clave

  • Una notificación de compra anulada es una Real-time Developer Notification que Google Play envía a tu tema de Cloud Pub/Sub en el momento en que una compra se reembolsa, se revierte por contracargo o se anula de otro modo. Es una señal de tipo push, no algo que tengas que consultar por sondeo.
  • La notificación lleva exactamente cuatro campos: `purchaseToken`, `orderId`, `productType` y `refundType`. Eso basta para encontrar la compra exacta en tu base de datos y revocar el derecho de acceso asociado a ella.
  • `productType` es `1` para una suscripción anulada y `2` para una compra única anulada. `refundType` es `1` para un reembolso total y `2` para un reembolso parcial basado en cantidad, que solo se aplica a compras únicas de varias unidades.
  • Una notificación de compra anulada significa que el cliente ya tiene su dinero de vuelta. La propia recomendación de Google es revocar el acceso al contenido asociado, porque el comprador ya no debería conservar ese derecho.
  • Las notificaciones de compra anulada están desactivadas hasta que las activas. En Play Console, dentro de Monetization setup, eliges suscripciones más todas las compras anuladas, o eso mismo más los eventos de productos únicos. Ambas opciones incluyen las compras anuladas.
  • Una notificación de compra anulada no es uno de los dos flujos de reembolso que te piden pruebas. Es un aviso posterior a los hechos. Los únicos flujos que aceptan tu aportación son el CONSUMPTION_REQUEST de Apple, con una ventana de 12 horas, y la revisión de contracargos de Google Play a través de orders.reviewrefund, con una ventana de 24 horas.
  • A partir del 3 de agosto de 2026, Google traslada al desarrollador el precio de compra más la comisión bancaria de un contracargo. Una notificación de compra anulada suele ser la forma en que tu servidor se entera por primera vez de que ha llegado una anulación por contracargo, así que conectarla es lo que te permite dejar de dar servicio a un cliente por el que ya no te pagan.

Un reembolso en Google Play no tiene por qué ser algo que descubras más tarde en un informe. Google Play puede enviar a tu servidor una notificación de compra anulada en el instante en que una compra se anula, ya sea que el comprador haya solicitado un reembolso de autoservicio, que un agente de soporte lo haya concedido, que un banco haya forzado un contracargo, o que tú mismo hayas reembolsado el pedido con la marca de revocación activada. El mensaje es diminuto, nombra la compra exacta y lleva una sola instrucción, devuelve el derecho de acceso, porque el dinero ya se ha ido.

Qué es realmente una notificación de compra anulada

Una notificación de compra anulada es un tipo de las Real-time Developer Notifications de Google Play, o RTDN. RTDN es un canal de tipo push. Google publica un mensaje en un tema de Cloud Pub/Sub de tu propiedad, y tu backend lo recibe pocos momentos después del evento, en lugar de enterarse en tu próximo sondeo programado. Ese es todo el sentido de la notificación de compra anulada frente a la antigua vía de sondeo: te enteras del reembolso a medida que ocurre, no horas después.

La vía de sondeo sigue existiendo y sigue importando. La Voided Purchases API permite que tu servidor pida, según tu propia planificación, la lista de compras que se anularon en un intervalo de tiempo. Las dos son complementarias. La notificación te avisa en el instante en que una compra cambia de estado; la API te permite conciliar en bloque y rellenar cualquier cosa que un mensaje perdido habría dejado atrás.

Viaja dentro de una Real-time Developer Notification

La notificación de compra anulada nunca llega por sí sola. Se encuentra dentro de un envoltorio DeveloperNotification, y ese envoltorio se entrega como una única cadena codificada en base64 en el campo data del mensaje de Pub/Sub. Tu controlador decodifica esa cadena a JSON antes de poder leer nada. El envoltorio siempre nombra la app y la hora del evento, y contiene exactamente un objeto de notificación de los cinco que define Google. Son mutuamente excluyentes, así que un mensaje que lleve un voidedPurchaseNotification no llevará también un evento de suscripción o de compra única.

Campo del envoltorioQué contiene
versionLa versión del esquema de la notificación, por ejemplo 1.0
packageNameLa app a la que pertenece el evento, por ejemplo com.acme.app
eventTimeMillisCuándo ocurrió el evento, en milisegundos desde epoch
Uno de cinco objetos de notificaciónoneTimeProductNotification, subscriptionNotification, voidedPurchaseNotification, pendingRefundReviewNotification o testNotification. Solo hay uno presente por mensaje

Los cuatro campos que lleva

Quita el envoltorio y la notificación de compra anulada en sí son cuatro campos. Es deliberadamente escueta. La postura de Google es que, si lo único que necesitas es encontrar la compra correcta y ajustar el derecho de acceso, estos cuatro bastan, y no tienes que volver a llamar a ninguna API para actuar.

CampoQué esCómo lo usas
purchaseTokenEl token entregado al dispositivo cuando se compró el artículoTu clave principal. Emparéjalo con el registro de compra que guardaste al conceder el acceso
orderIdEl id de pedido mostrado al comprador, por ejemplo GS.0000-0000-0000Una segunda clave legible para soporte y conciliación
productTypeSi el artículo anulado era una suscripción o una compra únicaEncamina hacia la vía de revocación correcta
refundTypeSi la anulación fue un reembolso total o un reembolso parcial basado en cantidadDecide si revocar todo o solo la cantidad reembolsada

productType te dice qué se anuló

productType es un entero pequeño, y decide cuál de tus vías de revocación tomar. La anulación de una suscripción tiene que deshacer un acceso continuo; la anulación de una compra única solo elimina un único derecho de acceso.

Valor de `productType`ConstanteSignificado
1PRODUCT_TYPE_SUBSCRIPTIONSe anuló una compra de suscripción
2PRODUCT_TYPE_ONE_TIMESe anuló una compra única

refundType te dice cuánto se devolvió

refundType separa una reversión total limpia de una parcial. El caso parcial es acotado. Solo aparece cuando una compra única de varias unidades tuvo reembolsada parte, pero no toda, de su cantidad.

Valor de `refundType`ConstanteSignificado
1REFUND_TYPE_FULL_REFUNDLa compra se anuló por completo
2REFUND_TYPE_QUANTITY_BASED_PARTIAL_REFUNDSe anuló parte de una compra de varias unidades

Actívala primero, o nunca llegará

Las notificaciones de compra anulada no fluyen de forma predeterminada. Habilitas RTDN una vez, en Play Console, y lo apuntas a un tema de Pub/Sub que tú controlas. El interruptor está en Monetize, luego Monetization setup, en la sección Real-time developer notifications, en la parte superior de la página. Marca Enable real-time notifications, luego pega el nombre completo de tu tema con el formato projects/{project_id}/topics/{topic_name}, y usa Send Test Message para confirmar que el conducto funciona antes de fiarte de él.

El selector de contenido es donde la gente pasa por alto las compras anuladas. Ambas opciones las incluyen, así que no puedes excluir por accidente los reembolsos mientras conservas las suscripciones.

  • Recibir notificaciones para suscripciones y todas las compras anuladas. Recibes eventos de suscripción y toda compra anulada, pero no los eventos de compra de productos únicos.
  • Recibir todas las notificaciones para suscripciones y productos únicos. Recibes lo anterior más los eventos de productos únicos como ONE_TIME_PRODUCT_PURCHASED y ONE_TIME_PRODUCT_CANCELED.
Una tarjeta de crédito boca abajo junto a un recibo de papel, representando una compra anulada de Google Play

Lo que te cuesta, en dinero

Una anulación es una pérdida que ya está registrada para cuando la notificación te llega. El precio de venta se ha ido, y también todo lo que gastaste dando servicio a ese cliente. Si generó imágenes, ejecutó llamadas contra tus modelos, consumió almacenamiento o desencadenó un pago a un tercero, esos costes se pagaron con dinero real y no vuelven con el reembolso. La notificación no puede recuperar nada de eso. Lo que sí puede hacer es detener la hemorragia de aquí en adelante, que es toda la razón para actuar con rapidez.

La hemorragia es peor en las suscripciones y peor en los contracargos. Una suscripción que no revocas te sigue costando dar servicio, mes tras mes, por un cliente que ya no paga. Y un contracargo es el tipo de anulación más caro. A partir del 3 de agosto de 2026, la documentación de Google indica que un contracargo traslada al desarrollador el precio de compra más la comisión del banco. La notificación de compra anulada es con frecuencia el primer lugar donde tus propios sistemas se enteran de que un contracargo se ha completado, así que un controlador que revoca en el acto es lo que evita que una venta perdida se convierta en una venta perdida más semanas de servicio gratis.

Cómo gestionar una notificación de compra anulada, paso a paso

Verifica y elimina duplicados del mensaje

  • Confirma que el mensaje de Pub/Sub procede de Google y apunta al tema que configuraste, luego decodifica el campo data en base64 para obtener el JSON de DeveloperNotification.
  • Usa el messageId de Pub/Sub para descartar duplicados. Google advierte de que la misma notificación puede entregarse más de una vez, así que trata la reentrega como algo normal y haz que tu controlador sea idempotente.
  • Confirma la recepción del mensaje solo después de haberlo registrado de forma segura, para que un fallo a mitad del controlador no pierda el evento.

Localiza la compra

  • Empareja el purchaseToken con la compra que guardaste cuando concediste el derecho de acceso por primera vez. Recurre al orderId para búsquedas de soporte y conciliación manual.
  • Lee productType para elegir la vía de revocación de suscripción o de compra única, y lee refundType para decidir entre una revocación total y una parcial.

Revoca y registra

  • Elimina el derecho de acceso. Para un reembolso total, corta el acceso al artículo. Para un reembolso parcial basado en cantidad, reduce la cantidad concedida en la cantidad reembolsada y deja el resto intacto.
  • Anota qué hiciste y cuándo, indexado por purchaseToken y orderId. Ese registro es lo que te permite responder un ticket de soporte más tarde, y lo que permite que la Voided Purchases API concilie de forma limpia contra tu propio estado.

Dónde encaja entre las demás señales de reembolso

Una notificación de compra anulada es un aviso, no una negociación. Te comunica un resultado que ya está decidido. Merece la pena verla junto a las señales con las que es fácil confundirla, porque solo algunas de ellas piden en algún momento tu versión de la historia.

SeñalDirección¿Acepta tu aportación?
Notificación de compra anulada (RTDN)Google la envía a tu servidorNo. Informa de una anulación que ya ocurrió
Voided Purchases APITu servidor la consulta a GoogleNo. Es una lista de solo lectura de anulaciones pasadas
pendingRefundReviewNotification (RTDN)Google la envía a tu servidorSí, de forma indirecta. Señala un contracargo que luego impugnas a través de orders.reviewrefund en un plazo de 24 horas
Apple CONSUMPTION_REQUESTApple lo pide a tu servidorSí. Respondes con Send Consumption Information dentro de 12 horas

La idea que hay que retener es simple. En ambas tiendas hay exactamente dos flujos de reembolso donde el desarrollador tiene voz, el CONSUMPTION_REQUEST de Apple y la revisión de contracargos de Google Play. Una notificación de compra anulada no es ninguno de los dos. Para cuando te llega, la decisión ya quedó atrás y lo único que queda en tus manos es la rapidez con la que revocas.

Preguntas frecuentes

¿Qué significa una notificación de compra anulada en Google Play?
Significa que una compra se reembolsó, se revirtió por contracargo o se anuló de otro modo, y el cliente tiene su dinero de vuelta. La recomendación de Google es revocar el acceso al contenido asociado, porque el comprador ya no debería conservar el derecho. La notificación nombra la compra exacta mediante su `purchaseToken` y `orderId`.
¿Qué campos contiene una notificación de compra anulada de Google Play?
Cuatro: `purchaseToken`, `orderId`, `productType` y `refundType`. `productType` es `1` para una suscripción y `2` para una compra única. `refundType` es `1` para un reembolso total y `2` para un reembolso parcial basado en cantidad en una compra de varias unidades.
¿Cómo habilito las notificaciones de compra anulada?
En Play Console, abre Monetize y luego Monetization setup, y en la sección Real-time developer notifications marca Enable real-time notifications, luego introduce el nombre de tu tema de Cloud Pub/Sub. Ambas opciones de contenido, suscripciones más todas las compras anuladas, y eso mismo más los eventos de productos únicos, incluyen las compras anuladas.
¿Cuál es la diferencia entre la notificación de compra anulada y la Voided Purchases API?
La notificación es una señal de tipo push entregada en tiempo real a través de Cloud Pub/Sub en el momento en que una compra se anula. La Voided Purchases API es una vía de sondeo que tu servidor consulta según su propia planificación para listar anulaciones en un intervalo de tiempo. Usa la notificación para reaccionar al instante y la API para conciliar y rellenar huecos.
¿La notificación de compra anulada me permite impugnar el reembolso?
No. Es un aviso posterior a los hechos de una decisión que ya está tomada. El único flujo de Google Play que acepta tu aportación es la revisión de contracargos a través de `orders.reviewrefund`, que tienes 24 horas para responder, y en Apple es el CONSUMPTION_REQUEST con una ventana de 12 horas.

Fuentes y lecturas adicionales

RefundHalt

El piloto automático de reembolsos para App Store y Google Play

Seguir leyendo

La próxima solicitud de reembolso ya está en camino.

Configura RefundHalt en el tiempo que tardas en leer otro correo de soporte sobre un reembolso que no llegaste a impugnar.