# Alan Adı Edinme Kancaları

https://dev.wisecp.com/tr/alan-adi-edinme-kancalari

Alan adı sağlayıcısına giden yolun on kancası: kayıt, transfer ve yenileme çağrılarının önündeki kapılar ile ardındaki olaylar.

## Genel Bakış

Alan adı edinmek **ücretli ve geri alınamaz** bir çağrıdır. Sağlayıcı kaydı açtıktan sonra "vazgeçtim" diye bir dönüş yoktur, o yüzden bu yolun her adımında önce bir kapı, sonra bir olay durur.

Kapılar çağrıdan **önce** çalışır ve durdurabilir. Olaylar çağrıdan **sonra** çalışır, başarı ve başarısızlık için ayrı ayrı. Aşağıda onunun da tam sözleşmesi var: hangi değerler gelir, hangi sırayla, ne döndürmeniz gerekir.

## Referans

### Kayıt ya da transfer isteğini durdurma

gatedomain.create

`RegistrarModule::create()` ücretli çağrı öncesi

Sağlayıcıya kayıt ya da transfer isteği gitmeden hemen önce çalışır; yöntemin var olduğu doğrulanmış, argümanlar henüz kurulmamıştır.

Parametreler 3

$servicearrayProvizyon edilen hizmet kaydı. Sahip, ürün ve dönem bilgisi buradadır.

$optionsarraySağlayıcıya gidecek parametreler: `sld`, `tld`, `year`, `dns`, `whois`, `tcode`.

$methodstringÇalışacak yöntem: `register` ya da `transfer`. Transfer kodu varsa transferdir.

Dönüş 1

stringBoş olmayan bir string işlemi **durdurur**; metin hata olarak fırlatılır ve sağlayıcı hiç çağrılmaz. `null` ya da boş string akışı sürdürür.

Dinleyici PHP

```php
Hook::add('gate:domain.create', 10, function ($service, $options, $method) {
    if ($method === 'transfer') return null;              // transferi serbest birak

    $years = (int) ($options['year'] ?? 1);
    if ($years > 5) return 'Bir seferde en fazla 5 yil kayit yapilir.';

    return null;
});
```

### Kayıt ya da transfer sonucunu alma

actiondomain.created

`RegistrarModule::create():184` her çağrıda bir kez

Sağlayıcı çağrısı döndükten hemen sonra çalışır. **Başarı garantisi değildir**: sonuç değeri başarısızlığı da taşıyabilir. Kayıt kuruluşu siparişi kuyruğa alıyorsa kabulde çalışır; ad kaydı sonra gelir.

Parametreler 3

$servicearrayProvizyon edilen hizmet kaydı.

$resultarray|boolSağlayıcının dönüşü: yapılandırma ve durum dizisi, ya da başarısızlıkta `false`. İlk bakacağınız değer budur.

$methodstringÇalıştırılan yöntem: `register` ya da `transfer`.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:domain.created', 10, function ($service, $result, $method) {
    if ($result === false) return;                        // basarisizlik ayri kancada

    if ($method === 'register') Dns::applyTemplate($service['name'] ?? '');
});
```

### Kayıt başarısızlığını yakalama

actiondomain.register_failed

`RegistrarModule::create()` `Services::check_registration_status():1618` yalnız başarısızlıkta

Sağlayıcı çağrısı başarısız döndüğünde çalışır; bir önceki kancadan hemen sonradır. Kayıt kuruluşu kuyruğa alınan bir kaydı reddettiğinde de çalışır; o zaman `$method` `register`, `$error` ret sebebini taşır.

Parametreler 4

$servicearrayProvizyon edilmeye çalışılan hizmet kaydı.

$optionsarraySağlayıcıya gönderilen parametreler.

$methodstringÇalıştırılan yöntem.

$errorstringModülün bildirdiği hata mesajı. Boş olabilir.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:domain.register_failed', 10,
    function ($service, $options, $method, $error) {
        Ops::alert('domain-provision', [
            'name'   => $service['name'] ?? '',
            'method' => $method,
            'error'  => $error ?: 'saglayici gerekce bildirmedi',
        ]);
    });
```

### Kuyruğa alınan kaydı izleme

actiondomain.registration.completed

`Services::check_registration_status():1656` hizmet artık yayında

Kayıt kuruluşunun kuyruğa aldığı bir kaydı sağlayıcı onayladıktan, hizmet etkinleştikten ve müşteriye bildirim gittikten sonra çalışır. Aynı çağrıda tamamlanan kayıt onu hiç çalıştırmaz.

Parametreler 1

$servicearrayHizmetin **taze** kaydı; vade tarihi kayıt kuruluşunun bitiş tarihinden gelir. Beklerken iptal ettiğiniz ya da askıya aldığınız hizmet etkinleşmez; durumunu okuyun.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:domain.registration.completed', 10, function ($service) {
    if (($service['status'] ?? '') === 'active')
        ExternalDns::provision($service['name'] ?? '');
});
```

### Yenileme isteğini durdurma

gatedomain.renew

`RegistrarModule::renew():144` ücretli çağrı öncesi

Yenileme isteği sağlayıcıya gitmeden önce çalışır.

Parametreler 2

$servicearrayYenilenen hizmet kaydı. Bitiş tarihi ve dönem bilgisi içindedir.

$optionsarrayYenileme parametreleri: `sld`, `tld`, `year`.

Dönüş 1

stringBoş olmayan string yenilemeyi durdurur. Bu kanca gece çalışan görevlerden de geçer — durdurduğunuzda alan adı yenilenmemiş kalır.

Dinleyici PHP

```php
Hook::add('gate:domain.renew', 10, function ($service, $options) {
    // Musteri iptal istemisse yenileme parayi bosa harcar.
    if (Acme::cancelRequested((int) ($service['id'] ?? 0)))
        return 'Iptal talebi acik oldugu icin yenileme durduruldu.';

    return null;
});
```

### Yenilemenin tamamlandığını öğrenme

actiondomain.renewed

`Invoices::handle_renewal_domain_paid():1040` ödeme yolundan

Ödenmiş yenileme kalemi işlenip bitiş tarihi uzatıldıktan ve sağlayıcı güncellendikten sonra çalışır.

Parametreler 1

$servicearrayYenilenmiş hizmet kaydı. Bitiş tarihi **güncel** değerdir.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:domain.renewed', 10, function ($service) {
    ExternalDns::syncExpiry($service['name'] ?? '', $service['duedate'] ?? '');
});
```

### Yenileme başarısızlığını yakalama

actiondomain.renew_failed

`RegistrarModule::renew()` süre dolma riski

Sağlayıcının yenileme çağrısı başarısız döndüğünde çalışır.

Parametreler 3

$servicearrayYenilenmeye çalışılan hizmet kaydı.

$optionsarrayYenileme parametreleri.

$errorstringModülün bildirdiği hata mesajı; boş olabilir.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:domain.renew_failed', 10, function ($service, $options, $error) {
    // Musteri odedi ama alan adi yenilenmedi: bu bir insan isi.
    Ops::page('domain-renew-failed', $service['name'] ?? '', $error);
});
```

### Transferin tamamlanmasını izleme

actiondomain.transfer.completed

`Services::check_transfer_status():1537` hizmet artık etkin

Sağlayıcı transferi tamamlanmış bildirdikten, hizmet etkinleştirildikten ve bildirim gönderildikten sonra çalışır.

Parametreler 1

$servicearrayEtkinleştirme sonrası **taze okunmuş** hizmet kaydı; bitiş ve başlangıç tarihleri günceldir.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:domain.transfer.completed', 10, function ($service) {
    ExternalDns::provision($service['name'] ?? '');
});
```

### Transfer kontrolünün düşmesini yakalama

actiondomain.transfer.failed

`Services::check_transfer_status():1510` kontrol tekrarlanır

Sağlayıcının transfer durumu sorgusu başarısız döndüğünde, hata fırlatılmadan hemen önce çalışır.

Parametreler 1

$servicearrayTransfer kontrolü düşen alan adı hizmeti.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:domain.transfer.failed', 10, function ($service) {
    // Kontrol duzenli tekrarlanir: her dususte degil, ustuste dususte uyarin.
    if (Acme::failStreak((int) ($service['id'] ?? 0)) >= 3)
        Ops::alert('domain-transfer-stuck', $service['name'] ?? '');
});
```

### Transfer kodunun kaydını izleme

actiondomain.transfer_authcode_saved

`ClientDomains` gizli değer

Müşteri gelen transfer için yetki kodunu kaydettikten sonra çalışır. Transfer sürecini yürüten dış sisteme haber vermenin yeri burasıdır.

Parametreler 2

$servicearrayAlan adı kaydı.

$codestringKaydedilen yetki kodu, **açık metin**. Bu kodu ele geçiren alan adını başka yere taşıyabilir: kendi kaydınıza yazmayın, günlüğe düşürmeyin.

Dönüş 1

voidDönüş yoksayılır. Kod çoktan kaydedilmiştir.

Dinleyici PHP

```php
Hook::add('action:domain.transfer_authcode_saved', 10, function ($service, $code) {
    // Kodun kendisini DEGIL, yalnizca girildigi bilgisini tasiyin.
    Acme::transferReady((int) ($service['id'] ?? 0), $service['name'] ?? '');
});
```

## Tuzaklar

> **Sonuç kancası başarıyı garanti etmez**
> 
> Kayıt kancası sağlayıcı çağrısı **döndüğünde** çalışır, başarılı olduğunda değil. İkinci parametre `false` ise iş **tutmamıştır**. Kontrol etmeden DNS kurmak ya da müşteriye "alan adınız hazır" demek, var olmayan bir kaydı gerçek saymak demektir.

> **Yenileme kapısı gece çalışan görevden de geçer**
> 
> Yenileme yalnız operatörün elinden çalışmaz: ödeme sonrası akış ve zamanlanmış görevler aynı kapıdan geçer. Orada koyduğunuz bir koşul, kimse farkında olmadan alan adının **yenilenmemesine** yol açabilir. Kapıyı durdurduğunuzda bunu bir yere yazın; sessiz veto en pahalı olanıdır.

> **Transfer kontrolü tekrarlanır**
> 
> Transfer durumu düzenli aralıklarla sorulur ve her düşen sorgu başarısızlık kancasını **yeniden** çalıştırır. Her çağrıda uyarı gönderen bir dinleyici, bekleyen tek bir transfer için onlarca bildirim üretir. Üst üste düşmeyi sayın, tek düşüşe tepki vermeyin.

> **Kapı ücretli çağrının önündeki son duraktır**
> 
> Kayıt ve yenileme kapıları, para harcanmadan önceki **son** noktadır. Fraud kontrolü, kota denetimi, premium onayı gibi işler buraya konur. Çağrıdan sonra yapılan aynı kontrol, parayı geri getirmez.

## İlgili Makaleler

- [Hizmet Yaşam Döngüsü Kancaları](https://dev.wisecp.com/tr/hizmet-yasam-dongusu-kancalari)
- Fatura ve Ödeme Kancaları
- [Kanca Dinleyicisi Yazma](https://dev.wisecp.com/tr/kanca-dinleyicisi-yazma)
