Stripe ile Abonelik Nasıl Eklenir: Planlar, Denemeler, Webhook'lar ve Başarısız Ödemeler
Stripe ile abonelik eklemek için Stripe Panosu'nda yinelenen fiyatlı bir ürün oluşturun, sunucunuzdan müşterileri abonelik modunda Stripe Checkout'a gönderin ve bir webhook ile her ödemenin başarılı olduğunda, başarısız olduğunda, değiştiğinde ya da sona erdiğinde uygulamanıza haber verilmesini sağlayın. Abonelik durumunu kullanıcıyla ilişkilendirerek saklayın ve erişimi başarı sayfasından değil, bu durumdan verin. Kişilerin kartlarını değiştirebilmesi, plan değiştirebilmesi ve iptal edebilmesi için bir Faturalandırmayı yönet düğmesi ekleyin; bu düğme Stripe'ın barındırılan müşteri portalını açar, böylece bu ekranları kendiniz geliştirmezsiniz.
Bu rehber, uygulamanıza ödeme nasıl eklenir rehberine dayanır; o rehber tek seferlik Checkout, test modu ve canlıya geçişi kapsar. Burada yinelenen faturalandırmayı farklı kılan şeylere odaklanıyoruz. Stripe ayrıntıları, Eylül 2026 itibarıyla Stripe'ın belgelerinden alınmıştır.
Abonelikler neden tek seferlik ödemelerden daha zordur
Tek seferlik bir ödeme, müşteri uygulamanızdayken gerçekleşir. Bir abonelik ise siz ayrıldıktan sonra da devam eder: her ay yenilemeler, süresi dolan kartlar, dönem ortasında yükseltmeler, dönem sonunda geçerli olacak iptaller. Uygulamanız bunları yalnızca webhook'lar aracılığıyla öğrenir. Çoğu abonelik hatası, ilk ödemeyi bütün hikâye sanmaktan kaynaklanır.
Seçenekleriniz
| Yaklaşım | Ne geliştirirsiniz | En uygun olduğu durum |
|---|---|---|
| Yinelenen fiyatlı Payment Link | Yalnızca bir bağlantı | Talebi test etmek; erişimi elle yönetmek |
| Checkout (abonelik modu) + müşteri portalı | Bir sunucu rotası, bir webhook, bir faturalandırma düğmesi | Çoğu SaaS uygulaması ve üyelikler |
| Abonelikler API'si ve kendi ödeme formunuz | Çok daha fazlası: ödeme arayüzü, kimlik doğrulama, yeniden denemeler | Alışılmadık faturalandırma akışları olan uygulamalar |
| Merchant-of-record sağlayıcı | Checkout'a benzer | Satış vergisini sağlayıcının yönetmesini isteyen satıcılar |
Çoğu uygulama için Checkout artı portal doğru ödünleşimdir. Vergi işlemleri sizi endişelendiriyorsa sağlayıcıları Stripe vs Paddle vs Lemon Squeezy ile karşılaştırın.
Fiyatlandırmanızı önce Stripe'da planlayın
Stripe'da bir ürün, sattığınız şeydir ("Pro plan"); bir fiyat ise bunun nasıl ücretlendirileceğidir ("ayda 20
quot;, "yılda 200 quot;). Bir ürünün birden fazla fiyatı olabilir. Karar verin:- Hangi kademeleri sunduğunuzu ve her birinin uygulamanızda neyin kilidini açtığını
- Aylık, yıllık veya ikisi birden
- Bir deneme sunup sunmayacağınızı ve bunun peşin kart gerektirip gerektirmediğini
Ürünleri ve fiyatları test modunda oluşturun ve fiyat kimliklerini saklayın; uygulamanız bunlara başvurur. Fiyatlandırmaya henüz karar vermediyseniz SaaS ürünü nasıl fiyatlandırılır ve freemium ile ücretsiz deneme rehberlerini okuyun.
Yönetmeniz gereken abonelik yaşam döngüsü
Stripe'ın abonelik genel bakışı, bir aboneliğin sahip olabileceği durumları listeler. Erişim açısından en önemli olanlar:
| Durum | Anlamı | Erişim verilir mi? |
|---|---|---|
trialing | Deneme döneminde | Evet |
active | İyi durumda | Evet |
incomplete | İlk ödeme henüz tamamlanmadı; Stripe müşteriye 23 saat tanır | Hayır |
incomplete_expired | İlk ödeme hiç başarılı olmadı | Hayır |
past_due | Son ödeme başarısız oldu ya da denenmedi; yeniden denemeler gelebilir | Sizin seçiminiz; birçok uygulama kısa bir ek süre tanır |
unpaid | Denemeler bitti, faturalar açık kaldı, başka deneme yok | Hayır; Stripe'ın belgeleri erişimin iptal edilmesini söyler |
canceled | Sona erdi; yeniden başlatılamaz | Hayır |
paused | Deneme, ödeme yöntemi olmadan sona erdi ve duraklatılacak şekilde ayarlandı | Hayır |
Durumu kullanıcı veya hesap kaydınızda saklayın ve erişimi buna dayandırın. İlgili her webhook geldiğinde güncelleyin.
İşlenmesi gereken webhook olayları
| Olay | Uygulamanız ne yapar |
|---|---|
checkout.session.completed | Yeni Stripe müşteri ve abonelik kimliklerini kullanıcınıza bağlar |
invoice.paid | Aboneliği aktif olarak işaretler ve yeni dönem sonunu kaydeder |
invoice.payment_failed | Kullanıcıya kartının başarısız olduğunu söyler ve portala bağlantı verir |
invoice.payment_action_required | Kullanıcıdan kart doğrulamasını tamamlamasını ister |
customer.subscription.updated | Planı, durumu ve planlanmış iptali günceller |
customer.subscription.deleted | Ücretli erişimi kaldırır |
customer.subscription.trial_will_end | Deneme bitmeden kullanıcıyı hatırlatır; Stripe bunu üç gün önce gönderir |
Stripe'ın webhook belgelerindeki işleyici kuralları hâlâ geçerlidir: ham gövdeyle imzayı doğrulayın, hızlıca 2xx dönün, yinelenen ve sırasız olayları yönetin ve yeniden denemeleri bekleyin. Webhook nedir rehberi fikri açıklar; ödemeler rehberi kuralları ayrıntılı listeler.
Adım adım
- Stripe test modunda ürünleri ve fiyatları oluşturun.
- Sırları ekleyin: gizli anahtar, fiyat kimlikleri ve daha sonra webhook imzalama sırrı. Bunları asla ön yüz kodunda tutmayın.
- Fiyatlandırma sayfası: her planın düğmesi sunucunuzu çağırır; sunucu, oturum açmış kullanıcı için abonelik modunda bir Checkout Session oluşturur. Ödemeyi hesapla eşleştirebilmesi için kullanıcı kimliğinizi ekleyin.
- Webhook uç noktası: imzaları doğrulayın ve yukarıdaki olayları işleyin; kullanıcı başına tek bir abonelik kaydını güncelleyin.
- Özellikleri saklanan duruma ve plana göre kapatın; yalnızca gizli düğmelere değil, korunan her eylemde sunucuda kontrol edin.
- Müşteri portalı: Stripe Panosu'nda yapılandırın (kişilerin hangi planlara geçebileceği, iptal edip edemeyecekleri), ardından sunucuda bir portal oturumu oluşturup oraya yönlendiren bir Faturalandırmayı yönet düğmesi ekleyin.
- Başarısız ödemeler: Stripe'ın faturalandırma ayarlarında yeniden deneme davranışını ve son denemeden sonra ne olacağını seçin.
past_duedurumundayken uygulama içinde bir uyarı şeridi gösterin. - Tüm yaşam döngüsünü test edin, ardından yayınlayın ve canlı webhook'u kaydedin.
Yapay zekâ oluşturucunuza verilecek istemler
Stripe ile abonelik faturalandırması ekle. Planlar: Starter (fiyat kimliği STRIPE_PRICE_STARTER içinde) ve Pro (STRIPE_PRICE_PRO). Fiyatlandırma sayfası, sunucuda STRIPE_SECRET_KEY kullanarak abonelik modunda bir Checkout Session oluşturur ve oturum açmış kullanıcının kimliğini ekler. Stripe müşteri kimliğini, abonelik kimliğini, planı ve durumu kullanıcıya kaydet. Gizli anahtarı asla tarayıcıya açma.
POST /api/stripe/webhook ekle. İmzayı STRIPE_WEBHOOK_SECRET ile ham istek gövdesini kullanarak doğrula. checkout.session.completed, invoice.paid, invoice.payment_failed, customer.subscription.updated, customer.subscription.deleted ve customer.subscription.trial_will_end olaylarını işle. İşlenen olay kimliklerini kaydet, böylece yinelemeler yok sayılır. Kullanıcının durumunu, olayların geldiği sıradan değil, abonelik nesnesinden güncelle.
Pro özelliklerini sunucuda kapat: yalnızca durum active veya trialing ise ve plan Pro ise izin ver. Durum past_due olduğunda "Ödeme başarısız, kartınızı güncelleyin" uyarısı göster. Bu kullanıcı için Stripe müşteri portalını açan bir Faturalandırmayı yönet düğmesi ekle.
Yükseltmeler, düşürmeler ve orantılandırma
Müşteri plan değiştirdiğinde Stripe'ın belgeleri, değişikliğin genellikle bir orantılandırma (proration) oluşturduğunu söyler: yeni fiyat, mevcut faturalandırma döneminin kalan kısmına uygulanır. Orantılandırmaları önizleyebilir veya kapatabilirsiniz. Planlar aynı aralıktaysa faturalandırma tarihleri aynı kalır; aylıktan yıllığa geçmek ise faturalandırma tarihini geçişin olduğu güne taşır. Müşterilerin planlarını portalda değiştirmesine izin vermek bu mantığı yazma zahmetini ortadan kaldırır, ama portal ayarlarında hangi geçişlere izin verileceğine karar verin.
Test kontrol listesi
Stripe test modunu ve test kartlarını kullanın ve her durumu gözden geçirin:
- Yeni abonelik, doğru kullanıcıya doğru planı verir
- Ödemeden hemen sonra sekmeyi kapatmak yine de erişim sağlar (webhook'un çalıştığını kanıtlar)
- Kayıt sırasında reddedilen bir kart hiçbir şey vermez
- Başarısız bir yenileme hesabı past_due durumuna sokar ve uyarıyı gösterir
- Portalda kartı güncellemek active durumunu geri getirir
- Yükseltme ve düşürme, özellikleri doğru değiştirir
- Dönem sonunda iptal, erişimi bitiş tarihine kadar korur, ardından kaldırır
- Deneme kullanıcıları erişim alır, hatırlatmayı alır ve doğru şekilde dönüşür ya da erişimini kaybeder
- Aynı webhook olayını iki kez göndermek hiçbir şeyi değiştirmez
Stripe'ın test saatleri (test clocks), bir ay beklemeden yenilemeleri simüle etmenizi sağlar. Bunları nasıl kullanacağınızı Stripe'ın güncel test belgelerinde kontrol edin.
Sık yapılan hatalar
- Erişimi başarı sayfasında vermek. Müşteriler ödeyip bu sayfaya hiç ulaşmamış olabilir. Webhook kullanın.
- Yalnızca ilk ödemeyi işlemek. Yenilemeler, başarısızlıklar ve iptaller sonradan olaylar olarak gelir.
- Plan durumunu yalnızca ön yüzde kontrol etmek. Herkes API'nizi doğrudan çağırabilir.
- Yanlışlıkla bir kullanıcıya birden çok abonelik. Yeni bir Checkout Session oluşturmadan önce mevcut bir aboneliğin olup olmadığını kontrol edin veya mevcut müşterileri portale yönlendirin.
- İlk başarısız yenilemede erişimi iptal etmek. Kartlar sıkıcı nedenlerle başarısız olur. Kısa bir ek süre ve net bir uyarı müşterileri tutar.
- Canlı webhook'u unutmak. Test ve canlı uç noktaların imzalama sırları farklıdır.
- Vergi ve iadeleri görmezden gelmek. Yayından önce iade politikanıza karar verin ve vergi yükümlülüklerinizi bir muhasebeciyle kontrol edin.
Mythex'te abonelikler
Mythex'te oluşturduğunuz uygulamalar kendi Stripe hesabınızı ve anahtarlarınızı kullanır; uygulamanız için tek tıkla Stripe bağlantısı yoktur. Test anahtarlarınızı ve fiyat kimliklerinizi proje sırları olarak ekleyin, yukarıdakine benzer istemleri kullanın ve Önizleme'de Stripe'ın test kartlarıyla test edin. Webhook'lar uygulamanızın herkese açık URL'sini gerektirir; bu nedenle Stripe'da uç noktayı kaydetmeden önce yayınlayın ve canlı anahtarlara geçtikten sonra canlı uygulamanın bunları alması için tekrar yayınlayın. Bkz. Stripe ile ödeme kabul etme ve arka uçunuzda webhook'ları işleme. Uygulamanın geri kalanı için SaaS MVP nasıl kurulur rehberi, faturalandırma etrafında neyi inşa etmeniz gerektiğini kapsar.
Sorular
Stripe ile abonelik eklemenin en basit yolu nedir?
Stripe Panosu'nda yinelenen fiyatlı bir ürün oluşturun, müşterileri abonelik modunda Stripe Checkout'a yönlendirin, abonelik olaylarını bir webhook ile işleyin ve bir Faturalandırmayı yönet düğmesini Stripe'ın barındırılan müşteri portalına bağlayın. Bu, kart formlarını ve plan değiştirme ekranlarını kendiniz yapmanızı önler.
Abonelikler için hangi Stripe webhook olaylarına ihtiyacım var?
En az şunlar: yeni aboneliği kullanıcınıza bağlamak için checkout.session.completed, her başarılı ödemeyi onaylamak için invoice.paid, başarısız yenilemeler hakkında uyarmak için invoice.payment_failed, plan değişikliklerini ve iptalleri izlemek için customer.subscription.updated ve customer.subscription.deleted.
Bir abonelik ödemesi başarısız olduğunda ne olur?
Stripe'ın Eylül 2026 itibarıyla belgelerine göre abonelik genellikle past_due durumuna geçer ve Stripe, ayarlarınıza göre ödemeyi yeniden deneyebilir. Son denemeden sonra Panonuzdaki ayarlar, aboneliğin iptal edilip edilmeyeceğini, unpaid olarak işaretlenip işaretlenmeyeceğini veya past_due olarak kalıp kalmayacağını belirler.
Kart istemeden ücretsiz deneme sunabilir miyim?
Evet. Stripe ücretsiz denemeleri destekler ve belgeleri, yapılandırıldığında ödeme yöntemi olmadan biten denemeler için bir duraklatılmış (paused) durumunu tanımlar. Peşin kart toplamak genellikle daha az kayıt ama daha fazla ödeyen müşteri anlamına gelir; ürününüze hangisinin uyduğunu test edin.