RevenueCat and Stripe Webhook Flow
Provider webhook yapılandırması, imza doğrulama, idempotency ve kredi yükleme akışı
RevenueCat and Stripe Webhook Flow
RevenueCat ve Stripe webhook endpoint'leri client uygulamaları tarafından doğrudan çağrılmaz. Bu sayfa provider dashboard yapılandırması, backend'in beklediği doğrulama header'ları ve başarılı event işleme davranışını özetler.
Endpoint'ler
| Provider | Endpoint | Doğrulama |
|---|---|---|
| RevenueCat | POST /api/v1/revenuecat/webhook | Authorization: Bearer <REVENUECAT_WEBHOOK_SECRET> |
| Stripe | POST /api/v1/stripe/webhook | Stripe-Signature header ve raw body |
Provider dashboard'larında ortam bazlı URL kullanılmalıdır:
Development: https://dev-api.allminelive.com/api/v1/revenuecat/webhook
Staging: https://staging-api.allminelive.com/api/v1/revenuecat/webhook
Production: https://api.allminelive.com/api/v1/revenuecat/webhookStripe için aynı ortamların /api/v1/stripe/webhook path'i kullanılır.
RevenueCat akışı
RevenueCat request'i şu header ile gelmelidir:
Authorization: Bearer <REVENUECAT_WEBHOOK_SECRET>Payload root'unda event alanı zorunludur. Credit package satın alımlarında ana event NON_RENEWING_PURCHASE veya doğrulanmış ürün için INITIAL_PURCHASE olabilir.
{
"api_version": "1.0",
"event": {
"type": "NON_RENEWING_PURCHASE",
"id": "event-id",
"app_user_id": "65f000000000000000000001",
"product_id": "credit_package_100",
"transaction_id": "transaction-id",
"store": "APP_STORE",
"purchased_at_ms": 1716285600000,
"event_timestamp_ms": 1716285600100
}
}Backend event.id üzerinden idempotency kaydı tutar. Aynı event tekrar gelirse duplicate işlem yapılmadan başarılı response dönebilir.
Stripe akışı
Stripe webhook signature doğrulaması için raw body gereklidir. Backend /api/stripe/webhook ve /api/v1/stripe/webhook path'lerinde raw body middleware çalıştırır.
Stripe dashboard'da en az şu event'ler gönderilmelidir:
checkout.session.completedpayment_intent.succeeded
Kredi ekleme için checkout session tarafında:
client_reference_id: Allmine user idmetadata.credit: eklenecek kredi miktarı
Payment intent tarafında:
metadata.userIdveyametadata.user_id: Allmine user idmetadata.credit: eklenecek kredi miktarı
Backend event id üzerinden idempotency lock alır, kullanıcıyı bulur, kredi bakiyesini artırır, credit transaction kaydı oluşturur ve balance socket event'i yayınlamaya çalışır.
Response ve retry
Başarılı işlemde provider'a HTTP 200 döner.
{
"isSuccess": true,
"statusCode": 200,
"data": {
"received": true
},
"errors": [],
"timestamp": "2026-05-21T10:00:00.000Z"
}Provider retry davranışı HTTP status code'a bağlıdır. Geçersiz secret/signature 401, invalid payload 400, beklenmeyen işlem hataları 500 sınıfı cevap üretebilir.
Operasyon notları
- RevenueCat secret ve Stripe webhook secret ortam bazlı farklı olmalıdır.
- Stripe signature doğrulaması için proxy veya gateway raw body'yi değiştirmemelidir.
- Webhook event'leri idempotent kabul edilmelidir; provider aynı event'i tekrar gönderebilir.
- Client ödeme tamamlandı ekranında sadece provider dönüşüne güvenmemelidir. Kredi bakiyesi backend balance endpoint'i veya balance socket event'i ile yenilenmelidir.
- Webhook başarısızsa provider dashboard retry/log ekranı ve backend logs birlikte kontrol edilmelidir.