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 static void BankaGeriBildirimKaydet(BankRequest bankRequest)
        {
            try
            {
                using (SqlConnection baglan = new SqlConnection(ConnectionString))
                {
                    baglan.Open();
                    using (SqlCommand kmt = new SqlCommand())
                    {
                        kmt.Connection = baglan;
                        kmt.CommandText = "banka_MesajEkle";
                        kmt.CommandType = CommandType.StoredProcedure;
                        kmt.Parameters.Add("@siparisNo", SqlDbType.NVarChar);
                        kmt.Parameters["@siparisNo"].Value = bankRequest.SiparisNo;
                        kmt.Parameters.Add("@kullaniciId", SqlDbType.Int);
                        kmt.Parameters["@kullaniciId"].Value = bankRequest.KrediKart.UserId;
                        kmt.Parameters.Add("@kartAd", SqlDbType.NVarChar);
                        kmt.Parameters["@kartAd"].Value = bankRequest.KrediKart.AdSoyad;
                        kmt.Parameters.Add("@kartNo", SqlDbType.NVarChar);
                        kmt.Parameters["@kartNo"].Value = bankRequest.KrediKart.No.Substring(0, 4)
                            + "-XXXX-XXXX-" + bankRequest.KrediKart.No.Substring(12);
                        kmt.Parameters.Add("@kartCV2", SqlDbType.NVarChar);

                        kmt.Parameters["@kartCV2"].Value = string.Format("{0}**", bankRequest.KrediKart.CV2.Substring(0,1));

                        kmt.Parameters.Add("@redMesaj", SqlDbType.NVarChar);
                        kmt.Parameters["@redMesaj"].Value = bankRequest.PaymentMessage.RedMesaj;
                        kmt.Parameters.Add("@redMesajKodu", SqlDbType.NVarChar);
                        kmt.Parameters["@redMesajKodu"].Value = bankRequest.PaymentMessage.RedMesajKodu;
                        kmt.Parameters.Add("@bankaId", SqlDbType.Int);
                        kmt.Parameters["@bankaId"].Value = bankRequest.BankaId;
                        kmt.Parameters.Add("@taksit", SqlDbType.Int);
                        kmt.Parameters["@taksit"].Value = bankRequest.Taksit;
                        kmt.Parameters.Add("@toplamFiyat", SqlDbType.Money);
                        kmt.Parameters["@toplamFiyat"].Value = bankRequest.TaksitToplam;
                     
                        kmt.ExecuteNonQuery();
                    }
                }
            }
            catch (Exception ex)
            {
                LogManager.SqlDB.Write("Banka dönüş raporu kaydetme:", ex);
            }
        }
     public static void Kaydet(BankRequest bankRequest)
    {
        try
        {
            SqlParameter[] parameter = new SqlParameter[5];
            parameter[0] = new SqlParameter("@siparisId", SqlDbType.Int);
            parameter[0].Value = bankRequest.SiparisId;
            parameter[1] = new SqlParameter("@kartNo", SqlDbType.NVarChar);
            parameter[1].Value = bankRequest.KrediKart.No.Substring(0, 4) +
                   "-XXXX-XXXX-" + bankRequest.KrediKart.No.Substring(12);
            parameter[2] = new SqlParameter("@kartAd", SqlDbType.NVarChar);
            parameter[2].Value = bankRequest.KrediKart.AdSoyad;
            parameter[3] = new SqlParameter("@onayKodu", SqlDbType.NVarChar);
            parameter[3].Value = bankRequest.PaymentMessage.OnayKodu;
            parameter[4] = new SqlParameter("@referansNo", SqlDbType.NVarChar);
            parameter[4].Value = bankRequest.PaymentMessage.ReferansNo;
 
            SqlHelper.ExecuteNonQuery("siparis_OdemeBilgisi", parameter);
        }
        catch (Exception ex)
        {
            LogManager.SqlDB.Write("Sipariş Ödeme Bilgisi Kayıt: ", ex);
        }
    }
    protected void btnOdemeYap_Click(object sender, EventArgs e)
    {
        try
        {
            #region KULANICI GİRİŞ DOĞRULAMA
            StringBuilder denetim = new StringBuilder();
            if (ddlBankalar.SelectedValue.ToString() == "0")
                denetim.Append("* Lütfen Kredi Kartınızın Ait Olduğu Bankayı Seçiniz.<br/>");
            if (string.IsNullOrWhiteSpace(txtKartAdSoyad.Text))
                denetim.Append("* Lütfen Kredi Kart Üstündeki İsmi Giriniz.<br/>");
            if (string.IsNullOrWhiteSpace(txtKartNo1.Text))
                denetim.Append("* Lütfen Kredi Kart Numarası Giriniz.<br/>");
            if (string.IsNullOrWhiteSpace(txtKartNo2.Text))
                denetim.Append("* Lütfen Kredi Kart Numarası Giriniz.<br/>");
            if (string.IsNullOrWhiteSpace(txtKartNo3.Text))
                denetim.Append("* Lütfen Kredi Kart Numarası Giriniz.<br/>");
            if (string.IsNullOrWhiteSpace(txtKartNo4.Text))
                denetim.Append("* Lütfen Kredi Kart Numarası Giriniz.<br/>");
            if (ddlAy.SelectedValue.ToString() == "0")
                denetim.Append("* Lütfen Kredi Kartı Son Kullanma Tarihi Ay Olarak Seçiniz.<br/>");
            if (ddlYil.SelectedValue.ToString() == "0")
                denetim.Append("* Lütfen Yıl Seçiniz.<br/>");
            if (string.IsNullOrWhiteSpace(txtGuvenlikKodu.Text))
                denetim.Append("* Lütfen Kredi Kartı Güvenlik Kodunu Giriniz.<br/>");
            if (Request.Form["taksit"] == null )
                denetim.Append("* Lütfen Taksit Miktarı Seçiniz.<br/>");


            if (denetim.Length > 10)
            {
                Mesaj.Alert(denetim.ToString());
                return;
            }
            #endregion

            bankRequest = new BankRequest();
      
            bankRequest.KrediKart.AdSoyad = GenelFonksiyonlar.ToTitleCase(txtKartAdSoyad.Text);
            bankRequest.KrediKart.No = txtKartNo1.Text + txtKartNo2.Text + txtKartNo3.Text + txtKartNo4.Text;
            bankRequest.KrediKart.CV2 = txtGuvenlikKodu.Text;
            bankRequest.KrediKart.Ay = ddlAy.SelectedValue;
            bankRequest.KrediKart.Yil = ddlYil.SelectedValue;
            bankRequest.KrediKart.UserId = uyeId;

            bankRequest.Taksit = Convert.ToInt32(Request.Form["taksit"]);
            bankRequest.BankaId = Convert.ToInt32(ddlBankalar.SelectedValue);
            
            siparisBilgi = Request.Cookies["lensOptik"];
            siparisBilgi = HttpSecureCookie.Decode(siparisBilgi);

            bankRequest.TaksitToplam  = Convert.ToDecimal(siparisBilgi["FiyatToplam"]);

            bankRequest.SiparisNo = siparisBilgi["siparisNo"].ToString();

            if (ckbUyePuan.Checked)
            {
                UyePuan(uyeId);
                bankRequest.TaksitToplam -= uyePuan;
            }

            //Aylık taksit miktarı ve Toplam fiyat hesaplama 
            bankRequest.FiyatTaksitUygula();

          

            PaymentManager paymentManeger = new PaymentManager();
            bankRequest.PaymentMessage = paymentManeger.Process(bankRequest);

            if (bankRequest.PaymentMessage.Success)
            {
                SiparisKayit();
                Response.Redirect("~/Market/SiparisOzeti.aspx?siparisId=" + bankRequest.SiparisId.ToString() + "&islem=Kart", false);
            }
            else
            {
                MesajScript();
                Mesaj.Alert("Banka işlem dönüşü: " + bankRequest.PaymentMessage.RedMesaj);
                BankaDB.BankaGeriBildirimKaydet(bankRequest);
            }
        }
        catch (Exception hata)
        {
            MesajScript();
            Mesaj.Alert("Ödeme işlemi hata ile sonuçlandı.");
            LogManager.SqlDB.Write("Kredi kartı ile ödeme yapılırken hata oluştu", hata);
        }
    }
 public PaymentMessage Process(BankRequest bankRequest)
 {
     paymentService = PeymentServiceFactory.GetPaymentServiceFrom(bankRequest.BankaId, bankRequest.Taksit);
     return paymentService.PeymentCore(bankRequest);
 }
        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 abstract PaymentMessage PeymentCore(BankRequest bankRequest);
 public abstract PaymentMessage PeymentCore(BankRequest bankRequest, KrediKart kart);