3D Secure ile Ödeme Alma

3D Secure ile yapılan ödemeler üç adımda gerçekleşir; başlatma, doğrulama ve tamamlanma. Başlatma isteğinde Craftgate API'sine 3D Secure başarı durumunun iletilebileceği bir callback URL verilirken; bu URL ile tetiklenen üye işyeri iş süreçleri de ödeme ID'sini belirterek ödemeyi tamamlama isteği gönderir ve sürecin uçtan uca tamamlanmasını sağlar.

3D Secure entegrasyonunu yaparken işinize yarayacak güvenlik önerilerine ilgili sayfamızdan ulaşabilirsiniz.

3D Secure Ödeme Başlatma

URL

3D Secure ödeme başlatmak için kullanılan endpoint ve http metod bilgisi aşağıda verilmiştir.

HTTP Metod URL
POST /payment/v1/card-payments/3ds-init

Ödeme Başlatma İsteği Parametreleri

3D Secure ile yapılacak ödemelerde diğer ödemelerden farklı olarak callbackUrl parametresinin gönderilmesi zorunludur. Bu bağlamda 3D Secure ile bir ödeme başlatmak gereken parametreler aşağıdaki gibidir

Parametre Adı Tipi Zorunlu Açıklama
conversationId string Hayır İstekle beraber gönderilip, cevapla birlikte alınabilecek, "bumerang" değer. Farklı istekleri birbirleriyle ilişkilendirmek için kullanılabilir. Genellikle üye işyerinin ödemeye ilişkin sipariş numarası kullanılır. Sipariş numarası ile kullanmanız sonradan işlemleri incelemenize yardımcı olacaktır.
externalId string Hayır Üye işyeri tarafından ödeme isteği içerisinde gönderilen externalId değeri
price decimal Evet Toplam ödeme tutarı. Sepetteki ürün/hizmet tutarları toplamının bu tutara eşit olması gerekmektedir
paidPrice decimal Evet Komisyon ve indirim gibi farklar dahil edilerek hesaplanan, karttan çekilecek nihai tutar. Tamamı ya da bir kısmı cüzdandan tahsil edilen ödemelerde cüzdandan tahsil edilecek tutar da bu tutara dahildir. İşlemde vade farkı var ise vade farkı eklenmiş tutar bu parametreye girilmelidir.
walletPrice decimal Hayır buyerMemberId parametresinde belirtilen alıcının cüzdanından tahsil edilecek tutar. Kısmen ya da tamamen cüzdandan tahsil edilecek ödemelerde gönderilmesi zorunludur. Tamamı karttan tahsil edilecek ödemelerde ya da bir buyerMemberId bulunmadığı durumda 0 olarak gönderilebilir. (Varsayılan: 0)
installment number Evet Ödemenin tahsil edileceği taksit sayısı. Tek çekim için 1 olarak gönderilebilir.
buyerMemberId number Hayır Ödemenin ilişkilendirildiği alıcı ID'si. Üye işyerinin kendi sistemlerindeki ID değerini değil, Craftgate sistemlerindeki ID değerini ifade eder
currency Currency Evet bkz: Para Birimleri Ödemenin tahsil edileceği para birimi
paymentGroup PaymentGroup Hayır bkz: Ödeme Grupları
paymentPhase PaymentPhase Hayır bkz: Ödeme Fazları
paymentChannel string Hayır Genellikle üye işyeri tarafındaki, ödemenin alındığı kanal veya ödemeye özel bir bilgi tutmak için kullanılır. Daha sonradan sorgulama servislerini kullanarak bu değer ile sorgulama yapabilirsiniz.
callbackUrl string Evet 3D Secure ile yapılan ödemelerde bankadan dönen sonucu üye işyerine iletmek için kullanılacak adres)
bankOrderId string Hayır Ödeme alınırken bankaya iletilecek orderId parametresi. Opsiyonel olduğu için gönderilmemesi ve orderId değerinin Craftgate tarafından üretilmesi önerilir.
clientIp string Hayır Ödeme yapan alıcının IP adresi.
card Card Hayır (bkz. Kart Bilgileri) Tahsilatın gerçekleştirileceği kart bilgileri. Tamamı cüzdandan tahsil edilecek ödemelerde (yani paidPrice'in walletPrice'a eşit olduğu ödemeler) gönderilmemelidir
posAlias string Hayır Ödemenin geçmesi gereken posun ismi. Ödemenin geçeceği pos'a kendiniz karar verdiyseniz bu parametre ile ilgili posdan ödeme alabilirsiniz.
items PaymentItem[] Evet (bkz. Ödeme Kırılım Bilgileri) Ödemeye ilişkin kırılım bilgileri. En az bir kırılım gönderilmesi ve gönderilen kırılımların tutarlarının toplamının price alanına eşit olması zorunludur

Dönüş Parametreleri

3D Secure ile ödeme işleminin sonucunda dönen parametreler API dokümantasyonu giriş sayfasındaki Dönüş Formatları bölümünde belirtilen kurallara tabidir. Sistemsel ya da kurgusal bir hata bulunmadığı durumda data parametresinde dönen objenin alt parametreleri aşağıdaki gibidir:

Parametre Adı Tipi Her Zaman Mevcut Açıklama
htmlContent string Evet Kullanıcıya gösterilecek 3D Secure formunun HTML kod içeriği. Bu değer Base64-encoded olarak gönderilmekte olup, gösterimden önce üye işyeri tarafindan Base64 decode edilmelidir

3D Secure Doğrulama

Üye işyeri tarafından gönderilen ödeme başlatma isteği ile başlayan 3D Secure ödeme süreci, kullanıcı doğrulaması ile devam eder. Bunun için başlatma isteğine dönülen cevaptaki HTML içeriğinin decode edilerek kullanıcıya gösterilmesi gerekmektedir.

Kullanıcı kendisine iletilen doğrulama kodu girdikten sonra doğrulama sonucu ilgili banka tarafından Craftgate API'sine iletilir. Craftgate API, aldığı sonucu ödemeyle ilgili birtakım bilgilerle birlikte harmanlayarak, ödeme başlatma isteğinde üye işyeri tarafından gönderilmiş olan callbackUrl adresine bir istek yaparak iletir.

Callback URL'e İletilen Parametreler

Aşağıdaki parametreler form variable olarak HTTP POST metodu kullanılarak iletilir. Üye işyerinin callback adresine kullanıcı tarayıcısından ulaşılacağı için, bu adres internete açık olmalı ve application/x-www-form-urlencoded content-type'ını karşılayabilmelidir.

Doğrulama sonrası Craftgate tarafından callbackUrl'e yapılacak istekte yer alan parametreler aşağıdaki gibidir:

Parametre Adı Tipi Her Zaman Mevcut Açıklama
status string Evet 3D Secure doğrulamasının durumunu ifade eden değer. Doğrulama başarılıysa SUCCESS, değilse FAILURE değerini alacaktır
conversationId string Hayır Ödeme başlatma isteğinde gönderilen conversationId parametresinin değeri
paymentId number Hayır Doğrulama başarılı olduğu durumda gönderilir. Ödemeye ilişkin Craftgate API tarafından türetilen ID değeridir
completeStatus string Evet Bazı banka ve ödeme kuruluşlarının 3D Secure modeline göre doğrulama ve tamamlama işlemi aynı anda olabilmektedir. Bu değer WAITING ise 3D Secure tamamlama servisini çağırmalısınız, COMPLETED ise ödeme tamamlanmıştır, buna göre sisteminizi güncellemeniz gerekmektedir.
callbackStatus string Hayır Bankanın veya son kullanıcının 3DS doğrulama adımını tekrar tetiklemesi durumunda, ödeme daha önceden doğrulanmış ise gönderilir. Status alanı FAILURE değerini alırken, callbackStatus değeri ALREADY_RETURNED olarak gönderilecektir. Bu alan ALREADY_RETURNED değeriyle geldiği durumda, sisteminizde ödemenin durumu kontrol edilmeli ve tamamlanmışsa bir aksiyon alınmamalıdır.
conversationData string Hayır Başarılı responselarda dönülen güvenli iletişim datasıdır. Bu parametrenin döndüğü durumda doğrulamanın sağlanması amacıyla complete aşamasında gönderilmeli.
hash string Evet Ödeme sonucu dönülen parametrelerin Sha-256 Hex algoritması ile şifrelenmesi sonucu oluşan değerdir. Detaylı açıklama aşağıda, "Hash Değerinin Oluşurulması" başlığında mevcuttur.

Mecburi Güvenlik Adımı: Hash Değerinin Oluşurulması ve Kontrolü

Üye işyerinin Callback URL'ine, Craftgate'in geldiği gibi kötü niyetli kişiler de istek atabilir. O nedenle CALLBACK URL'E GELEN HİÇBİR İSTEĞE, HASH KONTROLÜ YAPMADAN KESİNLİKLE GÜVENMEYİNİZ.

Response içerisinde bulunan hash değeri, dönülen parametrelerin doğrulamasını sağlamak amacıyla Sha-256 Hex algoritması ile hashlenerek oluşturulur.

  • İşlem için gerekli 32 Haneli key değerine şuradan ulaşılabilir: Panel üzerinde bulunan Yönetim -> Üye İşyeri Ayarları arayüzündeki "Üye İşyeri 3DSecure Callback Key"
  • Hash algoritmasına sokulacak değer aşağıdaki sırayla her parametrenin arasına delimiter olarak "###" eklenerek oluşturulmalıdır
  • null değerlerin yerine empty string ("") yazılmalıdır.
{threedSecureCallbackKey}###{status}###{completeStatus}###{paymentId}###{conversationData}###{conversationId}###{callbackStatus}

Örnek olarak aşağıdaki response'u hash algoritmasına sokalım ve Üye İşyeri 3DSecure Callback Key değerinin "merchantThreeDsCallbackKeySndbox" olduğunu varsayalım.

{
    "status": "SUCCESS",
    "conversationId": "456d1297-908e-4bd6-a13b-4be31a6e47d5",
    "paymentId": 1,
    "completeStatus": "COMPLETED",
    "callbackStatus": null,
    "conversationData": null
    "hash": "ced53d5c94ee8ffc741e2e5758cd99c78444fd118d95224fef049cdda3a14dc6"
}

Hash algoritmasına sokulacak değer şu şekilde oluşmalı:

merchantThreeDsCallbackKeySndbox###SUCCESS###COMPLETED###1######456d1297-908e-4bd6-a13b-4be31a6e47d5###

Oluşturulan değerin "Üye İşyeri 3DSecure Callback Key" ile Sha-256 Hex algoritamsına sokularak hashlenmesi ile response'da bulunan "hash" parametresinin eşitliği karşılaştılarak validasyon sağlanabilir.

3D Secure Ödeme Tamamlama

Doğrulaması başarıyla gerçekleşen ödemelerde, sonucun Craftgate tarafından callbackUrl'e yapılacak istekle üye işyerine iletilmesinin ardından, üye işyerinin Craftgate API'ye bir tamamlama isteği gönderek süreci tamamlaması gerekmektedir. Bu istek yapılmadığı sürece tahsilat gerçekleşmeyecektir. Tamamlanma isteği yapılmadığı ya da doğrulama sonrası Craftgate tarafından callbackUrl'e erişilemediği için askıda kalacak ve üye işyeri panelinde sarı renkle gösterilecektir.

URL

3D Secure ödeme tamamlamak için kullanılan endpoint ve http metod bilgisi aşağıda verilmiştir.

HTTP Metod URL
POST /payment/v1/card-payments/3ds-complete

Ödeme Tamamlama İsteği Parametreleri

Doğrulama adımından başarıyla geçen ödemeler için yapılacak tamamlama isteğinin parametreleri aşağıdaki gibidir:

Parametre Adı Tipi Her Zaman Mevcut Açıklama
paymentId number Evet Ödemeye ilişkin olarak Craftgate API tarafından türetilen ve callbackUrl'e iletilen ödeme ID'si

Ödeme Tamamlama Dönüş Parametreleri

3D Secure ile yapılan ödemelerin tamamlama isteklerine verilen cevap, standart bir ödeme ile eşdeğer olup, ödemeye ilişkin detayları içerir. Bu cevabın formatı ve içerdiği parametreler için bkz. Ödeme Alma - Dönüş Parametreleri

Örnek Kodlar

Açık kaynak kodlu Craftgate API client'larındaki örnek kodları inceleyebilirsiniz.

3D Secure Ödeme Başlatma

3D Secure Ödeme Tamamlama