private string CancelPayflex(dynamic settings, SmartBazaar.Data.Entities.Payment_Entities payment)
        {
            var payflex    = new Components.Payment.PayFlex.Controller();
            var payflexLog = Components.Converters.StringSerializer.Deserialize <Components.Payment.PayFlex.Models.VInstallmentResponse>(payment.Log);

            if (payment.PaymentDate.AddDays(-1) < DateTime.Today)
            {
                payflex.VCancel(settings.Parameters["checkouturl"], new Components.Payment.PayFlex.Models.VCancelRequest
                {
                    BankId                 = settings.Parameters["bankid"],
                    MerchantId             = payflexLog.MerchantId,
                    Password               = settings.Parameters["password"],
                    ReferenceTransactionId = payflexLog.TransactionId,
                    TransactionId          = Guid.NewGuid().ToString(),
                    TransactionType        = "Cancel"
                });
                Components.Payment.PayFlex.Models.VCancelResponse cancelresult = payflex.CheckoutResult as Components.Payment.PayFlex.Models.VCancelResponse;
                return(Components.Converters.StringSerializer.Serialize <Components.Payment.PayFlex.Models.VCancelResponse>(cancelresult));
            }
            else
            {
                payflex.VRefund(settings.Parameters["checkouturl"], new Components.Payment.PayFlex.Models.VRefundRequest
                {
                    BankId                 = settings.Parameters["bankid"],
                    MerchantId             = payflexLog.MerchantId,
                    Password               = settings.Parameters["password"],
                    ReferenceTransactionId = payflexLog.TransactionId,
                    TransactionId          = Guid.NewGuid().ToString(),
                    TransactionType        = "Cancel"
                });
                Components.Payment.PayFlex.Models.VRefundRequest refundresult = payflex.CheckoutResult as Components.Payment.PayFlex.Models.VRefundRequest;
                return(Components.Converters.StringSerializer.Serialize <Components.Payment.PayFlex.Models.VRefundRequest>(refundresult));
            }
        }
 public ActionResult TestPos()
 {
     var payflex = new Components.Payment.PayFlex.Controller(new Components.Payment.PayFlex.Models.MPIStatusRequest
     {
         MerchantId = "655500056",
         MerchantPassword = "******",
         Pan = "4012001037141112",
         ExpiryDate = "1605",
         BrandName = "200",
         PurchaseAmount = "1000",
         VerifyEnrollmentRequestId = "12345678"
     });
     var result = payflex.Is3D("http://sanalpos.innova.com.tr/MPI_V2/Enrollment.aspx");
     return Content(result.ToString() + " : " + Newtonsoft.Json.JsonConvert.SerializeObject(payflex.CheckoutResult));
 }
        public ActionResult PaymentCallback(string id)
        {
            var orderLayer = new OrderLayer();
            var payment    = orderLayer.Order.Payments.FirstOrDefault(f => f.Id == orderLayer.Order.PaymentTypeId);

            var posWorker  = new PosWorker();
            var posSetting = posWorker.GetSitePosSetting(payment.PosType);


            switch (id.ToLower())
            {
            case "paypal":
                if (Request.Params["result"] == "fail")
                {
                    return(View("PaymentError"));
                }
                var paypal       = new Components.Payment.Paypal.Controller(posSetting.Parameters);
                var paypalresult = paypal.PaymentExcution(Request.Params["payerId"], Request.Params["paymentId"]);
                if (paypalresult.Status)
                {
                    var paymentWorker      = new PaymentWorker();
                    var paymentEntityModel = Mapper.Map <PaymentEntityViewModel>(orderLayer.Order);
                    paymentEntityModel.PaymentDate = DateTime.Now;
                    paymentEntityModel.Status      = 0;
                    paymentEntityModel.Log         = paypalresult.Data;
                    paymentWorker.InsertSitePaymentEntity(paymentEntityModel);
                }
                return(RedirectToAction("Commit", new { id = orderLayer.Order.Id.ToString("000000") }));

            case "payflex":
                if (Request.Params["result"] == "fail")
                {
                    return(RedirectToAction("Payment", "Bir hata oluştu lütfen tekrar deneyin!"));
                }
                Components.Payment.PayFlex.Controller payFlex  = Session["PayFlexInstance"] as Components.Payment.PayFlex.Controller;
                Dictionary <string, string>           formdata = new Dictionary <string, string>();
                foreach (string prm in Request.Params.AllKeys)
                {
                    formdata.Add(prm, Request.Params[prm]);
                }
                payFlex.MPITransaction = new Components.Payment.PayFlex.Models.MPITransactionResponse(formdata);
                payFlex.MPIChekout(posSetting.Parameters["mpicheckouturl"]);
                if (int.Parse(payFlex.PaymentModel.Installment) > 0)
                {
                    var result = payFlex.CheckoutResult as Components.Payment.PayFlex.Models.VInstallmentResponse;
                    if (result.ResultCode == "0000")
                    {
                        var paymentWorker      = new PaymentWorker();
                        var paymentEntityModel = Mapper.Map <PaymentEntityViewModel>(orderLayer.Order);
                        paymentEntityModel.PaymentDate = DateTime.Now;
                        paymentEntityModel.Status      = 0;
                        paymentEntityModel.Log         = Components.Converters.StringSerializer.Serialize <Components.Payment.PayFlex.Models.VInstallmentResponse>(payFlex.CheckoutResult);
                        paymentWorker.InsertSitePaymentEntity(paymentEntityModel);
                        return(RedirectToAction("Commit", new { id = orderLayer.Order.Id }));
                    }
                    else
                    {
                        return(RedirectToAction("Payment", "Bir hata oluştu lütfen tekrar deneyin!"));
                    }
                }
                else
                {
                    var result = payFlex.CheckoutResult as Components.Payment.PayFlex.Models.VPrepaidResponse;
                    if (result.ResultCode == "0000")
                    {
                        var paymentWorker      = new PaymentWorker();
                        var paymentEntityModel = Mapper.Map <PaymentEntityViewModel>(orderLayer.Order);
                        paymentEntityModel.PaymentDate = DateTime.Now;
                        paymentEntityModel.Status      = 0;
                        paymentEntityModel.Log         = Components.Converters.StringSerializer.Serialize <Components.Payment.PayFlex.Models.VPrepaidResponse>(payFlex.CheckoutResult);
                        paymentWorker.InsertSitePaymentEntity(paymentEntityModel);
                        return(RedirectToAction("Commit", new { id = orderLayer.Order.Id }));
                    }
                    else
                    {
                        return(RedirectToAction("Payment", "Bir hata oluştu lütfen tekrar deneyin!"));
                    }
                }

            default:
                return(null);
            }
        }
        public ActionResult Payment(Models.Internal.PaymentModel model)
        {
            if (ModelState.IsValid)
            {
                var posWorker  = new PosWorker();
                var posSetting = posWorker.GetSitePosSetting(model.Pos);

                var orderLayer = new OrderLayer();
                var payment    = orderLayer.Order.Payments.FirstOrDefault(f => f.Id == orderLayer.Order.PaymentTypeId);

                switch (model.Pos)
                {
                case "payflex":
                    var akposRequest = new Components.Payment.PayFlex.Models.MPIStatusRequest
                    {
                        BankId           = posSetting.Referance,
                        BrandName        = model.CardType == "visa" ? "100" : model.CardType == "mastercard" ? "200" : "",
                        ExpiryDate       = model.ExpiryMonth + model.ExpiryYear,
                        FailureUrl       = Request.Url.Host + "/Order/PaymentCallback/payflex?result=fail",
                        MerchantId       = posSetting.Parameters["merchantid"],
                        MerchantPassword = posSetting.Parameters["password"],
                        InstallmentCount = int.Parse(model.Installment) > 0 ? model.Installment : null,
                        Pan                       = model.CCNumber,
                        PurchaseAmount            = string.Format("{0:F0}", orderLayer.Order.GrandTotal * 100),
                        SuccessUrl                = Request.Url.Host + "/Order/PaymentCallback/payflex?result=ok",
                        VerifyEnrollmentRequestId = orderLayer.Order.Id.ToString()
                    };
                    var payFlex = new Components.Payment.PayFlex.Controller(akposRequest);
                    if (payFlex.Is3D(posSetting.Parameters["mpiurl"]))
                    {
                        payFlex.PaymentModel       = model;
                        Session["PayFlexInstance"] = payFlex;
                        return(View("PayFlexMpiPost", payFlex.MPIStatus));
                    }
                    else
                    {
                        if (string.IsNullOrEmpty(akposRequest.InstallmentCount))
                        {
                            //TODO: payflex TRY kodu girilecek
                            var vprepaidRequest = new Components.Payment.PayFlex.Models.VPrepaidRequest
                            {
                                BankId          = akposRequest.BankId,
                                CurrencyAmount  = akposRequest.Currency,
                                CurrencyCode    = "888",
                                Cvv             = model.Ccv,
                                Expiry          = akposRequest.ExpiryDate,
                                MerchantId      = akposRequest.MerchantId,
                                Pan             = akposRequest.Pan,
                                Password        = akposRequest.MerchantPassword,
                                TransactionId   = Guid.NewGuid().ToString(),
                                TransactionType = "sale"
                            };
                            payFlex.VPrepaidCheckout(posSetting.Parameters["checkouturl"], vprepaidRequest);
                            if (payFlex.CheckoutResult.ResultCode == "0000")
                            {
                                var paymentWorker      = new PaymentWorker();
                                var paymentEntityModel = Mapper.Map <PaymentEntityViewModel>(orderLayer.Order);
                                paymentEntityModel.PaymentDate = DateTime.Now;
                                paymentEntityModel.Status      = 0;
                                paymentEntityModel.Log         = Components.Converters.StringSerializer.Serialize <Components.Payment.PayFlex.Models.VPrepaidResponse>(payFlex.CheckoutResult);
                                paymentWorker.InsertSitePaymentEntity(paymentEntityModel);
                                return(RedirectToAction("Commit", new { id = orderLayer.Order.Id }));
                            }
                            else
                            {
                                return(RedirectToAction("Payment", new { message = (new Components.Payment.PayFlex.ErrorCodes())[payFlex.CheckoutResult.ResultCode] }));
                            }
                        }
                        else
                        {
                            //TODO: payflex TRY kodu girilecek
                            var vinstallmentRequest = new Components.Payment.PayFlex.Models.VInstallmentRequest
                            {
                                BankId           = akposRequest.BankId,
                                CurrencyAmount   = akposRequest.Currency,
                                CurrencyCode     = "888",
                                Cvv              = model.Ccv,
                                Expiry           = akposRequest.ExpiryDate,
                                MerchantId       = akposRequest.MerchantId,
                                Pan              = akposRequest.Pan,
                                Password         = akposRequest.MerchantPassword,
                                TransactionId    = Guid.NewGuid().ToString(),
                                TransactionType  = "sale",
                                InstallmentCount = akposRequest.InstallmentCount
                            };
                            payFlex.VInstallmentCheckout(posSetting.Parameters["checkouturl"], vinstallmentRequest);
                            if (payFlex.CheckoutResult.ResultCode == "0000")
                            {
                                var paymentWorker      = new PaymentWorker();
                                var paymentEntityModel = Mapper.Map <PaymentEntityViewModel>(orderLayer.Order);
                                paymentEntityModel.PaymentDate = DateTime.Now;
                                paymentEntityModel.Status      = 0;
                                paymentEntityModel.Log         = Components.Converters.StringSerializer.Serialize <Components.Payment.PayFlex.Models.VInstallmentResponse>(payFlex.CheckoutResult);
                                paymentWorker.InsertSitePaymentEntity(paymentEntityModel);
                                return(RedirectToAction("Commit", new { id = orderLayer.Order.Id }));
                            }
                            else
                            {
                                return(RedirectToAction("Payment", new { message = (new Components.Payment.PayFlex.ErrorCodes())[payFlex.CheckoutResult.ResultCode] }));
                            }
                        }
                    }

                default:
                    return(RedirectToAction("Begin"));
                }
            }
            return(View(model));
        }