Receba notificações em tempo real sobre compras, renovações e cancelamentos de assinaturas.
TL;DR
Você configura a URL do Paywallo na App Store Connect / Google Play Console uma única vez. A partir daí, a Apple e o Google enviam notificações diretamente ao Paywallo, que processa e repassa eventos normalizados para o seu endpoint — sem precisar entender o formato proprietário de cada marketplace.
O Paywallo atua como intermediário entre os marketplaces e o seu servidor. O fluxo é:
Você não precisa lidar com o formato de JWS da Apple ou Pub/Sub do Google. O Paywallo faz essa abstração.
Configure webhooks para receber notificações das transações de assinatura do App Store
Faça login em appstoreconnect.apple.com com sua conta de desenvolvedor
Vá para seu app → App Information → App Store Server Notifications
Marque "Version 2 Notifications" como o tipo de notificação que deseja usar
Copie a URL do webhook do painel do Paywallo e cole no campo de URL
Clique em "Save" para confirmar a configuração
Configure webhooks para receber notificações das transações de assinatura do Google Play
Faça login em play.google.com/console com sua conta de desenvolvedor
Vá para Monetization setup → Real-time developer notifications
Copie a URL do webhook do painel do Paywallo e cole no campo de URL
Escolha os tópicos de notificação que deseja receber:
Clique em "Save" para confirmar a configuração
subscription_renewedTodos os eventos do Paywallo seguem o mesmo envelope JSON — só o campo event e os campos de data variam por tipo:
{
"event": "subscription_renewed",
"timestamp": "2024-11-15T14:32:00.000Z",
"data": {
"userId": "usr_9kXmQ2pL4nR8vT1w",
"productId": "com.seuapp.premium.annual",
"transactionId": "2000000123456789",
"originalTransactionId": "2000000098765432",
"expiresAt": "2025-11-15T14:32:00.000Z",
"purchasedAt": "2024-11-15T14:32:00.000Z",
"priceUsd": 49.99,
"currency": "USD",
"store": "apple",
"environment": "production"
}
}Configure um endpoint POST no seu servidor e valide a assinatura HMAC-SHA256 para garantir que a requisição veio do Paywallo. O segredo (PAYWALLO_WEBHOOK_SECRET) está disponível em Configurações → Webhooks no dashboard.
import express from 'express';
import crypto from 'crypto';
const app = express();
app.use(express.json());
app.post('/webhooks/paywallo', (req, res) => {
// 1. Valide a assinatura do Paywallo
const signature = req.headers['x-paywallo-signature'];
const body = JSON.stringify(req.body);
const expected = crypto
.createHmac('sha256', process.env.PAYWALLO_WEBHOOK_SECRET)
.update(body)
.digest('hex');
if (signature !== `sha256=${expected}`) {
return res.status(401).json({ error: 'Assinatura inválida' });
}
// 2. Processe o evento
const { event, data } = req.body;
switch (event) {
case 'subscription_renewed':
// Estender acesso do usuário
await db.users.update(data.userId, {
subscriptionExpiresAt: data.expiresAt,
status: 'active',
});
break;
case 'subscription_cancelled':
// Marcar para expirar ao fim do período pago
await db.users.update(data.userId, { status: 'cancelling' });
break;
case 'subscription_expired':
await db.users.update(data.userId, { status: 'expired' });
break;
}
// 3. Responda com 200 em até 5 segundos
res.status(200).json({ received: true });
});transactionId para detectar duplicatas — o mesmo evento pode ser entregue mais de uma vez em caso de retry.Estes são os eventos que você receberá via webhook quando as ações ocorrem
| Evento | Descrição |
|---|---|
| Compra Inicial | Quando um usuário faz sua primeira compra ou assina um produto |
| Renovação | Assinatura renovada automaticamente no período de faturamento |
| Cancelamento | Usuário cancelou sua assinatura |
| Reembolso | Compra ou renovação foi reembolsada ao usuário |
| Mudança de Preço | O preço da assinatura foi alterado para renovações futuras |
| Problema de Cobrança | Falha no pagamento ou outro problema de cobrança detectado |
Quando o Paywallo recebe um webhook de compra, renovação ou cancelamento, ele automaticamente sincroniza os dados com seu usuário no painel: