Kurallar
Kartla yapılan ödemelerde şüpheli işlem olup olmadığının belirlenmesi işlemi üye işyeri tarafından belirlenen kurallar çalıştırılarak yapılmaktadır. Şüpheli İşlem Kuralları Craftgate tarafından geliştirilen Fraud DSL adını verdiğimiz özel bir dil ile tanımlanmaktadır. Kural tanımlandığında kurala ait aksiyon (bkz: Şüpheli İşlem Aksiyonları) uygulanır.
Şüpheli İşlem Aksiyonları
| Aksiyon | Açıklama |
|---|---|
REVIEW | İncelemeye Al |
BLOCK | Engelle |
Kural Tanımlama
Kural tanımlama işlemi Şüpheli İşlem Yönetimi > Kural Yönetimi > Yeni Kural Ekle butonu yardımıyla açılan pencerede kural bilgileri girilerek tanımlama yapılabilir.
Tanımlanan kural aksiyonu 'Engelle' ise ödeme işlemi kesilerek üye işyerine FRAUD_CHECK_BLOCK hata grubu ile hata dönülür.
Tanımlanan kural aksiyonu 'İncelemeye Al' ise ödemeye izin verilir. İnceleme bekleniyor statüsünde bir Şüpheli işlem
kaydı oluşturulur.
Kural Tanımı
Kural tanımı alanında bulunan kural editörü Fraud DSL kullanılarak yapılacak tanımlar için konfigüre
edilmiştir.
Aşağıda detayları bulunan değişken isimleri ve listeler için otomatik tamamlama yaparak kuralların tanımlanmasını
kolaylaştırmak amaçlı geliştirilmiştir.
Fraud DSL
Şüpheli işlemlerin tespit edebilmek için bir fraud kuralı tanımlarken Fraud DSL adı verilen özel bir söz dizimi kullanılmaktadır.
Bu söz dizimi, barındırdığı birçok ön tanımlı değişken ve kullanıcı tanımlı değer listeleri yardımıyla dilediğiniz
kriterleri içeren size özel tanımlar yapmanıza olanak sağlayan oldukça esnek bir yapıdır.
Bir kural bir ya da birden fazla koşuldan oluşabilir, bu koşullar and operatörü kullanılarak birleştirilip tek bir
kuralı oluşturabilir.
Kural koşulları aşağıda yer alan değişken listesindeki değerler ile oluşturulabilir.
Kural formatı:
[koşul] and [koşul] and ...
Koşul formatı:
[değişken] [operatör] [değer/liste]
Not: boolean tipindeki değişkenler doğrudan true veya false değerlerine sahip olacağı için operatör ve değer
olmadan yani sameCardNumberHasFraudSuspectHourly and ... şeklinde kullanılabilir
Kural operatörleri
| Operatör Adı | Açıklama | Örnek |
|---|---|---|
== | Koşulda kullanılan değişkenin tanımlanan değere eşit olduğu koşulunu oluşturur | clientIp == "127.0.0.1 |
!= | Koşulda kullanılan değişkenin tanımlanan değere eşit olmadığı koşulunu oluşturur | clientIp != "127.0.0.1 |
< | Koşulda kullanılan değişkenin tanımlanan değere küçük olduğu koşulunu oluşturur. Sadece veri tipi numerik(integer ya da float) olan değişkenlerde kullanılabilir | sameClientIpIn30Minutes < 3 |
<= | Koşulda kullanılan değişkenin tanımlanan değere küçük ve eşit olduğu koşulunu oluşturur. Sadece veri tipi numerik(integer ya da float) olan değişkenlerde kullanılabilir | sameClientIpIn30Minutes <= 3 |
> | Koşulda kullanılan değişkenin tanımlanan değere büyük olduğu koşulunu oluşturur. Sadece veri tipi numerik(integer ya da float) olan değişkenlerde kullanılabilir | sameClientIpIn30Minutes > 3 |
>= | Koşulda kullanılan değişkenin tanımlanan değere büyük ve eşit olduğu koşulunu oluşturur. Sadece veri tipi numerik(integer ya da float) olan değişkenlerde kullanılabilir | sameClientIpIn30Minutes >= 3 |
in | Koşulda kullanılan değişkenin bir listede tanımlı olduğu koşulunu oluşturur | clientIp in @ipBlackList |
not in | Koşulda kullanılan değişkenin bir listede tanımlı olmadığı koşulunu oluşturur | clientIp not in @ipWhiteList |
Değişkenler
Kuralınızı tanımlarken kullanabileceğiniz tüm değişkenler aşağıda listelenmiştir.
| Değişken Adı | Veri Tipi | Açıklama |
|---|---|---|
cardNumber | cardFingerprint | Kart Parmak İzi |
cardHolderName | string | Kart Sahibinin Adı |
cardBrand | string | Kart Ailesi |
clientIp | string | Müşteri IP Adresi - İstekte gönderilen clientIp bilgisi |
buyerId | integer | Alıcı Üye ID - İstekte gönderilen buyerMemberId bilgisi |
buyerExternalId | string | Alıcı External ID - İstekte gönderilen fraudParams içerisindeki ya da buyerMember a ait externalId bilgisi |
buyerPhoneNumber | string | Alıcı Telefon Numarası - İstekte gönderilen fraudParams içerisindeki ya da buyerMember a ait phoneNumber bilgisi |
buyerEmail | string | Alıcı Email - İstekte gönderilen fraudParams içerisindeki ya da buyerMember a ait email bilgisi |
buyerEmailDomain | string | Alıcı Email Domaini - İstekte gönderilen fraudParams içerisindeki ya da buyerMember a ait email'in domain bilgisi |
customFraudVariable | string | Özel Değişken - İstekte gönderilen fraudParams içerisindeki customFraudVariable bilgisi |
currency | string | Para Birimi - İstekteki currency bilgisi - Varsayılan TRY |
paymentType | string | Ödeme Tipi - Bkz: Ödeme Tipleri |
binNumber | string | Bin - İstekteki kartın ilk 8 hanesi |
conversationId | string | Conversation ID - İstekte gönderilen conversationId bilgisi |
externalId | string | External ID - İstekte gönderilen externalId bilgisi |
checkoutToken | string | Checkout Token - İstekte gönderilen checkoutToken bilgisi |
paidPrice | float | Tahsil Edilen Tutar |
isThreeDS | boolean | Ödeme 3D secure ile mi alındı |
isForeignCard | boolean | İşlem yabancı kartla mı yapıldı |
hasSuccessPaymentIn30Minutes | boolean | Geçmiş işlemlerde son 30 dk içinde başarılı işlemi var mı |
hasSuccessPaymentHourly | boolean | Geçmiş işlemlerde son 1 saat içinde başarılı işlemi var mı |
hasSuccessPaymentDaily | boolean | Geçmiş işlemlerde son 1 gün içinde başarılı işlemi var mı |
sameIPHasFraudSuspectHourly | boolean | Geçmiş işlemlerde son 1 saat içinde aynı IP'den FRAUD_SUSPECT error grubunda işlemi var mı |
sameClientIpIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde aynı IP'den toplam işlem sayısı |
sameClientIpHourly | integer | Geçmiş işlemlerde son 1 saat içinde aynı IP'den toplam işlem sayısı |
sameClientIpDaily | integer | Geçmiş işlemlerde son 1 gün içinde aynı IP'den toplam işlem sayısı |
sameClientIpTotalPaidPriceIn30Minutes | float | Geçmiş işlemlerde son 30 dk içinde aynı IP'den aynı para birimindeki toplam işlem hacmi |
sameClientIpTotalPaidPriceHourly | float | Geçmiş işlemlerde son 1 saat içinde aynı IP'den aynı para birimindeki toplam işlem hacmi |
sameClientIpTotalPaidPriceDaily | float | Geçmiş işlemlerde son 1 gün içinde aynı IP'den aynı para birimindeki toplam işlem hacmi |
sameClientIpDistinctCardIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde aynı IP'den farklı kart ile alınan işlem sayısı |
sameClientIpDistinctCardHourly | integer | Geçmiş işlemlerde son 1 saat içinde aynı IP'den farklı kart ile alınan işlem sayısı |
sameClientIpDistinctCardDaily | integer | Geçmiş işlemlerde son 1 gün içinde aynı IP'den farklı kart ile alınan işlem sayısı |
sameBuyerIdIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde aynı alıcı için işlem sayısı |
sameBuyerIdHourly | integer | Geçmiş işlemlerde son 1 saat içinde aynı alıcı için işlem sayısı |
sameBuyerIdDaily | integer | Geçmiş işlemlerde son 1 gün içinde aynı alıcı için işlem sayısı |
sameBuyerIdTotalPaidPriceIn30Minutes | float | Geçmiş işlemlerde son 30 dk içinde aynı alıcı için aynı para birimindeki toplam işlem hacmi |
sameBuyerIdTotalPaidPriceHourly | float | Geçmiş işlemlerde son 1 saat içinde aynı alıcı için aynı para birimindeki toplam işlem hacmi |
sameBuyerIdTotalPaidPriceDaily | float | Geçmiş işlemlerde son 1 gün içinde aynı alıcı için aynı para birimindeki toplam işlem hacmi |
sameBuyerIdDistinctCardIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde aynı alıcı ile farklı kartla yapılan işlem sayısı |
sameBuyerIdDistinctCardHourly | integer | Geçmiş işlemlerde son 1 saat içinde aynı alıcı ile farklı kartla yapılan işlem sayısı |
sameBuyerIdDistinctCardDaily | integer | Geçmiş işlemlerde son 1 gün içinde aynı alıcı ile farklı kartla yapılan işlem sayısı |
sameBuyerExternalIdIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde aynı externalId değerine sahip alıcı için işlem sayısı |
sameBuyerExternalIdHourly | integer | Geçmiş işlemlerde son 1 saat içinde aynı externalId değerine sahip alıcı için işlem sayısı |
sameBuyerExternalIdDaily | integer | Geçmiş işlemlerde son 1 gün içinde aynı externalId değerine sahip alıcı için işlem sayısı |
sameBuyerExternalIdTotalPaidPriceIn30Minutes | float | Geçmiş işlemlerde son 30 dk içinde aynı externalId değerine sahip alıcı için toplam işlem hacmi |
sameBuyerExternalIdTotalPaidPriceHourly | float | Geçmiş işlemlerde son 1 saat içinde aynı externalId değerine sahip alıcı için toplam işlem hacmi |
sameBuyerExternalIdTotalPaidPriceDaily | float | Geçmiş işlemlerde son 1 gün içinde aynı externalId değerine sahip alıcı için toplam işlem hacmi |
sameBuyerExternalIdDistinctCardIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde aynı externalId değerine sahip alıcı ile farklı kartla yapılan işlem sayısı |
sameBuyerExternalIdDistinctCardHourly | integer | Geçmiş işlemlerde son 1 saat içinde aynı externalId değerine sahip alıcı ile farklı kartla yapılan işlem sayısı |
sameBuyerExternalIdDistinctCardDaily | integer | Geçmiş işlemlerde son 1 gün içinde aynı externalId değerine sahip alıcı ile farklı kartla yapılan işlem sayısı |
sameBuyerPhoneNumberIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde aynı telefon numarası değerine sahip alıcı için işlem sayısı |
sameBuyerPhoneNumberHourly | integer | Geçmiş işlemlerde son 1 saat içinde aynı telefon numarası değerine sahip alıcı için işlem sayısı |
sameBuyerPhoneNumberDaily | integer | Geçmiş işlemlerde son 1 gün içinde aynı telefon numarası değerine sahip alıcı için işlem sayısı |
sameBuyerPhoneNumberTotalPaidPriceIn30Minutes | float | Geçmiş işlemlerde son 30 dk içinde aynı telefon numarası değerine sahip alıcı için toplam işlem hacmi |
sameBuyerPhoneNumberTotalPaidPriceHourly | float | Geçmiş işlemlerde son 1 saat içinde aynı telefon numarası değerine sahip alıcı için toplam işlem hacmi |
sameBuyerPhoneNumberTotalPaidPriceDaily | float | Geçmiş işlemlerde son 1 gün içinde aynı telefon numarası değerine sahip alıcı için toplam işlem hacmi |
sameBuyerPhoneNumberDistinctCardIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde aynı telefon numarası değerine sahip alıcı ile farklı kartla yapılan işlem sayısı |
sameBuyerPhoneNumberDistinctCardHourly | integer | Geçmiş işlemlerde son 1 saat içinde aynı telefon numarası değerine sahip alıcı ile farklı kartla yapılan işlem sayısı |
sameBuyerPhoneNumberDistinctCardDaily | integer | Geçmiş işlemlerde son 1 gün içinde aynı telefon numarası değerine sahip alıcı ile farklı kartla yapılan işlem sayısı |
sameBuyerEmailIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde aynı email değerine sahip alıcı için işlem sayısı |
sameBuyerEmailHourly | integer | Geçmiş işlemlerde son 1 saat içinde aynı email değerine sahip alıcı için işlem sayısı |
sameBuyerEmailDaily | integer | Geçmiş işlemlerde son 1 gün içinde aynı email değerine sahip alıcı için işlem sayısı |
sameBuyerEmailTotalPaidPriceIn30Minutes | float | Geçmiş işlemlerde son 30 dk içinde aynı email değerine sahip alıcı için toplam işlem hacmi |
sameBuyerEmailTotalPaidPriceHourly | float | Geçmiş işlemlerde son 1 saat içinde aynı email değerine sahip alıcı için toplam işlem hacmi |
sameBuyerEmailTotalPaidPriceDaily | float | Geçmiş işlemlerde son 1 gün içinde aynı email değerine sahip alıcı için toplam işlem hacmi |
sameBuyerEmailDistinctCardIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde aynı email değerine sahip alıcı ile farklı kartla yapılan işlem sayısı |
sameBuyerEmailDistinctCardHourly | integer | Geçmiş işlemlerde son 1 saat içinde aynı email değerine sahip alıcı ile farklı kartla yapılan işlem sayısı |
sameBuyerEmailDistinctCardDaily | integer | Geçmiş işlemlerde son 1 gün içinde aynı email değerine sahip alıcı ile farklı kartla yapılan işlem sayısı |
sameCardNumberIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde aynı kart ile işlem sayısı |
sameCardNumberHourly | integer | Geçmiş işlemlerde son 1 saat içinde aynı kart ile işlem sayısı |
sameCardNumberDaily | integer | Geçmiş işlemlerde son 1 gün içinde aynı kart ile işlem sayısı |
sameCardNumberTotalPaidPriceIn30Minutes | float | Geçmiş işlemlerde son 30 dk içinde aynı kart ile aynı para birimindeki toplam işlem hacmi |
sameCardNumberTotalPaidPriceHourly | float | Geçmiş işlemlerde son 1 saat içinde aynı kart ile aynı para birimindeki toplam işlem hacmi |
sameCardNumberTotalPaidPriceDaily | float | Geçmiş işlemlerde son 1 gün içinde aynı kart ile aynı para birimindeki toplam işlem hacmi |
sameCardNumberHasFraudSuspectIn30Minutes | boolean | Geçmiş işlemlerde son 30 dk içinde aynı kart ile FRAUD_SUSPECT error grubunda işlemi var mı |
sameCardNumberHasFraudSuspectHourly | boolean | Geçmiş işlemlerde son 1 saat içinde aynı kart ile FRAUD_SUSPECT error grubunda işlemi var mı |
sameCardNumberHasFraudSuspectDaily | boolean | Geçmiş işlemlerde son 1 gün içinde aynı kart ile FRAUD_SUSPECT error grubunda işlemi var mı |
sameCardNumberInvalidCvvIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde aynı kart ile INVALID_CVC2 hatası alınan işlem sayısı |
sameCardNumberInvalidCvvHourly | integer | Geçmiş işlemlerde son 1 saat içinde aynı kart ile INVALID_CVC2 hatası alınan işlem sayısı |
sameCardNumberInvalidCvvDaily | integer | Geçmiş işlemlerde son 1 gün içinde aynı kart ile INVALID_CVC2 hatası alınan işlem sayısı |
sameCardNumberInvalidExpireDateIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde aynı kart ile INVALID_EXPIRE_YEAR_MONTH hatası alınan işlem sayısı |
sameCardNumberInvalidExpireDateHourly | integer | Geçmiş işlemlerde son 1 saat içinde aynı kart ile INVALID_EXPIRE_YEAR_MONTH hatası alınan işlem sayısı |
sameCardNumberInvalidExpireDateDaily | integer | Geçmiş işlemlerde son 1 gün içinde aynı kart ile INVALID_EXPIRE_YEAR_MONTH hatası alınan işlem sayısı |
sameCustomFraudVariableIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde aynı özel değişken değerine sahip işlem sayısı |
sameCustomFraudVariableHourly | integer | Geçmiş işlemlerde son 1 saat içinde aynı özel değişken değerine sahip işlem sayısı |
sameCustomFraudVariableDaily | integer | Geçmiş işlemlerde son 1 gün içinde aynı özel değişken değerine sahip işlem sayısı |
sameCustomFraudVariableTotalPaidPriceIn30Minutes | float | Geçmiş işlemlerde son 30 dk içinde aynı özel değişken değerine sahip toplam işlem hacmi |
sameCustomFraudVariableTotalPaidPriceHourly | float | Geçmiş işlemlerde son 1 saat içinde aynı özel değişken değerine sahip toplam işlem hacmi |
sameCustomFraudVariableTotalPaidPriceDaily | float | Geçmiş işlemlerde son 1 gün içinde aynı özel değişken değerine sahip toplam işlem hacmi |
sameCustomFraudVariableDistinctCardIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde özel değişken değerine sahip farklı kart ile alınan işlem sayısı |
sameCustomFraudVariableDistinctCardHourly | integer | Geçmiş işlemlerde son 1 saat içinde özel değişken değerine sahip farklı kart ile alınan işlem sayısı |
sameCustomFraudVariableDistinctCardDaily | integer | Geçmiş işlemlerde son 1 gün içinde özel değişken değerine sahip farklı kart ile alınan işlem sayısı |
sameConversationIdIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde aynı conversationId ile işlem sayısı |
sameConversationIdHourly | integer | Geçmiş işlemlerde son 1 saat içinde aynı conversationId ile işlem sayısı |
sameConversationIdDaily | integer | Geçmiş işlemlerde son 1 gün içinde aynı conversationId ile işlem sayısı |
sameConversationIdTotalPaidPriceIn30Minutes | float | Geçmiş işlemlerde son 30 dk içinde aynı conversationId ile aynı para birimindeki toplam işlem hacmi |
sameConversationIdTotalPaidPriceHourly | float | Geçmiş işlemlerde son 1 saat içinde aynı conversationId ile aynı para birimindeki toplam işlem hacmi |
sameConversationIdTotalPaidPriceDaily | float | Geçmiş işlemlerde son 1 gün içinde aynı conversationId ile aynı para birimindeki toplam işlem hacmi |
sameConversationIdDistinctCardIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde aynı conversationId ile farklı kartla yapılan işlem sayısı |
sameConversationIdDistinctCardHourly | integer | Geçmiş işlemlerde son 1 saat içinde aynı conversationId ile farklı kartla yapılan işlem sayısı |
sameConversationIdDistinctCardDaily | integer | Geçmiş işlemlerde son 1 gün içinde aynı conversationId ile farklı kartla yapılan işlem sayısı |
sameExternalIdIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde aynı externalId ile işlem sayısı |
sameExternalIdHourly | integer | Geçmiş işlemlerde son 1 saat içinde aynı externalId ile işlem sayısı |
sameExternalIdDaily | integer | Geçmiş işlemlerde son 1 gün içinde aynı externalId ile işlem sayısı |
sameExternalIdTotalPaidPriceIn30Minutes | float | Geçmiş işlemlerde son 30 dk içinde aynı externalId ile aynı para birimindeki toplam işlem hacmi |
sameExternalIdTotalPaidPriceHourly | float | Geçmiş işlemlerde son 1 saat içinde aynı externalId ile aynı para birimindeki toplam işlem hacmi |
sameExternalIdTotalPaidPriceDaily | float | Geçmiş işlemlerde son 1 gün içinde aynı externalId ile aynı para birimindeki toplam işlem hacmi |
sameExternalIdDistinctCardIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde aynı externalId ile farklı kartla yapılan işlem sayısı |
sameExternalIdDistinctCardHourly | integer | Geçmiş işlemlerde son 1 saat içinde aynı externalId ile farklı kartla yapılan işlem sayısı |
sameExternalIdDistinctCardDaily | integer | Geçmiş işlemlerde son 1 gün içinde aynı externalId ile farklı kartla yapılan işlem sayısı |
sameCheckoutTokenIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde aynı checkoutToken ile işlem sayısı |
sameCheckoutTokenHourly | integer | Geçmiş işlemlerde son 1 saat içinde aynı checkoutToken ile işlem sayısı |
sameCheckoutTokenDaily | integer | Geçmiş işlemlerde son 1 gün içinde aynı checkoutToken ile işlem sayısı |
sameCheckoutTokenTotalPaidPriceIn30Minutes | float | Geçmiş işlemlerde son 30 dk içinde aynı checkoutToken ile aynı para birimindeki toplam işlem hacmi |
sameCheckoutTokenTotalPaidPriceHourly | float | Geçmiş işlemlerde son 1 saat içinde aynı checkoutToken ile aynı para birimindeki toplam işlem hacmi |
sameCheckoutTokenTotalPaidPriceDaily | float | Geçmiş işlemlerde son 1 gün içinde aynı checkoutToken ile aynı para birimindeki toplam işlem hacmi |
sameCheckoutTokenDistinctCardIn30Minutes | integer | Geçmiş işlemlerde son 30 dk içinde aynı checkoutToken ile farklı kartla yapılan işlem sayısı |
sameCheckoutTokenDistinctCardHourly | integer | Geçmiş işlemlerde son 1 saat içinde aynı checkoutToken ile farklı kartla yapılan işlem sayısı |
sameCheckoutTokenDistinctCardDaily | integer | Geçmiş işlemlerde son 1 gün içinde aynı checkoutToken ile farklı kartla yapılan işlem sayısı |
Kural Örnekleri
Kuralınızı tanımlarken faydalanabileceğiniz örnek tanımlar ve açıklamaları aşağıda listelenmiştir.
| Kural | Açıklama |
|---|---|
cardNumber in @blockedCardNumbers | Liste kullanım örneği - Engellenmiş kartlarla yapılan işlemleri yakalar |
sameClientIpHourly > 2 and sameClientIpTotalPaidPriceHourly >= 10000 | Geçmiş ödemelerden Hesaplama Örneği - Son 1 saat içerisinde aynı IPv4 adresinden toplam tutarı 10.000 TL'yi aşan en az 3 işlem yapan ödemeleri yakalar |