public ActionResult CheckOut(CartCheckOut model) { if (!Utilities.IsValidCart()) { return(RedirectToAction("Index", "home")); } ServiceResult result = _service.ProcessCart(model, SessionManager.CurrentCart, CurrentUser.UserId); if (result.Success) { var confirmationCode = SessionManager.CurrentCart.ResultingConfirmationCode; var cartFocusType = SessionManager.CurrentCart.CheckOutFocus; var eventCity = (string.IsNullOrEmpty(SessionManager.CurrentCart.EventCity)) ? "" : SessionManager.CurrentCart.EventCity; var summary = _service.GenerateCartSummary(SessionManager.CurrentCart); TempData["cartSummary"] = summary; // ensure cart focus is correct ResetCartFocus(); SessionManager.CurrentCart = null; return(RedirectToAction("ThankYou", new { id = cartFocusType, confirm = confirmationCode, city = eventCity })); } Utilities.AddModelStateErrors(ModelState, result.GetServiceErrors()); model.ExpirationMonthList = DirtyGirlExtensions.ConvertToSelectList <Months>(); model.ExpirationYearList = Utilities.CreateNumericSelectList(DateTime.Now.Year, DateTime.Now.AddYears(20).Year); model.CartSummary = _service.GenerateCartSummary(SessionManager.CurrentCart); return(View(model)); }
private IGatewayResponse ChargeConsumer(CartCheckOut checkOutDetails, CartSummary cartSummary) { var paymentRequest = new AuthorizationRequest(checkOutDetails.CardNumber, string.Format("{0}{1}", checkOutDetails.ExpirationMonth, checkOutDetails.ExpirationYear), cartSummary.TotalCost, "Dirty Girl Cart Purchase", true); paymentRequest.FirstName = checkOutDetails.CardHolderFirstname; paymentRequest.LastName = checkOutDetails.CardHolderLastname; paymentRequest.Zip = checkOutDetails.CardHolderZipCode; paymentRequest.CardCode = checkOutDetails.CCVNumber; var totalTax = 0.0M; foreach (var item in cartSummary.CartItems) { paymentRequest.AddLineItem(item.PurchaseItemId.ToString(), item.ItemName, item.DiscountDescription, 1, item.ItemTotal, item.Taxable); if (item.Taxable) { totalTax += (item.StateTax + item.LocalTax); } } paymentRequest.AddTax(totalTax); var gateway = new Gateway(DirtyGirlServiceConfig.Settings.PaymentGatewayId, DirtyGirlServiceConfig.Settings.PaymentGatewayKey, true); gateway.TestMode = DirtyGirlServiceConfig.Settings.PaymentTestMode; return(gateway.Send(paymentRequest)); }
public ActionResult CheckOut() { if (!Utilities.IsValidCart()) { return(RedirectToAction("Index", "home")); } var vm = new CartCheckOut { ExpirationMonthList = DirtyGirlExtensions.ConvertToSelectList <Months>(), ExpirationYearList = Utilities.CreateNumericSelectList(DateTime.Now.Year, DateTime.Now.AddYears(20).Year), CardHolderFirstname = CurrentUser.FirstName, CardHolderLastname = CurrentUser.LastName, CardHolderZipCode = CurrentUser.PostalCode, CartSummary = _service.GenerateCartSummary(SessionManager.CurrentCart) }; return(View(vm)); }
public ServiceResult ProcessCart(CartCheckOut checkOutDetails, SessionCart tempCart, int userId) { ServiceResult result = new ServiceResult(); if (checkOutDetails != null && checkOutDetails.CartSummary != null && checkOutDetails.CartSummary.TotalCost > 0) { DateTime expired = new DateTime(); expired.AddYears(checkOutDetails.ExpirationYear); expired.AddMonths(checkOutDetails.ExpirationMonth); if (DateTime.Now.CompareTo(expired) < 0) { result.AddServiceError("This credit card is expired"); } Regex rg = new Regex(@"^[a-zA-Z].*$"); if (string.IsNullOrWhiteSpace(checkOutDetails.CardHolderFirstname)) { result.AddServiceError("Cardholder first name is required."); } else if (!rg.IsMatch(checkOutDetails.CardHolderFirstname)) { result.AddServiceError("Cardholder first name is invalid."); } if (string.IsNullOrWhiteSpace(checkOutDetails.CardHolderLastname)) { result.AddServiceError("Cardholder last name is required."); } else if (!rg.IsMatch(checkOutDetails.CardHolderLastname)) { result.AddServiceError("Cardholder last name is invalid."); } } if (result.GetServiceErrors().Count > 0) { return(result); } try { CartSummary summary = GenerateCartSummary(tempCart); string transactionId = string.Empty; CartType cartType; if (summary.TotalCost == 0) { transactionId = GenerateCartCode(); cartType = CartType.Free; } else { IGatewayResponse payment; payment = ChargeConsumer(checkOutDetails, summary); if (payment.Approved) { transactionId = payment.TransactionID; cartType = CartType.Standard; } else { switch (int.Parse(payment.ResponseCode)) { case 2: result.AddServiceError("This Card has been declined."); break; case 3: result.AddServiceError(payment.Message); break; default: result.AddServiceError("Card Error"); break; } return(result); } } if (!SaveCart(tempCart, summary, userId, transactionId, cartType)) { result.AddServiceError("An error occured saving the shopping cart"); } } catch (Exception ex) { result.AddServiceError(Utilities.GetInnerMostException(ex)); } return(result); }