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; }