示例#1
0
        public void TicketController_Throws_BadRequestException_When_Payment_Is_Zero()
        {
            // Arrange
            TicketRepository   ticketRepository = new TicketRepository(null);
            PaymentWorker      paymentWorker    = new PaymentWorker(ticketRepository);
            TicketController   controller       = new TicketController(paymentWorker);
            GSPRPaymentRequest paymentRequest   = new
                                                  GSPRPaymentRequest()
            {
                BillNo                = 123,
                BillAmount            = 0,
                PaymentTypeId         = "100",
                TipAmount             = 0,
                TransactionID         = 123,
                LocationIdentifier    = "ABC",
                PaymentTypeName       = "3rd_party",
                GlancePayPOSPaymentID = 123
            };

            MockControllerRequest(controller);

            // Act
            controller.Validate(paymentRequest);
            HttpResponseMessage result = controller.Post(paymentRequest) as HttpResponseMessage;
        }
        // POST: Admin/Order/UpdateStatus
        public ActionResult UpdateStatus(int id, short Statuses)
        {
            try
            {
                if (Statuses == 99)
                {
                    var paymentWorker = new PaymentWorker();
                    var payments = paymentWorker.GetManagerPaymentEntitiesByOrder(id);
                    if (payments.Status != 99)
                    {
                        return RedirectToAction("Detail", new { id = id });
                    }
                }

                var orderWorker = new OrderWorker();
                orderWorker.UpdateOrderStatus(id, Statuses);
                return RedirectToAction("Detail", new { id = id });
            }
            catch (Exception ex)
            {
                this.ShowError(ex);
                return null;
            }
            
        }
        // GET: Admin/Order/Detail
        public ActionResult Detail(int id)
        {
            try
            {
                ViewBag.Id = id;

                var orderWorker = new OrderWorker();
                var paymentWorker = new PaymentWorker();
                var customerWorker = new CustomerWorker();

                var model = orderWorker.GetManagerOrderEdit(id);
                var paymodel = paymentWorker.GetManagerPaymentEntitiesByOrder(id);
            
                ViewBag.User = customerWorker.GetCustomerUser(model.Customer.UserId);

                ViewBag.Statuses = SmartBazaar.Web.Models.Common.OrderHeadsListProvider.GetStatuses().Select(s => new SelectListItem { Text = s.Value, Value = s.Key.ToString(), Selected = s.Key == model.Status }).AsEnumerable();
                if (paymodel != null)
                {
                    ViewBag.Payment = paymodel;
                    ViewBag.PayId = paymodel.Id;
                    ViewBag.PayStatuses = SmartBazaar.Web.Models.Common.PaymentEntitiesListsProvider.GetStatuses().Select(s => new SelectListItem { Text = s.Value, Value = s.Key.ToString(), Selected = s.Key == paymodel.Status });
                }
                else
                {
                    ViewBag.PayStatuses = SmartBazaar.Web.Models.Common.PaymentEntitiesListsProvider.GetStatuses().Select(s => new SelectListItem { Text = s.Value, Value = s.Key.ToString()});
                }

                return View(model);
            }
            catch (Exception ex)
            {
                this.ShowError(ex);
                return null;
            }
        }
        public ActionResult Detail(int id)
        {
            var paymentWorker = new PaymentWorker();

            var model = m_catalogWorker.GetSiteProductDetail(id);

            model.PaymentTypes = paymentWorker.GetSitePaymentTypes();
            return(View(model));
        }
        public ActionResult Transaction(FormCollection frm)
        {
            var paymentWorker = new PaymentWorker();
            var orderWorker   = new OrderWorker();
            var orderLayer    = new OrderLayer();

            orderLayer.Order.PaymentTypeId = int.Parse(frm["paymentType"]);
            var paymentDetail = paymentWorker.GetSitePaymentType(orderLayer.Order.PaymentTypeId);

            //payment commission calculation
            decimal currentPaymentFee = paymentDetail.ProcessFee + (orderLayer.Order.GrandTotal * (decimal)(paymentDetail.CommissionRate / 100));
            decimal currentPaymentTax = orderLayer.Order.PaymentFee * 0.18M;

            currentPaymentFee -= currentPaymentTax;

            //installment commision calculation
            decimal currentInstallmentFee = 0M;
            decimal currentInstallmentTax = 0M;

            if (paymentDetail.Method == 2)
            {
                orderLayer.Order.InstallmentId = int.Parse(frm["installment"]);
                currentInstallmentFee          = orderLayer.Order.GrandTotal * (decimal)(paymentDetail.Installments.FirstOrDefault(f => f.Id == orderLayer.Order.InstallmentId).Rate / 100);
                currentInstallmentTax          = currentInstallmentFee * 0.18M;
                currentInstallmentFee         -= currentInstallmentTax;
            }

            //join payment and installment to order
            orderLayer.Order.PaymentFee     = currentPaymentFee;
            orderLayer.Order.InstallmentFee = currentInstallmentFee;

            //add tax and grand total
            orderLayer.Order.TaxTotal   += currentPaymentTax + currentInstallmentTax;
            orderLayer.Order.GrandTotal += orderLayer.Order.PaymentFee + orderLayer.Order.InstallmentFee;
            orderLayer.Sync();

            orderLayer.Order.Id = orderWorker.InsertSiteOrder(orderLayer.Order);
            orderLayer.Sync();

            if (paymentDetail.Method == 1)
            {
                var paymentEntityModel = Mapper.Map <PaymentEntityViewModel>(orderLayer.Order);
                paymentEntityModel.PaymentDate   = DateTime.Now;
                paymentEntityModel.Status        = 0;
                paymentEntityModel.Log           = "Peşin ödeme";
                paymentEntityModel.InstallmentId = null;
                paymentWorker.InsertSitePaymentEntity(paymentEntityModel);
                return(RedirectToAction("Commit", new { id = paymentDetail.Method }));
            }
            else
            {
                return(RedirectToAction("Payment"));
            }
        }
        public ActionResult UpdateStatus(int id, int payid, short PayStatuses)
        {
            try
            {
                var    paymentWorker = new PaymentWorker();
                var    payments      = paymentWorker.GetManagerPaymentsByOrderId(id);
                string log           = null;
                if (payments.Any(a => a.Payment_Types.Method == 2))
                {
                    var     posWorker = new PosWorker();
                    var     payment   = payments.FirstOrDefault(f => f.Payment_Types.Method == 2);
                    dynamic settings  = null;
                    switch (payment.Payment_Types.PosType.ToLower())
                    {
                    case "paypal":
                        settings = posWorker.GetSitePosSetting("paypal");
                        var paypal = new Components.Payment.Paypal.Controller(settings.Parameters);
                        var result = paypal.Refund(payment.Log);
                        if (result.Status)
                        {
                            log = result.Data;
                        }
                        break;

                    case "isbank":
                        settings = posWorker.GetSitePosSetting("isbank");
                        log      = CancelPayflex(settings, payment);
                        break;

                    case "vakifbank":
                        settings = posWorker.GetSitePosSetting("vakifbank");
                        log      = CancelPayflex(settings, payment);
                        break;

                    case "ziraatbank":
                        settings = posWorker.GetSitePosSetting("ziraatbank");
                        log      = CancelPayflex(settings, payment);
                        break;

                    default:
                        break;
                    }
                }
                paymentWorker.UpdatePaymentStatus(payid, PayStatuses, log);
                return(RedirectToAction("Detail", "OrderManager", new { id = id }));
            }
            catch (Exception ex)
            {
                this.ShowError(ex);
                return(null);
            }
        }
        public ActionResult Checkout(FormCollection frm)
        {
            var shipmentWorker = new ShipmentWorker();
            var paymentWorker  = new PaymentWorker();
            var customerWorker = new CustomerWorker();
            var orderLayer     = new OrderLayer();

            if (frm["AddressId"] != null)
            {
                orderLayer.Order.ShipAddressId = int.Parse(frm["AddressId"]);
                if (frm["InvoiceSendPartial"] == "yes")
                {
                    orderLayer.Order.InvoiceAddressId = int.Parse(frm["InvoiceAddressId"]);
                }
                else
                {
                    orderLayer.Order.InvoiceAddressId = int.Parse(frm["AddressId"]);
                }
            }

            orderLayer.Order.ShipmentTypeId = int.Parse(frm["ShipmentType"]);
            orderLayer.Order.Note           = frm["Note"];

            if (orderLayer.Order.ShipCost == 0)
            {
                decimal shipCost = ShippingHelper.ShippingPrice(shipmentWorker.GetSiteShipmentType(orderLayer.Order.ShipmentTypeId));
                orderLayer.Order.TaxTotal   += shipCost * 18 / 118;
                orderLayer.Order.ShipCost    = shipCost * 100 / 118;
                orderLayer.Order.GrandTotal += shipCost;
            }

            orderLayer.Sync();
            orderLayer.Order.Payments = paymentWorker.GetSitePaymentTypes();

            ViewBag.ShipmentType = shipmentWorker.GetSiteShipmentType(orderLayer.Order.ShipmentTypeId);
            if (orderLayer.Order.ShipAddressId.HasValue)
            {
                ViewBag.ShipmentAddress = customerWorker.GetSiteCustomerAddress(orderLayer.Order.ShipAddressId.Value);
            }

            if (frm["InvoiceSendPartial"] == "yes")
            {
                ViewBag.InvoiceAddress = customerWorker.GetSiteCustomerAddress(orderLayer.Order.InvoiceAddressId.Value);
            }

            return(View(orderLayer.Order));
        }
        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));
        }
 public PaymentManagerController()
 {
     m_paymentWorker = new PaymentWorker();
     m_posWorker     = new PosWorker();
 }
示例#11
0
 public PaymentController(DataFactory dataFactory)
 {
     _paymentWorker = (PaymentWorker)dataFactory.GetDataFactory <Payment>();
 }