Dondino için cashback platformu
Dondino basit bir işlem vaat ediyor: platform üzerinden alışveriş yapın, bir kısmını geri alın. Bunun arkasında, her biri kendi formatına ve kendi durum modeline sahip bir dizi affiliate ağından gelen işlem bildirimleri yatıyor; bu bildirimlerin, bir üyenin takip edebileceği ve platformu işletenin sorumluluğunu üstlenebileceği bir bakiyeye dönüşmesi gerekiyor. Batunet, platformun geliştirilmesini ve bakımını 2015'te devraldı.
Bir dakikada proje.
- Müşteri
- Dondino — üye hesapları bulunan ve Almanya, Avusturya ve İsviçre'deki üyelerine ödeme yapan, Almanca konuşulan pazara yönelik bonus ve cashback platformu.
- Rol
- Batunet, platformun geliştirilmesini ve bakımını 2015'te devraldı.
- İş modeli
- Partner programları üzerinden cashback, ücretli reklam e-postaları ve iki kademeli bir davet programı; hepsi ortak bir bakiye hesabında.
- Harici bağlantılar
- Tarihsel olarak ondan fazla affiliate ağı; her biri kendi formatında dosya çekme, REST ve SOAP arayüzleri üzerinden bağlanmış.
- İşlemenin çekirdeği
- Her ağ için, bildirilen işlemleri ortak bir dahili işlem modeline aktaran ayrı bir içe aktarma yolu.
- Hesaplama
- Bildirilen komisyonun üye payı ve platform payı olarak bölünmesi. İzlenebilir kayıt geçmişine sahip hesap bakiyeleri.
- Ödeme
- Kendi durumu olan ayrı bir süreç: Ödemelerin ön koşulları vardır; kontrol edilir ve onaylanır ya da gerekçesiyle iptal edilir.
- Kötüye kullanım önleme
- Tekrarlanan ödüllendirmeye karşı bekleme süreleri, otomatik tıklamaların tespiti, çoklu hesapların bulunması, engelleme listeleri ve şüpheli giriş denemelerinde kademeli engellemeler.
- İşleme modeli
- İçe aktarma, eşleştirme ve kontrol çalışmaları; aralıkları ve her çalışma için zaman bütçesi tanımlı bir iş (job) tablosuyla yönetilen, tekrarlayan toplu işlemler olarak kurgulanmıştır.
- Teknik temel
- PHP 8 ve Laravel 8; yıllar içinde büyümüş, içe aktarmaları ve kontrol çalışmaları adım adım Laravel'in veritabanı katmanına taşınan bir PHP kod tabanıyla birlikte.
Kulağa basit gelen bir vaat.
Cashback, kısa bir cümleyle ifade edilen bir vaattir: Platform üzerinden alışveriş yapan, satın alma bedelinin bir kısmını geri alır. Bu cümle açıklama gerektirmez. Arkasındaki sistem ise neredeyse tamamen, cümlenin söylemediği şeylerden oluşur.
Çünkü satın alma platformda gerçekleşmez. Satıcıda gerçekleşir; işlemi aracılık eden bir affiliate ağı daha sonra bildirir: kendi formatında, kendi zamanlamasıyla, kendi durum modeliyle. Bir üyenin tıklaması ile hesabına alacak kaydedilmesi arasında yabancı bir sistem, haftalarca süren bir bekleme ve bu süre içinde hâlâ değişebilecek durumlar vardır.
Dondino, bakiye kazanmanın birkaç yolunu bir araya getirir: partner programları üzerinden cashback, reklam e-postalarındaki ücretli tıklamalar ve davet edilen üyelerin alacaklarından alınan paylar. Üyeler ayrıca bakiyelerini, gönderimden önce onaylanan e-posta reklamları için kendileri de kullanabilir.
Batunet, platformun geliştirilmesini ve bakımını 2015'te devraldı. Görev cashback için bir arayüz inşa etmek değil, arkasındaki hesaplamayı güvenilir kılmaktı: birçok yabancı sistemin bildirimlerinden, bir üyenin takip edebileceği ve platformu işletenin sorumluluğunu üstlenebileceği bir bakiye modeli oluşturmak.
On sağlayıcı, verinin nasıl görünmesi gerektiğine dair on farklı fikir.
Bir affiliate ağı bağlamak, kulağa tek bir arayüz gibi gelir. Tarihsel olarak ondan fazla ağ bağlamak ise başka bir şeydir: Bir işlemin nasıl görünmesi gerektiğine dair ondan fazla farklı fikir demektir.
Farklar kaba hatlarda değil, ayrıntılardadır ve hesaplama hataları da tam orada ortaya çıkar. Bir sağlayıcı dosyaları indirmeye sunar, bir diğeri bir REST kaynağı, üçüncüsü bir SOAP servisi. Biri az sayıda durum bilir, diğeri daha fazla; aynı gibi görünen adlar aynı anlama gelmez. Biri, üyenin yönlendirildiği tanımlayıcıyı geri döndürür, diğeri bunu yalnızca kısıtlı biçimde iletir.
Bu nedenle ilk tasarım kararı, bu formatların hiçbirinin sistemin içine ilerlemesine izin vermemekti. Her bağlantı, tek bir görevi olan ayrı bir içe aktarma yoludur: bir ağın gönderdiği veriden dahili işlem modelini üretmek. Bir ağ dosyasının yapısını değiştirirse içe aktarma bunu fark eder ve kaydeder; hatalı değerleri sessizce devralmaz.
- Aktarım yolu
- Dosya çekme, REST arayüzü, SOAP servisi
- Veri formatı
- CSV, XML, Sağlayıcıya özgü alan adları ve sütun sıraları
- Durum modeli
- Sağlayıcıya göre farklı durum adları, Farklı sayıda durum, Dahili bir modele normalleştirme
- Tanımlayıcı aktarımı
- Her işlem için ayrı eşleştirme tanımlayıcısı, Sağlayıcıya göre tam veya kısıtlı geri dönüş, Tanımlayıcının iletilmediği durumlar için içe aktarmada ayrı bir yol
Bir işlemin yolculuğu.
Bu sistemin temel sorusu, bir işlemin gelip gelmediği değil, kime ait olduğudur. Ağ üyeyi tanımaz, platform da satın almayı. İki taraf yalnızca, platformun yönlendirme sırasında verdiği ve ağın daha sonra geri bildirdiği bir tanımlayıcı üzerinden birbirine bağlanır.
Bu nedenle bu tanımlayıcı teknik bir ayrıntı değil, her alacak kaydının ön koşuludur. Bir sağlayıcı onu eksiksiz iletmiyorsa bu, sonradan çözülecek bir uç durum değildir; içe aktarmada baştan öngörülmesi gereken ayrı bir yoldur.

- 01
Tanımlayıcı
Bir partner programına yönlendirme sırasında platform, bu işlem için kendi eşleştirme tanımlayıcısını oluşturur.
- 02
Aktarım
Tanımlayıcı affiliate ağına iletilir ve orada işlemle birlikte taşınır.
- 03
Geri bildirim
Ağ, işlemi daha sonra kendi formatında ve kendi durumuyla bildirir.
- 04
Standartlaştırma
Sağlayıcıya özgü içe aktarma yolu, alanları ve durumları dahili işlem modeline aktarır.
- 05
Eşleştirme
Geri dönen tanımlayıcı sayesinde işlem bir üye hesabıyla eşleştirilir.
- 06
Alacak kaydı
Bildirilen komisyon, ancak ağ işlemi onayladığında kayıt geçmişinde yer alan bir alacağa dönüşür.
Komisyondan bakiyeye.
Bildirilen bir komisyon henüz bakiye değildir. İkisinin arasında izlenebilir kalması gereken bir hesaplama vardır: Ağın bildirdiği tutardan üyenin payı ve platformun payı çıkar. Bu paylaştırma iş mantığına aittir, sonradan yapılan bir analize değil. Davet programı da aynı alacak kaydını temel alır: Bir üyeyi davet eden, iki kademede bir pay alır.
Bu nedenle hesap bakiyesinin yanında bir kayıt geçmişi bulunur. Yalnızca toplam olarak var olan bir bakiye, şüphe durumunda açıklanamaz; geçmişi olan bir bakiye ise kalem kalem ayrıştırılabilir: hangi işlem, hangi zaman, hangi durum.
Harici durum modelleri bu süreçte normalleştirilir. “Onaylandı” ve “iptal edildi”, tek tek sağlayıcıların terimleri değil, dahili işlem modelinin parçasıdır. Bakiye ve kayıt geçmişi ayrı ayrı izlenebilir kalır.
Bilinçli olarak otomatik çalışmayan adım.
Sürecin sonunda bir ödeme vardır; paranın sistemden çıktığı tek nokta. Tam da orada her şey bilinçli olarak kendiliğinden işlemez.
Bu nedenle bir ödeme talebi, kendi durumu olan ayrı bir süreçtir. Ön koşulları vardır (asgari tutar, doğrulanmış bir banka hesabı veya onaylanmış bir PayPal hesabı); kontrol edilir ve onaylanır ya da gerekçesiyle iptal edilir. Yeterli bakiye ile fiili ödeme arasında, sistemde görünür kalan bir karar vardır; ödeme belgeleri PDF olarak sunulur.
Bu teknik bir kolaylık değil, bir tasarım kararıdır. Otomasyon, bir hatanın düzeltilebildiği her yerde doğrudur. Ödenmiş bir tutar ise düzeltilemez.
Para üretilen yerde, para üretilmeye çalışılır.
Bir sistem para dağıtmaya başladığı anda hedef hâline gelir. Bu üyelere yönelik bir şüphe değil, iş modelinin bir özelliğidir: Sonunda alacak kaydı bulunan bir süreç, o süreci gerçekten yaşamadan üretmeye çalışmayı cazip kılar.
Bu nedenle karşı önlemler tek bir noktada değil, sürecin geneline dağılmıştır. Kaydedilen bir işlemden sonra, aynı yol yeniden ödüllendirilmeden önce her üye ve partner programı için bir bekleme süresi devreye girer. Reklam e-postalarındaki otomatik tıklamalar tespit edilir ve ayıklanır. Çoklu hesaplar, eşleşen banka hesaplarına kadar uzanan ortak özellikler üzerinden bulunur. Engelleme listeleri, bilinen bir örüntünün olduğu yerde devreye girer. Dikkat çekici sayıda hatalı giriş denemesi olan erişimler hemen ve kalıcı olarak değil, kademeli olarak engellenir.
Bu önlemlerin hiçbiri tek başına zahmetli değildir. Birlikte ise kendini amorti eden bir cashback programı ile istismar edilen bir program arasındaki farkı oluştururlar.
Bir entegrasyon yıllar içinde ne anlama gelir?
Bir affiliate entegrasyonu, bitiş tarihi olan bir proje değildir. Bağlı olduğu ağlar başka şirketlere aittir: Alanları, formatları, durum adlarını ve erişim yollarını haber vermeden değiştirirler, üstelik bunu aynı anda yapmazlar.
Platform için bu, kenarlardaki işin hiç bitmediği, merkezin ise stabil kalması gerektiği anlamına gelir. Sağlayıcıya özgü içe aktarma ile dahili işlem modeli arasındaki ayrım tam da bunun için vardır: Değişen bir format hesaplamayı değil, yalnızca bir içe aktarma yolunu etkiler.
Böyle bir sistemin değeri zaten teknolojisinde değil, yıllar içinde ona yerleşmiş kurallardadır: eşleştirme, paylaştırma, süreler, tek tek sağlayıcıların özellikleri. Bu kuralları korumak isteyen, merkezi yeniden inşa etmek yerine kenarların bakımını yapar.
Yıllar içinde büyümüş bir kod tabanı, yeni bir temel üzerinde.
Dondino, daha yeni olan teknik temelinden daha eskidir. Üye alanı ve yönetim, PHP 8 üzerinde çalışan bir Laravel 8 uygulamasındadır; bunun yanında kendi içe aktarma ve kontrol betiklerine sahip, yıllar içinde büyümüş bir PHP kod tabanı bulunur.
Bu kod tabanını tek seferde değiştirmedik. Eski veritabanı erişimi bir uyumluluk katmanı üzerinden çalışmaya devam ediyor; içe aktarmalar ve kontrol çalışmaları ise adım adım Laravel'in veritabanı katmanına taşındı. Bunlar, öncelik, aralık ve her çalışma için sabit bir zaman bütçesi içeren bir iş (job) tablosuyla yönetilir; böylece hiçbir içe aktarma bir sonrakini engellemez.
Üye hesapları da kimse fark etmek zorunda kalmadan birlikte büyüdü: Eski parola hash'leri bir sonraki girişte güncel bir yönteme dönüştürülür; tüm üyeleri parola değiştirmeye zorlamadan.
Bu projenin bağlı olduğu hizmetler.
Bu projeyle ilgili sorular
Birden fazla affiliate ağı ortak bir hesaplama modeline nasıl bağlanır?
Hiçbir sağlayıcı formatının sistemin içine ilerlemesine izin vermeyerek. Her bağlantı, tek bir görevi olan ayrı bir içe aktarma yoludur: ağın alanlarını, formatlarını ve durum adlarını dahili bir işlem modeline aktarmak. Sonrasındaki her şey (eşleştirme, hesaplama, bakiye) yalnızca bu tek modeli bilir.
Bir affiliate işlemi doğru üyeyle nasıl eşleştirilir?
Platformun partner programına yönlendirme sırasında verdiği ve ağın bildirilen işlemle birlikte geri döndürdüğü bir eşleştirme tanımlayıcısı aracılığıyla. Bu iki olay arasında haftalar olabilir. Bir sağlayıcının tanımlayıcıyı eksiksiz iletmediği durumlar için içe aktarmada ayrı bir yol öngörülmüştür.
Ödeme neden otomatik olarak başlatılmıyor?
Çünkü geri alınamayan adım odur. Bu nedenle ödeme, kendi durumu olan ayrı bir süreçtir: Ön koşulları vardır, kontrol edilir ve onaylanır ya da gerekçesiyle iptal edilir. Otomasyon, bir hatanın düzeltilebilir kaldığı yerde doğrudur.
Bir cashback platformu kötüye kullanımla nasıl başa çıkar?
Tek bir kontrol yerine süreç boyunca birden fazla kontrolle: tekrarlanan ödüllendirmeye karşı bekleme süreleri, otomatik tıklamaların tespiti, çoklu hesapların bulunması, bilinen örüntüler için engelleme listeleri ve dikkat çekici sayıda hatalı giriş denemesinde kademeli engellemeler.
Bağlı affiliate ağlarının adlarını neden vermiyorsunuz?
Çünkü mühendislik çalışmasını anlatmak için gerekli değiller. Entegrasyon, eşleştirme, hesaplama, ödeme ve kötüye kullanım önleme, sağlayıcıların adı verilmeden eksiksiz anlatılabilir; ağlarla olan ilişkiler Dondino'nun işinin bir parçasıdır.
İlgili konular.
Bu sayfayla bağlantılı rehberler, kararlar, hizmetler ve projeler.
Projenizi konuşalım.
Projenizi kısaca anlatın. İlk görüşmeyi doğrudan yönetimle yaparsınız.
