public override PaymentMessage PeymentCore(BankRequest bankRequest, KrediKart kart)
        {
            PaymentMessage mesaj = new PaymentMessage();
            try
            {
                cc5payment mycc5pay = new cc5payment();
                mycc5pay.host = bankaApi.HostName;
                mycc5pay.name = bankaApi.ApiName;
                mycc5pay.password = bankaApi.ApiPassword;
                mycc5pay.clientid = bankaApi.ClientId;
                mycc5pay.orderresult = 0;

                if (bankRequest.Taksit > 1)
                {
                    mycc5pay.taksit = bankRequest.Taksit.ToString();
                }

                mycc5pay.bname = kart.AdSoyad;
                mycc5pay.sname = kart.AdSoyad;

                mycc5pay.cardnumber = kart.No;
                mycc5pay.cv2 = kart.CV2;
                mycc5pay.expmonth = kart.Ay;
                mycc5pay.expyear = kart.Yil.Substring(2);

                mycc5pay.subtotal = bankRequest.TaksitToplam.ToString("N");
                mycc5pay.oid = kart.SiparisNo;
                mycc5pay.currency = "949";
                mycc5pay.chargetype = "Auth";

                string result = mycc5pay.processorder();

                if (result == "1") // banka ile bağlantı sağlandı
                {
                    if (mycc5pay.appr == "Approved")
                    {
                        mesaj.Success = true;
                        mesaj.OnayKodu = mycc5pay.code;
                        mesaj.ReferansNo = mycc5pay.refno;
                    }
                    else
                    {
                        mesaj.RedMesaj = mycc5pay.errmsg;
                        mesaj.RedMesajKodu = mycc5pay.err;
                    }
                }
                else
                {
                    mesaj.RedMesaj = "Banka ile Bağlantı Kurulamadı, Lütfen tekrar deneyiniz.";
                    mesaj.RedMesajKodu = "anadoluBaglanti";
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return mesaj;
        }
        public override PaymentMessage PeymentCore(BankRequest bankRequest)
        {
            PaymentMessage mesaj = new PaymentMessage();

            string strMode = "PROD"; // gerçek ortam 
            string strVersion = "v0.01";
            string strTerminalID = "10016630"; //8 Haneli TerminalID yazılmalı.
            string _strTerminalID = "0" + strTerminalID;
            string strMerchantID = bankaApi.ClientId; //Üye İşyeri Numarası   9115910
            string strUserID = bankaApi.ApiName;//"PROVAUT";
            string strProvUserID = bankaApi.ApiName;//"PROVAUT";
            string strProvisionPassword = bankaApi.ApiPassword;//TerminalProvUserID şifresi
            string strIPAddress = HttpContext.Current.Request.UserHostAddress;

            string strOrderID = bankRequest.SiparisNo;
            string strNumber = bankRequest.KrediKart.No.Trim();
            string strExpireDate = bankRequest.KrediKart.Ay + bankRequest.KrediKart.Yil.Substring(2);
            string strCVV2 = bankRequest.KrediKart.CV2.Trim();

            string grtFiyatToplam = bankRequest.TaksitToplam.ToString("N");
            string strAmount = grtFiyatToplam.Replace(",", "").Replace(".", "").Trim();

            string strType = "sales";
            string strCurrencyCode = "949";

            string strCardholderPresentCode = "0";
            string strMotoInd = "N";
            string strInstallmentCount = "";

            if (bankRequest.Taksit != 1)
            {
                strInstallmentCount = bankRequest.Taksit.ToString();
            }


            char crNull = ' ';
            string adSoyad = bankRequest.KrediKart.AdSoyad.Trim();
            int index = adSoyad.IndexOf(crNull);
            string[] _adSoyad = new string[2];

            if (index > 1)
            {
                _adSoyad[0] = adSoyad.Substring(0, index);
                _adSoyad[1] = adSoyad.Substring(index);
            }
            else
            {
                _adSoyad[0] = adSoyad;
                _adSoyad[1] = adSoyad;
            }


            string SecurityData = GetSHA1(strProvisionPassword + _strTerminalID).ToUpper();
            string HashData = GetSHA1(strOrderID + strTerminalID + strNumber + strAmount + SecurityData).ToUpper();

            string strXML = null;

            strXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<GVPSRequest>" + "<Mode>" + strMode + "</Mode>" + "<Version>" + strVersion + "</Version>" + "<Terminal><ProvUserID>" + strProvUserID + "</ProvUserID><HashData>" + HashData + "</HashData><UserID>" + strUserID + "</UserID><ID>" + strTerminalID + "</ID><MerchantID>" + strMerchantID + "</MerchantID></Terminal>" + "<Customer><IPAddress>" + strIPAddress + "</IPAddress><EmailAddress></EmailAddress></Customer>" + "<Card><Number>" + strNumber + "</Number><ExpireDate>" + strExpireDate + "</ExpireDate><CVV2>" + strCVV2 + "</CVV2></Card>" + "<Order><OrderID>" + strOrderID + "</OrderID><GroupID></GroupID><AddressList><Address><Type>S</Type><Name>" + _adSoyad[0] + "</Name><LastName>" + _adSoyad[1] + "</LastName><Company></Company><Text></Text><District></District><City></City><PostalCode></PostalCode><Country></Country><PhoneNumber></PhoneNumber></Address></AddressList> <CommentList><Comment><Number>1</Number><Text>" + KulaniciAdiKes(bankRequest.KrediKart.AdSoyad) + "</Text></Comment></CommentList></Order>" + "<Transaction>" + "<Type>" + strType + "</Type><InstallmentCnt>" + strInstallmentCount + "</InstallmentCnt><Amount>" + strAmount + "</Amount><CurrencyCode>" + strCurrencyCode + "</CurrencyCode><CardholderPresentCode>" + strCardholderPresentCode + "</CardholderPresentCode><MotoInd>" + strMotoInd + "</MotoInd>" + "</Transaction>" + "</GVPSRequest>";



            try
            {
                string data = "data=" + strXML;

                WebRequest _WebRequest = WebRequest.Create(bankaApi.HostName);
                _WebRequest.Method = "POST";

                byte[] byteArray = Encoding.UTF8.GetBytes(data);
                _WebRequest.ContentType = "application/x-www-form-urlencoded";
                _WebRequest.ContentLength = byteArray.Length;

                Stream dataStream = _WebRequest.GetRequestStream();
                dataStream.Write(byteArray, 0, byteArray.Length);
                dataStream.Close();

                WebResponse _WebResponse = _WebRequest.GetResponse();
                dataStream = _WebResponse.GetResponseStream();

                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();

                //GVPSResponse XML'in değerlerini okuma.
                string XML = responseFromServer;
                XmlDocument xDoc = new XmlDocument();
                xDoc.LoadXml(XML);

                XmlElement ReasonCode =
                    xDoc.SelectSingleNode("//GVPSResponse/Transaction/Response/ReasonCode") as XmlElement;
                XmlElement Message =
                    xDoc.SelectSingleNode("//GVPSResponse/Transaction/Response/Message") as XmlElement;


                if (ReasonCode.InnerText == "00")
                {
                    XmlElement xElemRetrefNum = xDoc.SelectSingleNode("//GVPSResponse/Transaction/RetrefNum") as XmlElement;

                    XmlElement xElemAuthCode = xDoc.SelectSingleNode("//GVPSResponse/Transaction/AuthCode") as XmlElement;

                    mesaj.Success = true;
                    mesaj.OnayKodu = xElemAuthCode.InnerText;
                    mesaj.ReferansNo = xElemRetrefNum.InnerText;
                }
                else
                {
                    XmlElement ErrorMsg = xDoc.SelectSingleNode("//GVPSResponse/Transaction/Response/ErrorMsg") as XmlElement;
                    XmlElement SysErrMsg = xDoc.SelectSingleNode("//GVPSResponse/Transaction/Response/SysErrMsg") as XmlElement;

                    mesaj.RedMesaj = ErrorMsg.InnerText;
                    mesaj.RedMesajKodu = SysErrMsg.InnerText;
                }

                return mesaj;
            }
            catch (WebException)
            {
                mesaj.RedMesaj = "Banka ile Bağlantı kurulamadı lütfen tekrar deneyiniz.";
                mesaj.RedMesajKodu = "Bağlantı Hatası";
                return mesaj;
            }
            catch (Exception)
            {
                throw;
            }
        }
        public override PaymentMessage PeymentCore(ModelLayer.BankRequest bankRequest)
        {
            PaymentMessage mesaj = new PaymentMessage();

            C_Posnet posnetObj = new C_Posnet();
            posnetObj.SetMid(bankaApi.ClientId);
            posnetObj.SetTid(bankaApi.ApiName);
            posnetObj.SetURL(bankaApi.HostName);

            // Yapı Kredi Bilgi Formatı
            string tarihYil = bankRequest.KrediKart.Yil.Substring(2) + bankRequest.KrediKart.Ay;

            // Yapı Kredi Toplam Fiyat İşlemi
            string ykbtaksitToplam = bankRequest.TaksitToplam.ToString("c");
            ykbtaksitToplam = ykbtaksitToplam.Replace("TL", "");
            ykbtaksitToplam = ykbtaksitToplam.Replace(",", "");
            ykbtaksitToplam = ykbtaksitToplam.Replace(".", "");

            string taksit = null;
            if (bankRequest.Taksit.ToString() == "01")
            {
                taksit = "00";
            }
            else
            {
                taksit = bankRequest.Taksit.ToString();
            }

            bankRequest.KrediKart.AdSoyad = string.Format("{0}-", BusinessLayer.UrlTR.Replace(bankRequest.KrediKart.AdSoyad));

            //Ad Soyad için kalan alan
            int nNameLastIndex = (23 - bankRequest.SiparisNo.Length);

            for (int i = bankRequest.KrediKart.AdSoyad.Length; i < nNameLastIndex; i++)
            {
                bankRequest.KrediKart.AdSoyad += "0"; 
            }

            if (bankRequest.KrediKart.AdSoyad.Length > nNameLastIndex)
            {
                bankRequest.KrediKart.AdSoyad = bankRequest.KrediKart.AdSoyad.Substring(0, nNameLastIndex);
            }

            bankRequest.SiparisNo = string.Format("{0}-{1}", bankRequest.KrediKart.AdSoyad, bankRequest.SiparisNo);

            Boolean baglanti = posnetObj.DoSaleTran(bankRequest.KrediKart.No, tarihYil, bankRequest.KrediKart.CV2, bankRequest.SiparisNo, ykbtaksitToplam, "YT", taksit, "", "");

            if (baglanti == false)
            {
                mesaj.RedMesaj = "Banka ile Bağlantı Kurulamadı, Lütfen tekrar deneyiniz.";
                mesaj.RedMesajKodu = "yapikerediBaglanti";
            }
            if (posnetObj.GetApprovedCode() == "1")
            {
                if (posnetObj.GetAuthcode().ToString().Trim() != "" && posnetObj.GetHostlogkey().ToString().Trim() != "")
                {
                    mesaj.Success = true;
                    mesaj.OnayKodu = posnetObj.GetAuthcode();
                    mesaj.ReferansNo = posnetObj.GetHostlogkey();
                }
            }
            else if (posnetObj.GetApprovedCode() == "2")
            {
                mesaj.RedMesaj = "Kredi kartı ile ödeme  işlemini daha önce yapıldı. <br/> Resptext: " + posnetObj.GetResponseText();
                mesaj.RedMesajKodu = posnetObj.GetResponseCode();
            }
            else
            {
                #region Yapı Kredi Hata Mesajları
                string hataKodu = posnetObj.GetResponseCode();
                string hataMesaji = posnetObj.GetResponseText();
                mesaj.RedMesajKodu = posnetObj.GetResponseCode();

                if (hataKodu.Trim() == "0095")
                {
                    mesaj.RedMesaj = "* Hata Mesajı: " + posnetObj.GetResponseText() + "<br/>* Kart bilgilerinden ( KK No, SKT, CVV) biri yada birkaçı hatalı girilmiş veya Worldcard'lar için bankaca tanımlanmış günlük limitler aşılmış olabilir.";
                }
                else if (hataKodu.Trim() == "150")
                {
                    mesaj.RedMesaj = "* Yanlış CVC no hatası.";
                }
                else if (hataKodu.Trim() == "0213")
                {
                    mesaj.RedMesaj = "* Hata Mesajı: " + hataMesaji + "<br/>* Kartın bakiyesi yetersiz. Kartı veren bankayı arayın.";
                }
                else if (hataKodu.Trim() == "0220")
                {
                    mesaj.RedMesaj = "* Hata Mesajı: " + hataMesaji + "<br/>* Taksitli işlemler ancak 1 YTL'nin üstündeki tutarlarla yapılabilirler.";
                }
                else if (hataKodu.Trim() == "0225")
                {
                    mesaj.RedMesaj = "* Hata Mesajı: " + hataMesaji + "<br/>* Kart no hatalı";
                }
                else if (hataKodu.Trim() == "0400")
                {
                    mesaj.RedMesaj = "* Hata Mesajı: " + hataMesaji + "<br/>* Posnet sunucu teknik bir sorun yaşıyor. Lütfen tekrar deneyin.";
                }
                else if (hataKodu.Trim() == "0551")
                {
                    mesaj.RedMesaj = "* Hata Mesajı: " + hataMesaji + "<br/>* Numara bir kredi kartına ait değil.";
                }
                else if (hataKodu.Trim() == "131")
                {
                    mesaj.RedMesaj = "* Hata Mesajı: " + hataMesaji + "<br/>* Kart no bilgisi hiçbir boşluk içermeden 4912065000461139 şeklinde gönderilmelidir.";
                }
                else if (hataKodu.Trim() == "139")
                {
                    mesaj.RedMesaj = "* Hata Mesajı: " + hataMesaji + "<br/>* Kredi kartı güvenlik numarası (CVC) parametre hatalı.";
                }
                else if (hataKodu.Trim() == "0800")
                {
                    mesaj.RedMesaj = "* Resptext: " + hataMesaji + "<br/>* işlemde kullanılan kredi kartının YKB provizyon sisteminde tutulan çalıntı kredi kartı listesinde bulunmasıdır.";
                }
                else if (hataKodu.Trim() == "0876")
                {
                    mesaj.RedMesaj = "* Hata Mesajı: " + hataMesaji + "<br/>* Kart bilgilerinden ( KK No, SKT, CVV) biri yada birkaçı hatalı girilmiş veya Worldcard'lar için bankaca tanımlanmış günlük limitler aşılmış olabilir.";
                }
                else if (hataKodu.Trim() == "0877")
                {
                    mesaj.RedMesaj = "* CVC no girilmeli";
                }
                else if (hataKodu.Trim() == "0995")
                {
                    mesaj.RedMesaj = "* Hata Mesajı: " + hataMesaji + "<br/>* Kartı veren  banka ile iletişimde zaman aşımı oldu (bankadan zamanında yanıt alınamadı). Lütfen Tekrar deneyin.";
                }
                else if (hataKodu.Trim() == "0100")
                {
                    mesaj.RedMesaj = "* Resptext: " + hataMesaji + "<br/>* Banka sistemlerimizde anlık sorunlar olduğundan. Lütfen tekrar deneyin.";

                }
                else if (hataKodu.Trim() == "0173")
                {
                    mesaj.RedMesaj = "* Hata Mesajı: " + hataMesaji + "<br/>*  işlemde kullanılan kredi kartının internetten işlem yapma yetkisi bulunmamaktadır. <br/> Kredi kartını aldığı bankanın kredi kartları servisiyle görüşüp kredi kartını e-ticarette kullanamadığını belirtiniz.";
                }
                else
                {
                    mesaj.RedMesaj =  "* Ödeme İşlemi Yapılırken Bankadan Hata Mesajı Döndü.<br/> Hata Mesajı: " + hataMesaji + "<br/>Hata kodu: " + hataKodu;
                }
                #endregion
            }
            return mesaj;
        }