3D Sanal Pos Entegrasyonu Asp.net

Daha önce çoğu bankanın normal (3d olmayan) sanal pos entegrasyonunu paylaşmıştım. 3d sanal pos entegrasyonu ile ilgili sizlerden çok fazla mesaj aldım. Fakat zaman bulup bunun için makale yazamadım. Bunun için hala zaman bulamıyorum. Bu konuyla alakalı alinaciarbak.com.tr çok güzel makale hazırlamış. Bilgi paylaştıkça çoğalır. Ben de bu makaleyi sizler için paylaşmak istedim. Aşağıda işinize yarayacak bilgileri bulabilrsiniz.

 

ArbakCCLib – Tanıtım

Hazırladığım kütüphane aşağıdaki 3 firmanın sanal pos hizmetlerini desteklemektedir:

EST (Akbank, İş Bankası, Halkbank, Finansbank) – İşyeri Tipi: 3D Pay
GVP (Garanti) – İşyeri Tipi: 3D Pay
YKB (Yapı Kredi)

Kütüphane kaynak kodlarını ve örnek proje dosyalarını buraya tıklayarak indirebilirsiniz.

ArbakCCLib – Kütüphane Hiyerarşisi

PosInfo Sınıfı

Bankaların pos bilgilerinin tanımlandığı sınıftır. EST bankaları için entity, GVP ve YKB bankaları için taban sınıf vazifesi görmektedir.
GarantiPosInfo ve YKBPosInfo sınıfları bu sınıftan türemektedir. Her iki sınıf da ilgili bankalar için gerekli özel bilgileri barındırır.

 

PosForm Sınıfı
Ödeme talebi gönderilirken alıcının kart bilgilerini, çekim yapılacak tutarı ve taksit sayısını sarmalayan sınıftır.

 

CCHelperBase Sınıfı
Banka pos sistemleriyle iletişim kuran sınıfların taban sınıfıdır. Request ve Confirm olmak üzere 2 aşamalı ödeme sistemi sunmaktadır.

 

IReceiverBank Interface’i
3 aşamalı ödeme sistemine sahip olan poslar için hazırlanan arayüzdür. Yalnızca YKB posu 3 aşamalı ödeme sistemine sahiptir.

 

CCManager Sınıfı
Client tarafın iletişim kuracağı yönetici sınıftır. Tüm işlemler bu sınıf üzerinden ilgili helper sınıflara iletilir.

 

ArbakCCLib – Entegrasyon – Aşama 1: Pos Bilgilerinin Tanımlanması

Pos işlemlerini yapmaya başlamadan önce kullanacağınız bankaların pos bilgilerini tanımlamanız ve singleton yapısındaki CCManager sınıfının instance’ını oluşturmanız gerekmektedir. Bu işlemleri yapmak için tavsiyem(benim de kullandığım) singleton yapısında bir Front sınıfı oluşturmanızdır.

 

Bu işlem için kullanacağımız sınıfın temel hali aşağıdaki gibi olacaktır:

 

CCManager instance’ını oluşturmadan önce kullanacağımız posların bilgilerini tanımlamamız ve bunları bir liste içinde barındırmamız gerekmektedir. Ben örnek olarak bir adet EST, GVP ve YKB posu oluşturacağım. Bu işlem Front sınıfının private constructor’ında yapılacaktır. EST bankaları için PosInfo sınıfından, Garanti bankası için GarantiPosInfo sınıfından ve Yapı Kredi bankası için YKBPosInfo sınıfından nesne oluşturulacaktır. Sanal pos test bilgilerini bankanızdan talep etmeniz gerekmektedir.

 

Bu bölümde yer alan BankName ve Name kısımlarının doldurulması opsiyoneldir.

PosInfo listemizi oluşturduğumuza göre CCManager instance’ımızı oluşturabiliriz. Bunun için önce Front class’ımızda CCManager field’ını oluşturuyoruz:

 

Ve private constructor’ımızda instance’ı oluşturmak için CCManager.CreateInstance methodunu çağırıyoruz. CreateInstance methodu 4 argümana sahiptir.
1. Argüman, ödeme işlemi başarılı olduğunda döneceği adres.
2. Argüman, ödeme işlemi başarısız olduğunda döneceği adres.
3. Argüman, 3 aşamalı ödemeye sahip bankalar için(YKB) receive adresi.
4. Argüman, oluşturduğumuz PosInfo listesi.

Ben, kendi adreslerimle birlikte CreateInstance methodunu çağırıyorum:

 

 

 

Front sınıfımın son hali şu şekilde olacaktır:

 

 

Pos tanımlamaları bu kadar.

 

ArbakCCLib – Entegrasyon – Aşama 2: Ödeme Talebinin Gönderilmesi

Bu aşamada, ödeme talebi gönderebilmek için örnek bir sayfa oluşturacak, adını Payment.aspx koyacağım. Normal bir web uygulamasında olacağı şekilden ziyade, kredi kartı, cvc vb. bilgileri textboxlardan alıp button click event’iyle ödeme işlemini tetikletmek yerine, bu işlemleri Page_Load event’inde gerçekleştireceğim. Siz, yazdığım kodları kendi uygulama yapınıza göre rahatlıkla düzenleyebilirsiniz.

Öncelikle bir adet PosForm nesnesi oluşturarak alıcının kart bilgilerini, çekilecek tutarı ve taksit sayısını sarmalamamız gerekmektedir. Ben bu örneğimde Akbank’ın(EST) test kart bilgilerini kullanarak EST üzerinden ödeme işlemi gerçekleştireceğim.Ödeme 10 TL tutarında, tek çekim olacaktır.

PosForm nesnesini oluştururken 20 haneli bir sipariş numarası tanımlamanız gerekmektedir. Ben kendim rastgele sayılar oluşturarak sipariş numarasını tanımlayacağım.

 

 

SMS onaylama sayfasında girmeniz gereken şifre: a

Ödeme bilgilerini sarmaladıktan sonra CCManager sınıfının SendPayment metodunu kullanarak ödeme talebinde bulunabiliriz.

SendPayment metodu 2 adet overload’a sahiptir. Birinci overload Banks enum’ını kullanarak talepte bulunmayı, ikinci overload Banks enum’ında ilgili bankaya karşılık gelen sayıyla talepte bulunmayı sağlar.

Birinci overload:
Front.Controller.CCManager.SendPayment(this.Context, posForm, ArbakCCLib.ENTITY.ENUMS.Banks.AKBANK);

 

İkincioverload:

 

Page_Load event’imizin son hali aşağıdaki gibi olacaktır:

 

ArbakCCLib – Entegrasyon – Aşama 3: Ödeme Talebinin Yönlendirilmesi

Bu aşama yalnızca Yapı Kredi bankasının entegrasyonu için geçerlidir. EST ya da GVP entegrasyonu yapacaksanız bu aşamayı atlayabilirsiniz.

ReceivePayment.aspx adında bir sayfa oluşturuyor ve querystringlerde banka ve şipariş numarası bilgilerinin boş gelmediğini doğruluyoruz. Bu koşulun sağlanması durumunda CCManager sınıfımızın ReceivePayment metodunu kullanarak ödememizi yönlendiriyoruz.

ReceivePayment.aspx sayfasında yer alan Page_Load event’imizin son hali aşağıdaki gibi olacaktır:

 

 

ArbakCCLib – Entegrasyon – Aşama 4: Ödeme Talebinin Onaylanması

Son aşamamızda gerçekleştirilmesi istenen ödemenin banka tarafından onaylanıp onaylanmadığını kontrol ediyoruz.

Bu işlem için PaymentConfirm.aspx adında bir sayfa oluşturuyor ve querystringlerde banka ve sipariş numarası bilgilerinin boş gelmediğini doğruluyoruz. Bu koşulun sağlanması durumunda CCManager sınıfımızın ConfirmPayment metodunu kullanarak ödememizi doğruluyoruz.

ConfirmPayment metodu bize PaymentResult türünden bir nesne döndürecektir. Bu nesnenin 4 adet özelliği bulunmaktadır:

Result(bool): Ödeme işleminin doğrulandığı/doğrulanmadığı bilgisi
Description(string): Ödeme işlemi sonucu (Doğrulanamadıysa hata mesajı)
OrderID(string): Sipariş numarası
TransID(string): İşlem doğrulandıysa banka tarafındaki işlem ID’si.
Son olarak ödeme işleminin doğrulanması durumunda ekrana işlem ID’sini, doğrulanamadıysa hata mesajını yazdırıyorum. PaymentConfirm sayfasında yer alan Page_Load event’imizin de son hali aşağıdaki gibi olacaktır:

 

Eğer ödeme işlemi, PaymentConfirm sayfasına ulaşamadan banka tarafından reddedildiyse; banka, kullanıcıyı CCManager instance’ını oluştururken verdiğiniz failURL parametresindeki adrese yönlendirecektir. Ben bunun için PaymentFail.aspx adında bir sayfa oluşturuyorum. Banka tarafından sayfamıza post edilen hata mesajını “errmsg” index’inden almaktayız.

Ben, örnek uygulamada bankanın yönlendirdiği hata mesajını ekrana yazdırıyorum:

 

ArbakCCLib – Test Ortamından Üretim Ortamına Geçiş

Bu örneğimde yalnızca Akbank’ın test kart bilgilerini paylaştım. Diğer test kartları için bankanızın sanal pos destek hattına başvurabilirsiniz. Eğer geliştireceğiniz projede yalnızca EST’den hizmet almakta olan bankaları kullanacaksanız şanslısınız, EST’nin teknik destek bölümüne de buradan teşekkürlerimi iletiyorum.

Kütüphaneyi geliştirmekte olduğunuz uygulamanıza entegre edip testlerinizi gerçekleştirdikten ve başarılı sonuçlar aldıktan sonrasında yapmanız gereken tek şey PosInfo nesnelerini ve CCManager instance’ını oluştururken kullandığınız test bilgilerini ve adreslerini gerçek bilgilerle değiştirmek.

 

Kaynak : http://www.alinaciarbak.com.tr/asp-net-3d-sanal-pos-entegrasyonu/

562 okunma

BENZER MAKALELER

2 Yorum

  1. merhaba hocam yapıkredi sanalpos kullanıyorum verdiğiniz dökümanla yaptım sistemi

    sms onay kodu geliyor ondan sonra

    “XID: 77777777777777777777 Amount: 1000 WPAmount: 1000 Currency: TL ApprovedCode: 0 AuthCode: HostLogKey: RespCode: 0003 RespText: 148 MID,TID,IP HATALI: 31.186.23.80 Point: PointAmount: TotalPoint: TotalPointAmount: InstalmentNumber: InstalmentAmount: VftAmount: VftDayCount:”

    böyle bi hata alıyorum

    bankayla görüştüm banka bu gönderdiğim bilgilerin test ortamına gittiğini söyledi

    aslında gönderdiğim ortam gerçek ortam

    ve xml sayfasına göndermemi söyledilelr orayada gönderince 0003 hatası alıyoruz.

    bunda xml olarak gönderme şansımız yok mu ?

    1. aldığınız 0003 hatasının ne olduğunu öğrenirseniz ona göre bir yol izleyebilirsiniz. Banka hata mesajlarını açık gördüğü için onlarla temas halinde olmanız daha iyi olacaktır.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak.

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">