Hizmet Yenileme Kancaları
Hizmetin süresini uzatan ve paketini değiştiren on bir kanca: yenileme, otomatik yenileme, yükseltme ve düşürme.
Genel Bakış
Yenileme üç ayrı yoldan gelir: müşteri elle başlatır, otomatik yenileme saklı karttan çeker, ya da ödenen bir fatura yenilemeyi tetikler. Üçü de aynı olay kancasında buluşur.
Paket değişikliği ise tek adım değildir. Talep alınır, ödeme durumuna göre bir akış seçilir (fatura kesildi, dönem sonuna planlandı ya da doğrudan kuyruğa alındı) ve değişiklik ancak sonunda uygulanır.
Referans
Elle yenilemeyi durdurma
Müşteri elle yenileme başlattığında, yenileme motoru hiç çağrılmadan önce çalışır.
source (burada manual), ek hizmet keşfi, metrik işleme ve bildirim seçenekleri. Bu kapı yalnız elle başlatılan yolu görür; otomatik yenileme ve fatura yolu buradan geçmez.Hook::add('gate:service.manual_renew', 10, function ($service, $renew_opts) {
// Askidaki hizmeti yenilemek parayi bosa harcar; once acilmali.
if (($service['status'] ?? '') === 'suspended')
return 'Askidaki hizmet once aktif edilmelidir.';
return null;
});Yenilemenin işlendiğini öğrenme
Vade uzatıldıktan sonra çalışır. Üç yenileme yolu da buraya gelir.
Hook::add('action:service.renewed', 10,
function ($serviceId, $service, $newDuedate, $oldDuedate) {
// Vade GERCEKTEN ilerledi mi? Ayni tarih yazilmis olabilir.
if ($newDuedate === $oldDuedate) return;
Crm::renewed($serviceId, $oldDuedate, $newDuedate);
});Otomatik yenileme anahtarını durdurma
Müşteri otomatik yenilemeyi açıp kapatırken çalışır; değer henüz yazılmamıştır.
Hook::add('gate:service.autorenew_toggle', 10, function ($service, $enable, $uid) {
// Kapatmak, hizmetin sessizce sona ermesine yol acar: kart borclu ise engelle.
if (!$enable && Acme::hasDebt($uid))
return 'Odenmemis bakiye varken otomatik yenileme kapatilamaz.';
return null;
});Otomatik yenileme değişimini izleme
Değer yazıldıktan sonra çalışır.
Hook::add('action:service.autorenew_changed', 10, function ($service, $enable) {
// Yeni durum IKINCI parametredir; kayittaki alan hala eskidir.
if (!$enable) Retention::flag((int) ($service['id'] ?? 0), 'autorenew-off');
});Paket değişikliğini durdurma
Paket değişikliği başlamadan önce çalışır. Yükseltme ve düşürmenin ikisi de buradan geçer.
true yükseltme, false düşürme. Yönü buradan okuyun; ürün kimliklerini karşılaştırarak çıkarmayın.Hook::add('gate:service.upgrade', 10,
function ($service, $old_pid, $product_id, $price_data, $isUp) {
// Dusurme veri kaybina yol acabilir: kotayi asan hesabi durdurun.
if (!$isUp && Acme::usageAbovePlan($service, $product_id))
return 'Mevcut kullaniminiz hedef pakete sigmiyor.';
return null;
});Paket değişikliği talebini izleme
Talep alındıktan sonra çalışır. Değişikliğin ne zaman uygulanacağını akış değeri söyler.
invoice_unpaid (fatura kesildi, ödenmedi), scheduled (dönem sonuna planlandı), queued (bedelsiz, doğrudan kuyruğa). Üçünde de değişiklik henüz uygulanmadı.0.Hook::add('action:service.plan_change_requested', 10,
function ($service, $old_pid, $new_pid, $flow, $updown_id, $invoice_id) {
// Degisiklik HENUZ uygulanmadi; ne zaman uygulanacagini flow soyler.
if ($flow === 'invoice_unpaid') Crm::awaitPayment($invoice_id, $updown_id);
});Paket değişikliğinin uygulandığını öğrenme
Paket değişikliği gerçekten uygulandıktan sonra çalışır.
service_id, old_service, new_product, type (upgrade ya da downgrade), needs_recreate, params. needs_recreate doğruysa hizmet sunucuda yeniden kurulacak demektir.Hook::add('action:service.updowngrade.applied', 10, function ($payload) {
// Yeniden kurulacaksa hizmet bir sure kesintiye ugrar: musteriyi uyarin.
if (!empty($payload['needs_recreate']))
Notify::planRebuild((int) ($payload['service_id'] ?? 0));
});Sunulan paketleri değiştirme
Müşteriye gösterilecek yükseltme seçenekleri hazırlandıktan sonra çalışır.
Hook::add('filter:service.upgrade_products', 10, function (&$products) {
// Kapida reddedecegin paketi listede hic gosterme.
$products = array_values(array_filter($products,
fn ($p) => Acme::sellable((int) ($p['id'] ?? 0))));
});Eklenti yenilemesini izleme
Bir eklentinin vadesi uzadıktan sonra çalışır. Ödeme alınmış, yeni vade yazılmıştır.
Hook::add('action:service.addon.renewed', 10,
function ($addonId, $addon, $service, $newDuedate, $oldDuedate) {
// Dis lisanstaki hak suresini yeni vadeye cekin.
Acme::extendEntitlement($addonId, $newDuedate);
});Tekrar sayısının dolmasını izleme
Bir ürünün tanımlı tekrar sayısı dolup son yenileme faturası üretildiğinde çalışır. Bundan sonrası için otomatik yenileme yoktur.
Hook::add('action:service.recurring_completed', 10,
function ($service_id, $service, $count, $limit) {
// Son donguyu yakalayin: musteriye devam teklifi gonderin.
Acme::offerContinuation((int) ($service['owner_id'] ?? 0), $service_id);
});Otomatik ödeme kaynağı var mı sorusunu değiştirme
“Yenileme görevi bu hesaptan müşteri olmadan tahsilat yapabilir mi?” sorusunun cevabı verilmeden önce çalışır. Çekirdeğin bilmediği bir kaynağı burada beyan edersiniz.
owner_id, kaynağı sorulan hesap.Hook::add('filter:service.auto_pay_source_available', 10,
function (&$available, $ctx) {
if ($available) return; // cekirdek zaten bir kaynak buldu
// Kendi sakladiginiz yetkilendirmeyi beyan edin.
$available = Acme::hasMandate((int) ($ctx['owner_id'] ?? 0));
});Tuzaklar
İkinci parametredeki hizmet, uzatma öncesi anlık görüntüdür: vade, dönem ve tutar hâlâ eskidir. Yeni vade üçüncü parametrededir. Kayıttan okuyup "yenilenmemiş" sonucuna varmak buradan çıkar. Ayrıca tarih asla geriye gitmez, yani eski ve yeni aynı olabilir.
Talep kancasında değişiklik henüz uygulanmamıştır. Akış değeri üç şey söyleyebilir: fatura kesildi ve ödenmedi, dönem sonuna planlandı, ya da doğrudan kuyruğa alındı. Yeni pakete göre iş yapmak için uygulandı kancasını bekleyin.
Otomatik yenileme hem kapıda hem olayda size değişiklik öncesi hizmet kaydı verir. Yeni durum her ikisinde de ayrı bir parametredir. Kayıttaki alanı okuyan bir dinleyici, açma işlemini kapatma sanır.
Yükseltme kapısı seçeneği müşteri seçtikten sonra reddeder. Aynı kuralı liste filtresine de yazarsanız seçenek hiç görünmez ve müşteri boşuna denemez. Kapıyı güvenlik için tutun, filtreyi nezaket için kullanın.
İlgili Makaleler
- Hizmet Durum Kancaları
- Fatura ve Ödeme Kancaları
- Hizmet Yaşam Döngüsü Kancaları
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.