Todos os artigos
Deep dive7 min de leitura

Uma notificação de compra anulada permite que seu servidor do Google Play revogue o acesso no instante em que um reembolso é concluído

O Google Play pode enviar ao seu servidor uma notificação de compra anulada no instante em que uma compra é reembolsada, sofre estorno ou é anulada. Ela carrega um purchaseToken, um orderId, um productType e um refundType, e significa uma coisa, revogar o acesso. Veja como lê-la e conectá-la.

Um espaço de trabalho de desenvolvedor ao anoitecer com um telefone mostrando um pagamento revertido, ilustrando uma notificação de compra anulada do Google Play chegando a um servidor

Principais conclusões

  • Uma notificação de compra anulada é uma Real-time Developer Notification que o Google Play envia ao seu tópico do Cloud Pub/Sub no instante em que uma compra é reembolsada, sofre estorno ou é anulada de outra forma. É um sinal de push, não algo que você precise consultar por polling.
  • A notificação carrega exatamente quatro campos: `purchaseToken`, `orderId`, `productType` e `refundType`. Isso basta para localizar a compra exata no seu banco de dados e revogar o direito de acesso associado a ela.
  • `productType` é `1` para uma assinatura anulada e `2` para uma compra única anulada. `refundType` é `1` para um reembolso total e `2` para um reembolso parcial baseado em quantidade, que se aplica apenas a compras únicas de múltiplas quantidades.
  • Uma notificação de compra anulada significa que o cliente já recebeu o dinheiro de volta. A própria orientação do Google é revogar o acesso ao conteúdo associado, porque o comprador não deve mais deter o direito de acesso.
  • As notificações de compra anulada ficam desativadas até você ativá-las. No Play Console, em Monetization setup, você escolhe assinaturas mais todas as compras anuladas, ou isso mais os eventos de produtos únicos. Ambas as opções incluem compras anuladas.
  • Uma notificação de compra anulada não é um dos dois fluxos de reembolso que pedem provas a você. É um aviso posterior ao fato. Os únicos fluxos que aceitam sua contribuição são o CONSUMPTION_REQUEST da Apple, com uma janela de 12 horas, e a revisão de estorno do Google Play por meio de orders.reviewrefund, com uma janela de 24 horas.
  • A partir de August 3, 2026, o Google repassa ao desenvolvedor o preço da compra mais a taxa bancária de um estorno. Uma notificação de compra anulada costuma ser como seu servidor descobre pela primeira vez que um estorno foi concluído, então configurá-la é o que permite parar de atender um cliente por quem você não é mais pago.

Um reembolso no Google Play não precisa ser algo que você descobre depois em um relatório. O Google Play pode enviar ao seu servidor uma notificação de compra anulada no instante em que uma compra é anulada, seja porque o comprador fez um reembolso de autoatendimento, um agente de suporte concedeu um, um banco forçou um estorno ou você mesmo reembolsou o pedido com o sinalizador de revogação ativado. A mensagem é minúscula, ela nomeia a compra exata e carrega uma instrução, devolver o direito de acesso, porque o dinheiro já se foi.

O que é, de fato, uma notificação de compra anulada

Uma notificação de compra anulada é um tipo de Real-time Developer Notifications do Google Play, ou RTDN. A RTDN é um canal de push. O Google publica uma mensagem em um tópico do Cloud Pub/Sub de sua propriedade, e seu backend a recebe momentos após o evento, em vez de descobrir na próxima consulta agendada. Esse é todo o objetivo da notificação de compra anulada em relação ao antigo caminho de pull: você fica sabendo do reembolso conforme ele acontece, não horas depois.

O caminho de pull ainda existe e ainda importa. A Voided Purchases API permite que seu servidor solicite, no seu próprio cronograma, a lista de compras que foram anuladas em um intervalo de tempo. Os dois são complementares. A notificação avisa no instante em que uma compra muda de estado; a API permite reconciliar em massa e recuperar qualquer coisa que uma mensagem perdida teria deixado para trás.

Ela viaja dentro de uma Real-time Developer Notification

A notificação de compra anulada nunca chega sozinha. Ela fica dentro de um invólucro DeveloperNotification, e esse invólucro é entregue como uma única string codificada em base64 no campo data da mensagem do Pub/Sub. Seu handler decodifica essa string para JSON antes de conseguir ler qualquer coisa. O invólucro sempre nomeia o app e o horário do evento, e contém exatamente um objeto de notificação entre os cinco que o Google define. Eles são mutuamente exclusivos, então uma mensagem que carrega um voidedPurchaseNotification não carregará também um evento de assinatura ou de compra única.

Campo do invólucroO que ele contém
versionA versão do schema da notificação, por exemplo 1.0
packageNameO app ao qual o evento pertence, por exemplo com.acme.app
eventTimeMillisQuando o evento ocorreu, em milissegundos desde a epoch
Um de cinco objetos de notificaçãooneTimeProductNotification, subscriptionNotification, voidedPurchaseNotification, pendingRefundReviewNotification ou testNotification. Apenas um está presente por mensagem

Os quatro campos que ela carrega

Remova o invólucro e a própria notificação de compra anulada são quatro campos. Isso é deliberadamente enxuto. A posição do Google é que, se tudo o que você precisa é encontrar a compra certa e ajustar o direito de acesso, esses quatro bastam, e você não precisa retornar a nenhuma API para agir.

CampoO que éComo você usa
purchaseTokenO token entregue ao dispositivo quando o item foi compradoSua chave primária. Faça a correspondência com o registro de compra que você armazenou no momento da concessão
orderIdO id do pedido mostrado ao comprador, por exemplo GS.0000-0000-0000Uma segunda chave legível para humanos, para suporte e reconciliação
productTypeSe o item anulado era uma assinatura ou uma compra únicaDirecione para o caminho de revogação correto
refundTypeSe a anulação foi um reembolso total ou um reembolso parcial baseado em quantidadeDecida se deve revogar tudo ou apenas a quantidade reembolsada

productType informa o que foi anulado

productType é um inteiro pequeno, e ele decide qual dos seus caminhos de revogação tomar. A anulação de uma assinatura precisa desfazer o acesso contínuo; a anulação de uma compra única apenas remove um único direito de acesso.

Valor de `productType`ConstanteSignificado
1PRODUCT_TYPE_SUBSCRIPTIONUma compra de assinatura foi anulada
2PRODUCT_TYPE_ONE_TIMEUma compra única foi anulada

refundType informa quanto foi devolvido

refundType separa uma reversão total e limpa de uma parcial. O caso parcial é restrito. Ele só aparece quando uma compra única de múltiplas quantidades teve parte, mas não toda, da sua quantidade reembolsada.

Valor de `refundType`ConstanteSignificado
1REFUND_TYPE_FULL_REFUNDA compra foi totalmente anulada
2REFUND_TYPE_QUANTITY_BASED_PARTIAL_REFUNDParte de uma compra de múltiplas quantidades foi anulada

Ative-a primeiro, ou ela nunca chega

As notificações de compra anulada não fluem por padrão. Você ativa a RTDN uma vez, no Play Console, e a aponta para um tópico do Pub/Sub que você controla. A opção fica em Monetize, depois Monetization setup, na seção Real-time developer notifications no topo da página. Marque Enable real-time notifications, depois cole o nome completo do seu tópico no formato projects/{project_id}/topics/{topic_name} e use Send Test Message para confirmar que o canal funciona antes de confiar nele.

O seletor de conteúdo é onde as pessoas deixam escapar as compras anuladas. As duas opções as incluem, então você não pode desativar acidentalmente os reembolsos enquanto mantém as assinaturas.

  • Get notifications for subscriptions and all voided purchases. Você recebe os eventos de assinatura e todas as compras anuladas, mas não os eventos de compra de produtos únicos.
  • Get all notifications for subscriptions and one-time products. Você recebe o acima mais os eventos de produtos únicos, como ONE_TIME_PRODUCT_PURCHASED e ONE_TIME_PRODUCT_CANCELED.
Um cartão de crédito virado para baixo ao lado de um recibo de papel, representando uma compra anulada do Google Play

Quanto isso custa a você, em dinheiro

Uma anulação é uma perda que já está contabilizada quando a notificação chega até você. O preço da venda se foi, e também tudo o que você gastou atendendo esse cliente. Se ele gerou imagens, fez chamadas aos seus modelos, consumiu armazenamento ou acionou um pagamento a terceiros, esses custos foram pagos em dinheiro real e não voltam com o reembolso. A notificação não pode recuperar nada disso. O que ela pode fazer é estancar o sangramento daqui para frente, que é toda a razão para agir rápido sobre ela.

O sangramento é pior nas assinaturas e pior nos estornos. Uma assinatura que você não revoga continua custando para ser servida, mês após mês, para um cliente que não paga mais. E um estorno é o tipo mais caro de anulação. A partir de August 3, 2026, a documentação do Google afirma que um estorno repassa ao desenvolvedor o preço da compra mais a taxa do banco. A notificação de compra anulada é frequentemente o primeiro lugar em que seus próprios sistemas ficam sabendo que um estorno foi concluído, então um handler que revoga na hora é o que impede que uma venda perdida se transforme em uma venda perdida mais semanas de serviço gratuito.

Como lidar com uma notificação de compra anulada, passo a passo

Verifique e desduplique a mensagem

  • Confirme que a mensagem do Pub/Sub veio do Google e visa o tópico que você configurou, depois decodifique o campo data em base64 para obter o JSON de DeveloperNotification.
  • Use o messageId do Pub/Sub para descartar duplicatas. O Google avisa que a mesma notificação pode ser entregue mais de uma vez, então trate a reentrega como normal e torne seu handler idempotente.
  • Confirme (acknowledge) a mensagem somente depois de tê-la registrado com segurança, para que uma falha no meio do handler não perca o evento.

Localize a compra

  • Faça a correspondência do purchaseToken com a compra que você armazenou quando concedeu o direito de acesso pela primeira vez. Recorra ao orderId para buscas de suporte e reconciliação manual.
  • Leia productType para escolher o caminho de revogação de assinatura ou de compra única, e leia refundType para decidir entre uma revogação total e uma parcial.

Revogue e registre

  • Remova o direito de acesso. Para um reembolso total, corte o acesso ao item. Para um reembolso parcial baseado em quantidade, reduza a quantidade concedida pelo valor reembolsado e deixe o restante intacto.
  • Registre o que você fez e quando, indexado por purchaseToken e orderId. Esse registro é o que permite responder a um ticket de suporte depois, e o que permite que a Voided Purchases API reconcilie de forma limpa com o seu próprio estado.

Onde ela se encaixa entre os outros sinais de reembolso

Uma notificação de compra anulada é um aviso, não uma negociação. Ela informa um desfecho que já está decidido. Vale a pena vê-la ao lado dos sinais com os quais é fácil confundi-la, porque apenas alguns deles chegam a pedir a sua versão da história.

SinalDireçãoAceita a sua contribuição
Notificação de compra anulada (RTDN)O Google envia ao seu servidorNão. Ela relata uma anulação que já aconteceu
Voided Purchases APISeu servidor consulta o GoogleNão. É uma lista somente leitura de anulações passadas
pendingRefundReviewNotification (RTDN)O Google envia ao seu servidorSim, de forma indireta. Ela sinaliza um estorno que você então contesta por meio de orders.reviewrefund dentro de 24 horas
CONSUMPTION_REQUEST da AppleA Apple consulta o seu servidorSim. Você responde com Send Consumption Information dentro de 12 horas

A ideia a reter é simples. Entre as duas lojas existem exatamente dois fluxos de reembolso em que o desenvolvedor tem voz, o CONSUMPTION_REQUEST da Apple e a revisão de estorno do Google Play. Uma notificação de compra anulada não é nenhum dos dois. Quando ela chega até você, a decisão já ficou para trás e a única coisa que resta em suas mãos é a rapidez com que você revoga.

Perguntas frequentes

O que significa uma notificação de compra anulada no Google Play?
Significa que uma compra foi reembolsada, sofreu estorno ou foi anulada de outra forma, e o cliente recebeu o dinheiro de volta. A orientação do Google é revogar o acesso ao conteúdo associado, porque o comprador não deve mais deter o direito de acesso. A notificação nomeia a compra exata por meio de seu `purchaseToken` e `orderId`.
Quais campos uma notificação de compra anulada do Google Play contém?
Quatro: `purchaseToken`, `orderId`, `productType` e `refundType`. `productType` é `1` para uma assinatura e `2` para uma compra única. `refundType` é `1` para um reembolso total e `2` para um reembolso parcial baseado em quantidade em uma compra de múltiplas quantidades.
Como faço para ativar as notificações de compra anulada?
No Play Console, abra Monetize e depois Monetization setup, e na seção Real-time developer notifications marque Enable real-time notifications, depois insira o nome do seu tópico do Cloud Pub/Sub. As duas opções de conteúdo, assinaturas mais todas as compras anuladas, e isso mais os eventos de produtos únicos, incluem as compras anuladas.
Qual é a diferença entre a notificação de compra anulada e a Voided Purchases API?
A notificação é um sinal de push entregue em tempo real por meio do Cloud Pub/Sub no instante em que uma compra é anulada. A Voided Purchases API é um caminho de pull que seu servidor consulta no seu próprio cronograma para listar anulações em um intervalo de tempo. Use a notificação para reagir instantaneamente e a API para reconciliar e recuperar dados.
Uma notificação de compra anulada permite que eu conteste o reembolso?
Não. É um aviso posterior ao fato sobre uma decisão que já foi tomada. O único fluxo do Google Play que aceita a sua contribuição é a revisão de estorno por meio de `orders.reviewrefund`, que você tem 24 horas para responder, e na Apple é o CONSUMPTION_REQUEST com uma janela de 12 horas.

Fontes e leituras adicionais

RefundHalt

O piloto automático de reembolsos para App Store e Google Play

Continue lendo

A próxima solicitação de reembolso já está a caminho.

Configure a RefundHalt no tempo que você levaria para ler mais um e-mail de suporte sobre um reembolso que não conseguiu contestar.