/// <summary>
        /// Token ile Kart Bilgileri Güncelleme
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public PaymentResponse UpdatePan(VposRequest input)
        {
            #region Pos Configuration
            string strHostAddress = input.ServiceUrl;
            #endregion

            byte[] postByteArray = Encoding.UTF8.GetBytes(input.ToStringByUpdateToken());

            ServicePointManager.ServerCertificateValidationCallback = delegate { return(true); };
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | (SecurityProtocolType)768 | (SecurityProtocolType)3072 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

            WebRequest webRequest = WebRequest.Create(strHostAddress);
            webRequest.Method                = "POST";
            webRequest.ContentType           = "application/x-www-form-urlencoded";
            webRequest.ContentLength         = postByteArray.Length;
            webRequest.UseDefaultCredentials = true;

            Stream dataStream = webRequest.GetRequestStream();
            dataStream.Write(postByteArray, 0, postByteArray.Length);
            dataStream.Close();

            WebResponse webResponse = webRequest.GetResponse();
            dataStream = webResponse.GetResponseStream();
            StreamReader reader       = new StreamReader(dataStream);
            var          bankResponse = new PaymentResponse();
            bankResponse.Response     = reader.ReadToEnd();
            bankResponse.IsSuccessful = true;
            reader.Close();
            dataStream.Close();
            webResponse.Close();

            return(bankResponse);
        }
        /// <summary>
        /// 3-D Secure İşlemler için
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public PaymentResponse CompleteThreed(VposRequest payment)
        {
            #region Pos Configuration
            string strHostAddress = payment.ServiceUrl;
            #endregion

            var cardInfo = payment.CreditCard;

            var postData = new StringBuilder();
            postData.AppendFormat("{0}", "<?xml version=\"1.0\" encoding=\"utf - 8\"?>");
            postData.AppendFormat("<{0}>", "VposRequest");
            postData.AppendFormat("<{0}>{1}</{0}>", "MerchantId", payment.MerchantId);
            postData.AppendFormat("<{0}>{1}</{0}>", "Password", payment.Password);
            postData.AppendFormat("<{0}>{1}</{0}>", "TransactionId", payment.TransactionId);
            postData.AppendFormat("<{0}>{1}</{0}>", "TerminalNo", payment.TerminalNo);
            postData.AppendFormat("<{0}>{1}</{0}>", "TransactionType", payment.TransactionType.ToString());
            postData.AppendFormat("<{0}>{1}</{0}>", "CurrencyAmount", payment.CurrencyAmount);
            postData.AppendFormat("<{0}>{1}</{0}>", "SurchargeAmount", payment.SurchargeAmount);
            postData.AppendFormat("<{0}>{1}</{0}>", "CurrencyCode", payment.CurrencyCode);
            postData.AppendFormat("<{0}>{1}</{0}>", "Pan", cardInfo.Pan);
            postData.AppendFormat("<{0}>{1}</{0}>", "Expiry", cardInfo.Expiry);
            postData.AppendFormat("<{0}>{1}</{0}>", "Cvv", cardInfo.CVV);
            postData.AppendFormat("<{0}>{1}</{0}>", "CAVV", payment.CAVV);
            postData.AppendFormat("<{0}>{1}</{0}>", "ECI", payment.ECI);
            postData.AppendFormat("<{0}>{1}</{0}>", "MpiTransactionId", payment.MpiTransactionId);
            postData.AppendFormat("</{0}>", "VposRequest");

            byte[] postByteArray = Encoding.UTF8.GetBytes(postData.ToString());

            WebRequest webRequest = WebRequest.Create(strHostAddress);
            webRequest.Method                    = "POST";
            webRequest.ContentType               = "application/xml";
            webRequest.ContentLength             = postByteArray.Length;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | (SecurityProtocolType)768 | (SecurityProtocolType)3072 | SecurityProtocolType.Tls;

            Stream dataStream = webRequest.GetRequestStream();
            dataStream.Write(postByteArray, 0, postByteArray.Length);
            dataStream.Close();

            WebResponse webResponse = webRequest.GetResponse();
            dataStream = webResponse.GetResponseStream();
            StreamReader reader       = new StreamReader(dataStream);
            var          bankResponse = new PaymentResponse();
            bankResponse.Response     = reader.ReadToEnd();
            bankResponse.IsSuccessful = true;
            reader.Close();
            dataStream.Close();
            webResponse.Close();

            return(bankResponse);
        }
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
        public async Task <PaymentResponse> Pay(VposRequest value)
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
        {
            try
            {
                PaymentManager paymentManager = new PaymentManager();
                value.PaymentType   = PaymentType.VPos;
                value.TransactionId = Guid.NewGuid().ToString();
                value.OrderId       = Guid.NewGuid().ToString();
                PaymentResponse paymentResponse = paymentManager.PostProcess(value);

                return(paymentResponse);
            }
            catch (Exception ex)
            {
                return(new PaymentResponse()
                {
                    Response = ex.Message,
                    IsSuccessful = false
                });
            }
        }
        /// <summary>
        ///  PayFlex Vpos satış işlemi.
        /// </summary>
        /// <param name="payment"></param>
        /// <returns></returns>
        public PaymentResponse Pay(VposRequest payment)
        {
            #region Pos Configuration
            string strHostAddress = payment.ServiceUrl;
            #endregion

            var cardInfo = payment.CreditCard;

            var postData = new StringBuilder();
            postData.AppendFormat("{0}", "prmstr=<?xml version=\"1.0\" encoding=\"utf-8\"?>");
            postData.AppendFormat("{0}", payment.ToXML());

            byte[] postByteArray = Encoding.UTF8.GetBytes(postData.ToString());

            ServicePointManager.ServerCertificateValidationCallback = delegate { return(true); };
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | (SecurityProtocolType)768 | (SecurityProtocolType)3072 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

            WebRequest webRequest = WebRequest.Create(strHostAddress);
            webRequest.Method                = "POST";
            webRequest.ContentType           = "application/x-www-form-urlencoded";
            webRequest.ContentLength         = postByteArray.Length;
            webRequest.UseDefaultCredentials = true;

            Stream dataStream = webRequest.GetRequestStream();
            dataStream.Write(postByteArray, 0, postByteArray.Length);
            dataStream.Close();

            WebResponse webResponse = webRequest.GetResponse();
            dataStream = webResponse.GetResponseStream();
            StreamReader reader       = new StreamReader(dataStream);
            var          bankResponse = new PaymentResponse();
            bankResponse.Response     = reader.ReadToEnd();
            bankResponse.IsSuccessful = true;
            reader.Close();
            dataStream.Close();
            webResponse.Close();

            return(bankResponse);
        }