/// <summary>
        /// ThreeD satış işlemi hazırlama
        /// </summary>
        /// <returns></returns>
        public ActionResult Sale()
        {
            var createThreedRequest = new CreateThreedRequest
            {
                ApiKey          = _apiKey,                  //Merchant ApiKey
                TransactionId   = "NGTT201705291607455972", //Her satış işlemi için gönderilen farklı Sipariş Numarası
                TransactionTime = "1443600845",             //İşlem zamanı, unix timestamp
                Amount          = 5499,                     //İşlem Tutarı
                Description     = "E-ticaretÖdemesi",       //İşlem Açıklaması
                Currency        = "TRY",                    //Para birimi
                Installment     = 1,                        //Taksit sayısı, 1 olarak gönderirseniz tek çekim(peşin) işlem olacaktır
                Card            = new Card                  //Kart bilgileri
                {
                    CardHolderName = "Ahmet Mehmet",
                    CardNumber     = "4355084355084358",
                    ExpireMonth    = "12",
                    ExpireYear     = "18",
                    SecurityCode   = "000"
                },
                BasketItems = new List <BasketItem> //Sepet bilgisi
                {
                    new BasketItem
                    {
                        Description = "BoyamaKalemSeti",
                        ProductCode = "7cefdf61-38cd-4b35-b5f0-4c98c5805d41",
                        Amount      = 8750,
                        VatRatio    = 18,
                        Count       = 1,
                        Url         = "http://www.ahmetmarket.com.tr/boyama-kalem-seti"
                    },
                    new BasketItem
                    {
                        Description = "BoyamaKitabı",
                        ProductCode = "7cefdf61-38cd-4b35-b5f0-4c98c5805d41",
                        Amount      = 2550,
                        VatRatio    = 18,
                        Count       = 3,
                        Url         = "http://www.ahmetmarket.com.tr/boyama-kitabi"
                    },
                    new BasketItem
                    {
                        Description = "KargoBedeli",
                        Amount      = 1000,
                        VatRatio    = 18,
                        Count       = 1
                    }
                },
                Customer = new Customer //Müşteri bilgileri
                {
                    Email     = "*****@*****.**",
                    IpAddress = ""
                },
                //ShippingAddress = new ShippingAddress //Teslimat Adresi
                //{
                //    Name = "Ahmet Mehmet",
                //    Address = "Kuştepe Mahallesi Mecidiyeköy Yolu Cad. No:12 Trump Towers Kule:2 Kat:11 ŞİŞLİ",
                //    Country = "Türkiye",
                //    CountryCode = "TUR",
                //    City = "İstanbul",
                //    CityCode = "34",
                //    ZipCode = "34580"
                //},
                //InvoiceAddress = new InvoiceAddress //Fatura Adresi
                //{
                //    Name = "Ahmet Mehmet",
                //    Address = "Kuştepe Mahallesi Mecidiyeköy Yolu Cad. No:12 Trump Towers Kule:2 Kat:11 ŞİŞLİ",
                //    Country = "Türkiye",
                //    CountryCode = "TUR",
                //    City = "İstanbul",
                //    CityCode = "34",
                //    ZipCode = "34580"
                //},
                //Extras = new List<Extra> { new Extra { Key = "INT_SPRS_KODU", Value = "spr_123456789" } }, //Extra alanında gönderdiğiniz değerler, işlem sonunda size tekrar gönderilir.
                SuccessUrl = _baseUrl + "/ThreedPayment/SuccessfulResult", //Başarılı işlem redirect adresi
                FailUrl    = _baseUrl + "/ThreedPayment/FailedResult",     //Başarısız işlem redirect adresi
                //Priority = 1, //Fraud için gerekli alan
                //VisitorId = "12312312", //Fraud için gerekli her müşterinize verdiğiniz unique id
                //UserKey = "adasdas2222", //Fraud için gerekli
                //DiscountAmount = 4010,//Fraud için gerekli
                //GiftCheqAmount = 5600,//Fraud için gerekli
                HashVersion = _hashVersion//1.1 olarak gönderilmeli
            };

            var apiUrl = _hepsipayUrl + "/payment/ThreeDSecureV2"; //ThreeD post adresi

            //Signature oluşturma, threeD html sayfası oluşturma işlemleri için metodu inceleyiniz.
            var createThreedResponse = _paymentProcessor.CreateThreed(createThreedRequest, apiUrl, _secretKey);

            return(Content(createThreedResponse.HtmlForm));
        }
        public CreateThreedResponse CreateThreed(CreateThreedRequest createThreedRequestRequest, string apiUrl, string secretKey)
        {
            //ThreeD işleminden önce Signature oluşturma işlemi burada yapılır
            createThreedRequestRequest.SetSignature(secretKey);

            //ThreeD html formu oluşturulur
            var html = @"<form name=""payform"" action=""" + apiUrl + @""" method=""post"">
                        <input type=""hidden"" name=""Version"" value=""1.0"" />
                        <input type=""hidden"" name=""Transactionid"" value=""" + createThreedRequestRequest.TransactionId + @""" />
                        <input type=""hidden"" name=""ApiKey"" value=""" + createThreedRequestRequest.ApiKey + @""" />"
                       + (createThreedRequestRequest.Card == null ? "" : @"
                        <input type=""hidden"" name=""Card.CardNumber"" value=""" + createThreedRequestRequest.Card.CardNumber + @""" />
                        <input type=""hidden"" name=""Card.ExpireMonth"" value=""" + createThreedRequestRequest.Card.ExpireMonth + @""" />
                        <input type=""hidden"" name=""Card.ExpireYear"" value=""" + createThreedRequestRequest.Card.ExpireYear + @""" />
                        <input type=""hidden"" name=""Card.SecurityCode"" value=""" + createThreedRequestRequest.Card.SecurityCode + @""" />
                        <input type=""hidden"" name=""Card.CardHolderName"" value=""" + createThreedRequestRequest.Card.CardHolderName + @""" />
                        ") +
                       @"<input type=""hidden"" name=""Amount"" value=""" + createThreedRequestRequest.Amount + @""" />
                        <input type=""hidden"" name=""PointAmount"" value=""" + createThreedRequestRequest.PointAmount + @""" />"
                       + (createThreedRequestRequest.Customer == null ? "" : @"
                        <input type=""hidden"" name=""Customer.Email"" value=""" + createThreedRequestRequest.Customer.Email + @""" />
                        <input type=""hidden"" name=""Customer.IpAddress"" value=""" + createThreedRequestRequest.Customer.IpAddress + @""" />
                        ") +
                       @"<input type=""hidden"" name=""Installment"" value=""" + createThreedRequestRequest.Installment + @""" />
                        <input type=""hidden"" name=""SuccessUrl"" value=""" + createThreedRequestRequest.SuccessUrl + @""" />
                        <input type=""hidden"" name=""FailUrl"" value=""" + createThreedRequestRequest.FailUrl + @""" />
                        <input type=""hidden"" name=""ThreedReturnUrl"" value=""" + createThreedRequestRequest.ThreedReturnUrl + @""" />
                        <input type=""hidden"" name=""Signature"" value=""" + createThreedRequestRequest.Signature + @""" />
                        <input type=""hidden"" name=""Currency"" value=""" + createThreedRequestRequest.Currency + @""" />
                        <input type=""hidden"" name=""TransactionTime"" value=""" + createThreedRequestRequest.TransactionTime + @""" />
                        <input type=""hidden"" name=""SaveCreditCard"" value=""" + (createThreedRequestRequest.SaveCreditCard ? "1" : "0") + @""" />
                        <input type=""hidden"" name=""MerchantUserId"" value=""" + createThreedRequestRequest.MerchantUserId + @""" />
                        <input type=""hidden"" name=""MerchantCardUserId"" value=""" + createThreedRequestRequest.MerchantCardUserId + @""" />
                        <input type=""hidden"" name=""MerchantCardId"" value=""" + createThreedRequestRequest.MerchantCardId + @"""/>
                        <input type=""hidden"" name=""IsPreAuth"" value=""" + createThreedRequestRequest.IsPreAuth + @""" />
                        <input type=""hidden"" name=""HashVersion"" value=""" + createThreedRequestRequest.HashVersion + @""" />";

            if (createThreedRequestRequest.BasketItems != null)
            {
                var counter = 0;

                foreach (var item in createThreedRequestRequest.BasketItems)
                {
                    html += @"
                        <input type=""hidden"" name=""BasketItems[" + counter + @"].Amount"" value=""" + item.Amount + @""" />
                        <input type=""hidden"" name=""BasketItems[" + counter + @"].BasketItemId"" value=""" + item.BasketItemId + @""" />
                        <input type=""hidden"" name=""BasketItems[" + counter + @"].Description"" value=""" + item.Description + @""" />
                        <input type=""hidden"" name=""BasketItems[" + counter + @"].ProductCode"" value=""" + item.ProductCode + @""" />
                        <input type=""hidden"" name=""BasketItems[" + counter + @"].SubMerchantId"" value=""" + item.SubMerchantId + @""" />
                        <input type=""hidden"" name=""BasketItems[" + counter + @"].Url"" value=""" + item.Url + @""" />
                        <input type=""hidden"" name=""BasketItems[" + counter + @"].VatRatio"" value=""" + item.VatRatio + @""" />
                        <input type=""hidden"" name=""BasketItems[" + counter + @"].Count"" value=""" + item.Count + @""" />
                        <input type=""hidden"" name=""BasketItems[" + counter + @"].BasketItemType"" value=""" + item.BasketItemType + @""" />";
                    counter++;
                }
            }
            //document.payform.submit() ile oluşturulan formun, threeD adresine post edilmesi sağlanır.
            html += @"</form>
                    <script type=""text/javascript"">
                        document.payform.submit();
                    </script>";
            var response = new CreateThreedResponse
            {
                HtmlForm = html
            };

            return(response);
        }