Asp.Net Core 1.0 vs. Asp.Net 4.6

51 views
Skip to first unread message

İbrahim Bener

unread,
May 31, 2016, 4:51:14 AM5/31/16
to bnr...@googlegroups.com
Asp.Net Core: 1.15 million request/s
Node.js: 150k request/s
Asp.Net 4.6: 50k request/s

Tufan Dayi

unread,
Jun 7, 2016, 8:06:44 AM6/7/16
to bnr...@googlegroups.com
Merhabalar,

Öncelikle hayırlı ramazanlar. Allah hayırlısıyla tekrarını nasip etsin inşallah.

Elinde sağlam ve yakın zaman da denenmiş xml ve 3d için hangi banka olduğu fark etmez sanal pos entegrasyonlarına ait kod, doküman olan varsa paylaşabilir mi?

Teşekkürler.

Tufan.

Yilmaz Kirlikaya

unread,
Jun 7, 2016, 8:12:22 AM6/7/16
to bnr...@googlegroups.com
Teb, garanti, ziraat, halk, yapikredi, isbank, finans 3d_pay yontemiyle hazirda calisan php kodlari var. Yalnizca paylasmak yetmez, mutlak surette anlatilmasi gereken noktalar var. 

Ofisteyim beklerim.

iPhone'umdan gönderildi

7 Haz 2016 tarihinde 15:06 saatinde, Tufan Dayi <td...@hotmail.com> şunları yazdı:

--
Bu iletiyi Google Grupları'ndaki "bnr_net" grubuna abone olduğunuz için aldınız.
Bu grubun aboneliğinden çıkmak ve bu gruptan artık e-posta almamak için bnr_net+u...@googlegroups.com adresine e-posta gönderin.
Daha fazla seçenek için https://groups.google.com/d/optout adresini ziyaret edin.

Yilmaz KIRLIKAYA

unread,
Jun 7, 2016, 12:15:16 PM6/7/16
to bnr...@googlegroups.com

Konu aslında mail ile aktarılacak kadar basit değil ama dilim döndüğünce anlatmaya çalışayım;

 

3d_pay’in getirdiği temel farklılık tahsilat sürecinde kart sahibinden onay almak için SMS mesajının devreye girmesi. Teknik olarak standart SSL ile tahsilat yönteminde kart numarası-cvc kodu ve son kullanma tarihini bilmeniz tahsilat için yeterliydi. Takdir edersiniz ki bu 3 bilgiyle yapılan alışverişler güvensiz ve riskli. Buna engel olabilmek adına bankacılar araya müşterinin (kart sahibi) onayı da devreye alabilmek için 3d yöntemi üzerinde yoğunlaştılar, kısa süre sonra eski tip SSL tahsilat yöntemi tümüyle devre dışı bırakılacak.

 

Birçok banka 3d_pay yöntemiyle çalışıyorum. Bankaların birçoğu bu işi outsource etmişler. Asseco diye bir firma nerdeyse bankaların %90’ına bu konuda hizmet veriyor. Siz bir bankayla çalışmaya başladığınızda ilk başlangıçta banka ile muhatapsınız, devamında Asseco devreye giriyor ve işin teknik kısmını Asseco ile hallediyorsunuz. Eğer çalışacağınız banka Asseco ile bu işi yürütüyorsa API aynı olduğu için hızlıca diğer bankaya da uygulayabiliyorsunuz.

 

Süreç kabaca şöyle işliyor;

1.       Web sitenizde sanal pos tahsilatını yapmak istediğiniz banka ve bankalarla görüşerek sanal pos alım sürecini başlatıyorsunuz. Bu süreçte banka sizden bir form doldurmanızı istiyor. Bu formda ip adresi, döviz cinsi, kodlama dili, site adresi vs vs. bilgiler isteniyor. Burada mağazanızda kullanmak istediğiniz modeli belirlemeniz isteniyor. Ben 3D_PAY modeli üzerinde çalıştım.

2.       Banka başvurunuzu kabul ettikten sonra size mağaza no, kullanıcı adı, şifre ve bir adres gönderiyor. Gönderdiği adrese mağaza no, kullanıcı ve şifre ile giriş yaptıktan sonra bankanın sanal pos yönetim ekranına düşüyorsunuz. Burada dikkat etmeniz gereken ilk adım; bankanın size ilk gönderdiği kullanıcı admin kullanıcısı, arayüz üzerinden bir API kullanıcısı oluşturmak gerekiyor ki bu kullanıcı web sitenizde kullanacağınız kullanıcı adı ve şifre olacak. Ayrıca burada benim zor ve zahmetli tecrübelerle öğrendiğim birkaç nokta daha var. Hangi alanların mecbur olması gerektiği alanı. Örneğin fatura adresi mecbur post edilecek mi alanı evet ise ve siz sitenizden bu bilgiyi göndermiyorsanız post paketi onaylanmıyor. Bu aşamada ayrıca bir de storekey oluşturmanız gerekiyor. Bu POST verisini gönderirken kullanacağımız hash için bir tür mağaza şifresi.

3.       Bankanın sanal pos yönetim sayfasından indirdiğiniz dokümanlar içinde bankanın testlerde kullanmanız için verdiği sanal test kart bilgileri geliyor ama ben test aşamasında bunları kullanmanızı tavsiye etmem, kendi kartınızdan 1 TL’lik tahsilatlarla test etmenizi öneririm. Zira bu test kartlarında limit çok hızlı tükenebiliyor. Malum bu test kartlarını sizler gibi onlarca kişi kullanıyor. Sizde neden bu tahsilat gerçekleşmiyor diye saçınızı başınızı yoluyorsunuz. Neticede bankanın sanal pos arayüzü sizde. Tahsilatları işgünü bitmeden kendi kartınıza iade etmek de sizin elinizde.

4.       Web sitesi ara yüzünden topladığınız bilgileri bankanın da eklediği birkaç bilgi ile birlikte birleştirip bir post içinde gönderiyorsunuz. Post verisini gönderirken hangi adrese gideceği, hatalı durumda hangi adrese döneceği, başarılı durumda hangi adrese döneceği bilgilerini post ediyorsunuz. Bankanız aldığı post paketini kredi kartının bağlı olduğu bankaya gönderiyor. Kredi kartının bağlı olduğu bankada kayıtlı kart sahibinin cep telefonuna kısa mesajla paranın tahsil edilmek istendiği bilgisi düşüyor. Kişi cep telefonuna gelen mesajdaki kodu kart sahibi bankanın ekranına giriyor. Kod onaylanırsa ve kart müsaitse para tahsil ediliyor ve tahsil edildi bilgisi talebi yapan bankaya iletiliyor. Talebi yapan bankada onay bilgileriyle beraber son kullanıcıya bir xml gönderiyor.

5.       Biz bu XML içinden approved alanına bakarak işlemin gerçekleşip gerçekleşmediğini anlıyoruz. Bu XML i parse edip ilgili alanları ekrana bastırıyoruz.

 

Aşağıda PHP ile bunun nasıl yürüdüğünün kodları var.

 

1. Aşama Bankaya gidecek hash paketini oluşturma

 

1.       $clientId = "400XXXXXX";

2.       $oid = "";            

3.       $amount =intval($_POST["toplam_borc"]);

4.       $okUrl = "https://siteadresiniz/OdemeSonuc.php"; 

5.       $failUrl = "https://siteadresiniz/OdemeSonuc.php";

6.       $rnd = microtime();

7.       $taksit = $_POST["taksit"];        

8.       $islemtipi="Auth";

9.       $storekey = "TRPSXXXX";

10.  $hashstr = $clientId . $oid . $amount . $okUrl . $failUrl .$islemtipi. $taksit  .$rnd . $storekey;

11.  $hash = base64_encode(pack('H*',sha1($hashstr)));

 

1.       Bankadan size gelen mağaza no

2.       Önemli bir alan değil bir tür unique id. Siz üretmezseniz banka sizin adınıza üretiyor.

3.       Para Miktarı (Kuruş kabul eder, decimal kısım için . (nokta) ister)

4.       İşlem sonucu başarılı ise dönülecek sayfa.

5.       İşlem sonucu başarısız ise dönülecek sayfa.

a.       Ben burda her ikisini de aynı sayfaya yönlendiriyorum. Sayfanın içinde if (sonuç==approved) ile başarılı ve başarısız durumlarına göre sayfayı hazırlıyorum. Tercih sizin.

6.       Zamana bağlı bir random değer üretiyor.

7.       Taksit sayısı. (Taek çekim yapacaksanız 1 değerini göndermeyin. Boş gönderin. Aksi takdirde hata alıyorsunuz)

8.       Kartla yapmak istediğiniz işlem türü. Auth=Direk Satış, bunun yerine provizyon veya ön satışta mümkün.

9.       Storekey banka sanal pos ara yüzü üzerinden sizin oluşturduğunuz key.

10.   Hash Stringi yukarıdaki 8 değeri birleştirerek oluşturulan bir string.

11.   Yukarıda oluşturulan stringin hash hali.

 

2. Aşama verinin bankaya post edilmesi

 

<form method="post" action="https://sanalpos.teb.com.tr/fim/est3Dgate">

 

(1. KISIM)

<input type="hidden" name="storetype" value="3d_pay"/>

<input type="hidden" name="lang" id="lang" value="tr"/>

<input type="hidden" name="currency" id="currency" value="949"/>

 

(2. KISIM)

<input type="hidden" name="clientid" id="clientid" value="<? echo $clientId?>"/>

<input type="hidden" name="amount" id="amount" value="<?  echo $amount?>"/>

                <input type="hidden" name="oid" id="oid" value="<? echo $oid?>"/> 

                <input type="hidden" name="okUrl" id="okUrl" value="<? echo $okUrl?>"/>

                <input type="hidden" name="failUrl" id="failUrl" value="<? echo $failUrl?>"/>

                <input type="hidden" name="rnd" id="rnd" value="<? echo $rnd?>"/>

                <input type="hidden" name="hash" id="hash" value="<? echo $hash?>"/>

                <input type="hidden" name="islemtipi" id="islemtipi" value="<? echo $islemtipi?>"/>

                <input type="hidden" name="taksit" id="taksit" value="<? echo $taksit?>"/>

               

                (3. KISIM)           

<select name="cardType" id="cardType”>

                                <option value="1">Visa</option>

                               <option value="2">Master</option>

                </select>

<input type="text" name="CCCardName" id="CCCardName">

<input type="text" name="pan" id="pan" maxlength="16">

<select name="Ecom_Payment_Card_ExpDate_Month" id="Ecom_Payment_Card_ExpDate_Month">

                <option value=”01”>Ocak</option>

                …

                <option value=”12”>Aralık</option>

</select>

<select name="Ecom_Payment_Card_ExpDate_Year" id="Ecom_Payment_Card_ExpDate_Year">

                <option value”2016”>2016</option>

                …

                <option value”2026”>2026</option>

</select>

<input type="text" name="cv2" id="cv2" maxlength="3">

 

                (4. KISIM)

<input type="hidden" name="SonId" value="<? echo $SonId?>">

</form>

 

Yukarıdaki form verisinde bankaya giden değişkenler var. Her bankanın kendisine gelmesini istediği değişkenler özünde aynı olmakla birlikte adları değişebiliyor. Örneğin Son kullanma ayını bazı bankalar Ecom_Payment_Card_ExpDate_Month şeklinde isterken bazıları ExpMonth olarak isteyebiliyor. Bunu kendi API dokümanında anlatıyor.

 

Formu kabaca 4 parçada anlatayım.

1.       KISIM : Bankanın POST verisinde istediği özel alanlar : store_type; mağaza satış modeli, curreny; para birim 949 TL; lang; dil gibi.

2.       KISIM : Hash oluşturmakta kullandığımız alanların post verisine eklenmesi

3.       KISIM : Arayüzden alacağımız değerler.

4.       KISIM : Size özel göndereceğiniz değerler. Burası önemli !!!. Post paketi taşınırken bu veride taşınıyor ve işlem sonucunda bu veride size dönüyor. Burada olabilidiğince az bilgi taşıyın ve olabildiğince numeric alan taşıyın. Zira verinin Türkçe karakter kaybı, ver kaybı gibi şeylerle karşılaşmanız mümkün. Denizbank ta gönderilen string alanlar içindeki Türkçe olarak gönderdiğim “Doğubeyazıt” verisinin “Do?ubeyaz?t” olarak döndüğünü gördüm. Ben veriyi göndermeden önce bir temp tabloya basıp o temp tablodaki Id yi bankaya gönderiyorum. Geri dönüşte de bendeki temp tablonun o ID sini isteyip bendeki temiz veriye ulaşıyorum. Belki içerde bir sefer daha veri tabanı işlemi yapıyorum diye kızanlarınız olacaktır ama bu tür para bazlı işlemlerde sağlamcı olmak lazım.  J

 

Aslında bu bilgilere eklenmesi gereken birkaç başlık daha var;

                Taksitlendirme süreci,

                BIN (ilk 6 hane) numarası ile banka tespiti ve taksit sürecinin bankaya göre seçtirilmesi

                Bonus Puan kullanımı ile tahsilat.

 

İnşallah bunlarda başka bir maile.

 

Umarım bilgiler işinize yarar.

Takılırsanız çalışan sistemlerden herhangi biri üzerinde testler yapmak ve kodu incelemek için beklerim.

 

 

Saygılarımla/Best Regards;

 

Yılmaz KİRLİKAYA

NBT Teknoloji Danışmanlık Ltd. Şti.

Meksika Caddesi No : 27/18 Ümitköy ANKARA

E-Posta : yil...@nbt.com.tr

Tel : 0.312.256 0 251

Faks : 0.312.236 0 177

Cep : 0.532.294 97 09

--

Tufan Dayi

unread,
Jun 7, 2016, 1:51:41 PM6/7/16
to bnr...@googlegroups.com
Abi eline sağlık çok teşekkür ederim.

iPhone'umdan gönderildi

7 Haz 2016 tarihinde 19:15 saatinde, Yilmaz KIRLIKAYA <yil...@nbt.com.tr> şunları yazdı:

Reply all
Reply to author
Forward
0 new messages