Sipariş Yapılandırma Kancaları

1.5k görüntülenme Markdown

Müşteri sipariş verirken seçim yaptığı ekranların sekiz kancası: yapılandırma, alan adı ekleme, ek hizmet ekleme ve provizyon.

Genel Bakış

Yapılandırma ekranı, müşterinin ürünü kendine göre ayarladığı yerdir: alan adı seçimi, ek hizmetler, dönem, özel alanlar. Buradaki kancalar hem ekranı hem seçimin geçerliliğini etkiler.

Son kanca farklıdır: ödeme tamamlandıktan sonra hizmetler kurulmadan hemen önce çalışır. Sipariş kaleminden hizmete geçişin son durağıdır.

Referans

Yapılandırmayı durdurma

gateorder.item_configure
ClientOrder seçimler toplanmış

Yapılandırılmış ürün sepete yazılmadan önce çalışır; seçimler toplanmış hâldedir.

Parametreler 3
$productarrayÜrün kaydı: kimlik, tip, ad, ek hizmetler, ön koşullar, alt alan adları, seçenekler.
$cyclestringSeçilen faturalama döngüsü, doğrulanmış hâlde.
$optionsarrayToplanan yapılandırma — sepet satırının seçenekleri olacak: alan adı seçimi (none, owned, register, transfer, subdomain), ek hizmetler, özel alanlar. Müşterinin bütün seçimleri buradadır.
Dönüş 1
stringBoş olmayan bir string işlemi durdurur; metin müşteriye hata olarak gösterilir.
Dinleyici
Hook::add('gate:order.item_configure', 10, function ($product, $cycle, $options) {
    // Musterinin tum secimleri $options icinde: is kuralinizi burada dogrulayin.
    if (($options['domain']['option'] ?? '') === 'owned'
        && !Acme::domainReachable($options['domain']['name'] ?? ''))
        return 'Girdiginiz alan adina ulasilamiyor.';

    return null;
});

Yapılandırma ekranını değiştirme

filterorder.configure_data
ClientOrder sayfanın tamamı

Yapılandırma sayfasının verisi hazırlandıktan sonra çalışır.

Parametreler 2
$dataarrayrefSayfanın tüm şablon verisi: ürün, fiyatlar (döngüye göre ham tutarlar), ek hizmetler, alan adı seçenekleri. Fiyatlar biçimlenmemiş gelir; ekranda biçimlendirilir.
$ctxarrayBağlam: ham ürün kaydı, tip, kimlik ve edit işareti. edit dolu ise müşteri sepetteki bir satırı düzenliyordur, yeni ürün eklemiyordur.
Dönüş 1
voidDeğer referansla değişir; dönüş kullanılmaz.
Dinleyici
Hook::add('filter:order.configure_data', 10, function (&$data, $ctx) {
    // edit dolu ise musteri sepetteki satiri duzenliyor, yeni urun eklemiyor.
    if (!empty($ctx['edit'])) return;

    $data['acme_hint'] = Acme::upsellHint((int) ($ctx['id'] ?? 0));
});

Ek hizmet ekranını değiştirme

filterorder.configure_addon_data
ClientOrder bağlam kopyadır

Ek hizmet satın alma ekranının verisi hazırlandıktan sonra çalışır.

Parametreler 2
$dataarrayrefSayfanın tüm şablon verisi. Değiştirmek istediğiniz yer burasıdır.
$ctxarrayrefBağlam: ham ek hizmet kaydı, hizmet listesi ve seçenekler. Listeler kopyadır: referansla geçse de burada yaptığınız değişiklik ekrana yansımaz.
Dönüş 1
voidDeğer referansla değişir; dönüş kullanılmaz.
Dinleyici
Hook::add('filter:order.configure_addon_data', 10, function (&$data, &$ctx) {
    // $ctx icindeki listeler KOPYADIR: degisiklik icin $data'yi kullanin.
    $data['services'] = Acme::filterServices($data['services'] ?? []);
});

Alan adı eklemeyi durdurma

gateorder.domain_add
ClientOrder uzantı doğrulanmış

Alan adı sepete yazılmadan önce çalışır.

Parametreler 2
$tldRowarrayUzantı kaydı: kimlik, ad, durum, gizlilik, DNS yönetimi, yönlendirme ek hizmetleri. Satışa açık olduğu doğrulanmıştır.
$itemarraySepete yazılacak satır: işlem (register ya da transfer), tam ad, ad ve uzantı parçaları, yıl. Yıl burada her zaman 1'dir; dönem yapılandırmada değişir.
Dönüş 1
stringBoş olmayan bir string işlemi durdurur; metin müşteriye hata olarak gösterilir.
Dinleyici
Hook::add('gate:order.domain_add', 10, function ($tldRow, $item) {
    // Transferde ek kontrol; kayitta gerek yok.
    if (($item['action'] ?? '') === 'transfer' && Acme::recentlyRegistered($item['domain'] ?? ''))
        return 'Yeni kaydedilmis alan adi 60 gun transfer edilemez.';

    return null;
});

Ek hizmet eklemeyi durdurma

gateorder.service_addon_add
ClientOrder sahiplik doğrulanmış

Hizmete ek hizmet eklenmeden önce çalışır; hizmetin müşteriye ait olduğu doğrulanmıştır.

Parametreler 3
$servicearrayEk hizmetin bağlanacağı hizmet: kimlik, sahip, ürün, tip, durum, dönem, vade.
$addonarrayEk hizmet tanımı: kimlik, ad, tip (select, radio, checkbox, quantity), durum, özellikler.
$itemarraySepete yazılacak satır: hizmet, ek hizmet, seçenek, adet ve upgrade_of. upgrade_of sıfırdan büyükse bu yeni alım değil, mevcut bir ek hizmetin yükseltilmesidir.
Dönüş 1
stringBoş olmayan bir string işlemi durdurur; metin müşteriye hata olarak gösterilir.
Dinleyici
Hook::add('gate:order.service_addon_add', 10, function ($service, $addon, $item) {
    // upgrade_of > 0 ise bu bir YUKSELTMEDIR, yeni alim degil.
    if ((int) ($item['upgrade_of'] ?? 0) > 0) return null;

    if (($service['status'] ?? '') !== 'active')
        return 'Etkin olmayan hizmete ek hizmet eklenemez.';

    return null;
});

Kurulacak hizmetleri değiştirme

filterorder.services_items
Orders::buildServices() provizyon öncesi son durak

Ödeme tamamlandıktan sonra, sipariş kalemlerinden hizmetler kurulmadan hemen önce çalışır.

Parametreler 2
$ctxarrayrefProvizyon bağlamı: sipariş, fatura, sahip, para birimi, durum, ödeme yöntemi, diller, zaman.
$itemsarrayrefKurulacak ürün ve alan adı kalemleri. Buradan bir kalem çıkarmak, o hizmetin hiç kurulmaması demektir — müşteri parasını ödemiş olsa bile.
Dönüş 1
voidDeğer referansla değişir; dönüş kullanılmaz.
Dinleyici
Hook::add('filter:order.services_items', 10, function (&$ctx, &$items) {
    // Kalem CIKARMAK hizmeti hic kurmaz: musteri odedi ise elle telafi edin.
    foreach ($items as &$i)
        $i['options']['acme_batch'] = Acme::batchFor((int) ($ctx['order_id'] ?? 0));
});

Satış ortağı değişimini izleme

actionorder.affiliate_changed
AdminOrders sıfır kaldırma demek

Siparişin satış ortağı değiştikten sonra çalışır.

Parametreler 2
$order_idintSipariş kimliği.
$affiliate_idintYeni satış ortağı. 0 demek ortaklığın kaldırıldığı demektir; yeni ortak değil.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:order.affiliate_changed', 10, function ($order_id, $affiliate_id) {
    // 0 = ortaklik KALDIRILDI; komisyonu da geri almaniz gerekebilir.
    if ($affiliate_id === 0) Acme::revokeCommission((int) $order_id);
});

Siparişten hizmet çıkarmayı izleme

actionorder.service.deleted
AdminOrders sipariş kalır

Bir hizmet siparişten çıkarıldıktan sonra çalışır. Sipariş kaydı yerinde kalır.

Parametreler 2
$order_idintSipariş kimliği.
$service_idintÇıkarılan hizmetin kimliği.
Dönüş 1
voidDönüş yoksayılır.
Dinleyici
Hook::add('action:order.service.deleted', 10, function ($order_id, $service_id) {
    Audit::orderLineRemoved((int) $order_id, (int) $service_id);
});

Tuzaklar

Provizyon filtresinde kalem çıkarmak parayı iade etmez

Hizmet kurulum filtresi ödeme tamamlandıktan sonra çalışır. Bir kalemi listeden çıkarırsanız o hizmet hiç kurulmaz ama müşteri parasını ödemiştir ve fatura yerinde durur. Bir şeyi engellemek istiyorsanız bunu sepet ya da ödeme adımı kapısında yapın.

Ek hizmet ekranında bağlam kopyadır

İkinci parametre referansla geçse de içindeki listeler kopyadır: orada yaptığınız değişiklik ekrana yansımaz ve dinleyiciniz hiçbir şey yapmamış gibi görünür. Değiştirmek istediğiniz şey ilk parametrededir.

Ek hizmet eklemek yükseltme de olabilir

Ek hizmet kapısındaki satırda upgrade_of sıfırdan büyükse müşteri yeni bir şey almıyor, var olanı yükseltiyordur. "Bu ek hizmet zaten var, ikincisini engelle" diye yazılan bir kural, yükseltmeyi de engeller.

Yapılandırma ekranı düzenleme kipinde de açılır

Ekran filtresindeki bağlamda edit doluysa müşteri yeni ürün eklemiyor, sepetteki bir satırı düzenliyordur. Ek satış önerisi ya da karşılama metni gibi şeyleri düzenleme kipinde göstermek, müşterinin zaten yaptığı seçimi tekrar sormak olur.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.