// GET: Checkout public ActionResult Index() { Models.CheckoutDetails details = new Models.CheckoutDetails(); Guid cartID = Guid.Parse(Request.Cookies["cartID"].Value); details.CurrentCart = db.Carts.Find(cartID); return(View(details)); }
// GET: Checkout public ActionResult Index() { Models.CheckoutDetails details = new Models.CheckoutDetails(); Guid cartID = Guid.Parse(Request.Cookies["cartID"].Value); details.CurrentCart = db.Carts.Find(cartID); details.Addresses = new Braintree.Address[0]; details.CreditCards = new Braintree.CreditCard[0]; if (User.Identity.IsAuthenticated) { string merchantId = ConfigurationManager.AppSettings["Braintree.MerchantId"]; string environment = ConfigurationManager.AppSettings["Braintree.Environment"]; string publicKey = ConfigurationManager.AppSettings["Braintree.PublicKey"]; string privateKey = ConfigurationManager.AppSettings["Braintree.PrivateKey"]; BraintreeGateway gateway = new Braintree.BraintreeGateway(environment, merchantId, publicKey, privateKey); var customerGateway = gateway.Customer; Braintree.CustomerSearchRequest query = new Braintree.CustomerSearchRequest(); query.Email.Is(User.Identity.Name); var matchedCustomers = customerGateway.Search(query); Braintree.Customer customer = null; if (matchedCustomers.Ids.Count == 0) { CustomerRequest newCustomer = new Braintree.CustomerRequest(); newCustomer.Email = User.Identity.Name; var result = customerGateway.Create(newCustomer); customer = result.Target; } else { customer = matchedCustomers.FirstItem; } details.Addresses = customer.Addresses; details.CreditCards = customer.CreditCards; } return(View(details)); }
public ActionResult Index(Models.CheckoutDetails model) { Guid cartID = Guid.Parse(Request.Cookies["cartID"].Value); model.CurrentCart = db.Carts.Find(cartID); if (ModelState.IsValid) { string trackingNumber = Guid.NewGuid().ToString().Substring(0, 8); decimal Tax = (model.CurrentCart.Lawyer.Price + model.CurrentCart.HelpType.StandardPrice ?? 0) * .1025m; decimal ServiceCharge = (model.CurrentCart.Lawyer.Price + model.CurrentCart.HelpType.StandardPrice ?? 0) * .10m; decimal Total = (model.CurrentCart.Lawyer.Price + model.CurrentCart.HelpType.StandardPrice ?? 0) * 1.2025m; #region pay for order string merchantId = System.Configuration.ConfigurationManager.AppSettings["Braintree.MerchantId"]; string environment = System.Configuration.ConfigurationManager.AppSettings["Braintree.Environment"]; string publicKey = System.Configuration.ConfigurationManager.AppSettings["Braintree.PublicKey"]; string privateKey = System.Configuration.ConfigurationManager.AppSettings["Braintree.PrivateKey"]; Braintree.BraintreeGateway gateway = new Braintree.BraintreeGateway(environment, merchantId, publicKey, privateKey); Braintree.TransactionRequest transaction = new Braintree.TransactionRequest(); // transaction.Amount = 1m; transaction.Amount = Total; transaction.TaxAmount = Tax; transaction.OrderId = trackingNumber; //https://developers.braintreepayments.com/reference/general/testing/ruby transaction.CreditCard = new Braintree.TransactionCreditCardRequest { CardholderName = "Test User", CVV = "123", Number = "4111111111111111", ExpirationYear = DateTime.Now.AddMonths(1).Year.ToString(), ExpirationMonth = DateTime.Now.AddMonths(1).ToString("MM") }; var result = gateway.Transaction.Sale(transaction); #endregion #region save order Order o = new Order { DateCreated = DateTime.UtcNow, DateLastModified = DateTime.UtcNow, TrackingNumber = trackingNumber, Tax = Tax, ServiceCharge = ServiceCharge, Total = Total, Email = model.ContactEmail, CustomerName = model.ContactName, ShippingAddress1 = model.ShippingAddress, ShippingCity = model.ShippingCity, ShippingPostalCode = model.ShippingPostalCode, ShippingState = model.ShippingState, Day = model.CurrentCart.Day, HelpTypeID = model.CurrentCart.HelpTypeID, LawyerID = model.CurrentCart.LawyerID }; db.Orders.Add(o); db.SaveChanges(); #endregion #region send email LawDoggsEmailService emailService = new LawDoggsEmailService(); emailService.SendAsync(new Microsoft.AspNet.Identity.IdentityMessage { Subject = "Your Order Information", Destination = model.ContactEmail, Body = "Thank you for your support, here is your order number " + " " + trackingNumber, }); #endregion return(RedirectToAction("Index", "Orders", new { id = trackingNumber })); } return(View(model)); }
public ActionResult Index(Models.CheckoutDetails model, string addressId) { Guid cartID = Guid.Parse(Request.Cookies["cartID"].Value); model.CurrentCart = db.Carts.Find(cartID); string formattedCCNumber = Regex.Replace(model.CreditCardNumber, @"[^0-9]", ""); if (ModelState.IsValid) { string trackingNumber = Guid.NewGuid().ToString().Substring(0, 8).ToUpper(); decimal tax = model.CurrentCart.WholePis.Sum(x => x.Price * x.Quantity) * .1025m; decimal subtotal = model.CurrentCart.WholePis.Sum(x => x.Price * x.Quantity); decimal shipping = model.CurrentCart.WholePis.Sum(x => x.Quantity); decimal total = subtotal + tax + shipping; BakedPiPaymentServices payments = new BakedPiPaymentServices(); string email = User.Identity.IsAuthenticated ? User.Identity.Name : model.ContactEmail; Result <Transaction> authorizeReply = payments.AuthorizeCard(email, total, tax, trackingNumber, addressId, model.CardholderName, model.CVV, formattedCCNumber, model.ExpirationMonth, model.ExpirationYear); if (string.IsNullOrEmpty(authorizeReply.Message)) { Order order = new Order { TrackingNumber = trackingNumber, MaskedCC = authorizeReply.Target.CreditCard.MaskedNumber, CCImage = authorizeReply.Target.CreditCard.ImageUrl, CCType = authorizeReply.Target.CreditCard.CardType.ToString().ToUpper(), Email = model.ContactEmail, PurchaserName = model.ContactName, ShippingAddress1 = model.ShippingAddress, ShippingCity = model.ShippingCity, ShippingState = model.ShippingState, ShippingPostalCode = model.ShippingPostalCode, SubTotal = model.CurrentCart.WholePis.Sum(x => x.Price * x.Quantity), ShippingAndHandling = (model.CurrentCart.WholePis.Sum(x => x.Quantity) * 1.5m), Tax = model.CurrentCart.WholePis.Sum(x => x.Price * x.Quantity) * .1025m, DateCreated = DateTime.UtcNow, DateLastModified = DateTime.UtcNow }; db.Orders.Add(order); db.SaveChanges(); EmailMessageMaker receiptMailMessage = new EmailMessageMaker(); receiptMailMessage.Line.Add("<h2>The Pi is now being baked...</h2>"); receiptMailMessage.Line.Add("<h4>Thank you for your Order!</h4>"); receiptMailMessage.Line.Add("Order# " + order.TrackingNumber); receiptMailMessage.Line.Add("<h2>Shipping To:</h2>"); receiptMailMessage.Line.Add(order.PurchaserName); receiptMailMessage.Line.Add(order.ShippingAddress1); receiptMailMessage.Line.Add(order.ShippingCity + ", " + order.ShippingState + " " + order.ShippingPostalCode); receiptMailMessage.Line.Add("<br /><br />"); receiptMailMessage.Line.Add("Total: " + (order.SubTotal + order.ShippingAndHandling + order.Tax).ToString("C")); receiptMailMessage.Line.Add("<br />Paid by: " + order.CCType + " " + order.MaskedCC); receiptMailMessage.Line.Add("<br />"); receiptMailMessage.Line.Add("Thanks again for shopping with us today! Enjoy your Pi!"); string receiptSubject = "Thank you for your order! (Order: " + order.TrackingNumber + ")"; string receiptRecipient = order.Email; //Mail the Receipt PiMailer receiptMail = new PiMailer(receiptRecipient, receiptSubject, receiptMailMessage); receiptMail.SendMail(); //Reset the cart - Trash the cookie, so they'll get a new cart next time they need one Response.SetCookie(new System.Web.HttpCookie("cartID") { Expires = DateTime.UtcNow }); //If you have a cart table, you can clear this cart out since it has now been converted to an order db.WholePis.RemoveRange(model.CurrentCart.WholePis); db.Carts.Remove(model.CurrentCart); db.SaveChanges(); return(RedirectToAction("Index", "Receipt", new { id = trackingNumber })); } ModelState.AddModelError("CreditCardNumber", authorizeReply.Message); } return(View(model)); }
public async Task <ActionResult> Index(Models.CheckoutDetails model, string addressId) { //model.CurrentCart = Models.Cart.BuildCart(Request); Guid cartID = Guid.Parse(Request.Cookies["cartID"].Value); model.CurrentCart = db.Carts.Find(cartID); model.Addresses = new Braintree.Address[0]; if (ModelState.IsValid) { string trackingNumber = Guid.NewGuid().ToString().Substring(0, 8); decimal tax = (model.CurrentCart.CartProducts.Sum(x => x.Beer.Price * x.Quantity) ?? 0) * .1025m; decimal subtotal = model.CurrentCart.CartProducts.Sum(x => x.Beer.Price * x.Quantity) ?? 0; decimal shipping = model.CurrentCart.CartProducts.Sum(x => x.Quantity); decimal total = subtotal + tax + shipping; #region pay for order BeerPackPaymentService payments = new BeerPackPaymentService(); string email = User.Identity.IsAuthenticated ? User.Identity.Name : model.ContactEmail; string message = await payments.AuthorizeCard(email, total, tax, trackingNumber, addressId, model.CardholderName, model.CVV, model.CreditCardNumber, model.ExpirationMonth, model.ExpirationYear); #endregion #region save order if (string.IsNullOrEmpty(message)) { Order o = new Order { DateCreated = DateTime.UtcNow, DateLastModified = DateTime.UtcNow, TrackingNumber = trackingNumber, ShippingAndHandling = shipping, Tax = tax, SubTotal = subtotal, Email = model.ContactEmail, PurchaserName = model.ContactName, ShippingAddress1 = model.ShippingAddress, ShippingCity = model.ShippingCity, ShippingPostalCode = model.ShippingPostalCode, ShippingState = model.ShippingState, OrderProducts = model.CurrentCart.CartProducts.Select(x => new OrderProduct { ProductID = x.ProductID, Quantity = x.Quantity, PlacedName = x.Beer.Name, PlacedUnitPrice = x.Beer.Price ?? 0m, DateCreated = DateTime.UtcNow, DateLastModified = DateTime.UtcNow }).ToArray() }; db.Orders.Add(o); await db.SaveChangesAsync(); #endregion #region send email //BeerPackEmailService emailService = new BeerPackEmailService(); //emailService.SendAsync(new Microsoft.AspNet.Identity.IdentityMessage //{ // Subject = "Your Receipt for order " + trackingNumber, // Destination = model.ContactEmail, // Body = "Thank you for shopping." //}); #endregion #region reset cart //Reset the cart - Trash the cookie, so they'll get a new cart next time they need one Response.SetCookie(new HttpCookie("cartID") { Expires = DateTime.UtcNow }); //If you have a cart table, you can clear this cart out since it has now been converted to an order db.CartProducts.RemoveRange(model.CurrentCart.CartProducts); db.Carts.Remove(model.CurrentCart); db.SaveChanges(); #endregion return(RedirectToAction("Index", "Receipt", new { id = trackingNumber })); } ModelState.AddModelError("CreditCardNumber", message); } return(View(model)); }
public async Task <ActionResult> Index(Models.CheckoutDetails model, string addressId) { Guid cartID = Guid.Parse(Request.Cookies["CartID"].Value); model.CurrentCart = db.Carts.Find(cartID); model.Addresses = new Braintree.Address[0]; if (ModelState.IsValid) { string trackingNumber = Guid.NewGuid().ToString().Substring(0, 8); decimal tax = (model.CurrentCart.Cart_Books.Sum(x => x.Book.Price * x.Quantity) ?? 0) * .1025m; decimal subtotal = model.CurrentCart.Cart_Books.Sum(x => x.Book.Price * x.Quantity) ?? 0; decimal shipping = model.CurrentCart.Cart_Books.Sum(x => x.Quantity); decimal total = subtotal + tax + shipping; #region pay for order PAAPaymentService payments = new PAAPaymentService(); string email = User.Identity.IsAuthenticated ? User.Identity.Name : model.ContactEmail; string message = await payments.AuthorizeCard(email, total, tax, trackingNumber, addressId, model.CardholderName, model.CVV, model.CreditCardNumber, model.ExpirationMonth, model.ExpirationYear); #endregion #region save order if (string.IsNullOrEmpty(message)) { Order o = new Order { DateCreated = DateTime.UtcNow, DateLastModified = DateTime.UtcNow, TrackingNumber = trackingNumber, ShippingAndHandling = shipping, Tax = tax, SubTotal = subtotal, Email = model.ContactEmail, PurchaserName = model.ContactName, ShippingAddress1 = model.ShippingAddress, ShippingCity = model.ShippingCity, ShippingPostalCode = model.ShippingPostalCode, ShippingState = model.ShippingState }; db.Orders.Add(o); await db.SaveChangesAsync(); #endregion #region send email PAAEmailService emailService = new PAAEmailService(); await emailService.SendAsync(new Microsoft.AspNet.Identity.IdentityMessage { Subject = "Your receipt for order " + trackingNumber, Destination = model.ContactEmail, Body = "Thank you for shopping" }); #endregion #region Reset Cart Response.SetCookie(new HttpCookie("cartID") { Expires = DateTime.UtcNow }); db.Cart_Books.RemoveRange(model.CurrentCart.Cart_Books); db.Carts.Remove(model.CurrentCart); db.SaveChanges(); #endregion return(RedirectToAction("Index", "Receipt", new { id = trackingNumber })); } ModelState.AddModelError("CreditCardNumber", message); } return(View(model)); }
public ActionResult Index(Models.CheckoutDetails model, string addressId) { //model.CurrentCart = Models.Cart.BuildCart(Request); Guid cartID = Guid.Parse(Request.Cookies["cartID"].Value); model.CurrentCart = db.Carts.Find(cartID); model.Addresses = new Braintree.Address[0]; model.CreditCards = new Braintree.CreditCard[0]; if (ModelState.IsValid) { string trackingNumber = Guid.NewGuid().ToString().Substring(0, 8); decimal tax = (model.CurrentCart.CartProducts.Sum(x => x.Product.Price * x.Quantity) ?? 0) * .1025m; decimal subTotal = model.CurrentCart.CartProducts.Sum(x => x.Product.Price * x.Quantity) ?? 0; decimal shipping = model.CurrentCart.CartProducts.Sum(x => x.Quantity); decimal total = subTotal + tax + shipping; #region pay for order GuitarStorePaymentService payments = new GuitarStorePaymentService(); string email = User.Identity.IsAuthenticated ? User.Identity.Name : model.ContactEmail; string message = payments.AuthorizeCard(email, total, tax, trackingNumber, addressId, model.CardholderName, model.CVV, model.CreditCardNumber, model.ExpirationMonth, model.ExpirationYear); #endregion pay for order #region save order if (string.IsNullOrEmpty(message)) { Order o = new Order { DateCreated = DateTime.UtcNow, DateModified = DateTime.UtcNow, TrackingNumber = trackingNumber, ShippingAndHandling = shipping, Tax = tax, SubTotal = subTotal, Email = model.ContactEmail, PurchaserName = model.ContactName, ShippingAddress1 = model.ShippingAddress, ShippingCity = model.ShippingCity, ShippingPostalCode = model.ShippingPostalCode, ShippingState = model.ShippingState }; db.Orders.Add(o); db.SaveChanges(); #endregion save order #region send email SendThankYouEmail(); IRestResponse SendThankYouEmail() { RestClient client = new RestClient(); client.BaseUrl = new Uri("https://api.mailgun.net/v3"); client.Authenticator = new HttpBasicAuthenticator("api", System.Configuration.ConfigurationManager.AppSettings["MailGun.PrivateKey"]); RestRequest request = new RestRequest(); request.AddParameter("domain", "sandboxa9cdb0fb3e0a4168a77655ff39fe11ae.mailgun.org", ParameterType.UrlSegment); request.Resource = "{domain}/messages"; request.AddParameter("from", "Mailgun Sandbox <*****@*****.**>"); request.AddParameter("to", model.ContactEmail); request.AddParameter("subject", String.Format("Thank you, {0}!", model.ContactName)); request.AddParameter("html", "<html><head><style> .strong { font-weight: bold; }</style> <title></title></head><body> <header> <div> <h1>Thank you, " + @model.ContactName + ", for your order!</h1> </div><div> <h3>Your receipt is below.</h3> </div></header> <table> <thead> <tr> <th class='strong'>Your receipt from Matt's Guitar Store</th> </tr></thead> <tbody> <tr> <td class='strong'>Purchaser Name:</td><td>" + @model.ContactName + "</td></tr><tr> <td class='strong'>Purchaser Email:</td><td>" + @model.ContactEmail + "</td></tr><tr> <td class='strong'>Shipping Address:</td><td>" + @model.ShippingAddress + "</td></tr><tr> <td class='strong'>City:</td><td>" + @model.ShippingCity + "</td></tr><tr> <td class='strong'>State:</td><td>" + @model.ShippingState + "</td></tr><tr> <td class='strong'>Zip:</td><td>" + @model.ShippingPostalCode + "</td></tr><tr> <td class='strong'>Cardholder Name:</td><td>" + @model.CardholderName + "</td></tr><tr> <td class='strong'>Card Number:</td><td>************" + @model.CreditCardNumber.Substring(12) + "</td></tr></tbody> </table> <footer> <h1>Thank you for shopping with us. We hope to see you again soon.</h1> </footer></body></html>"); request.Method = Method.POST; return(client.Execute(request)); } #endregion send email #region reset cart Response.SetCookie(new System.Web.HttpCookie("cartID") { Expires = DateTime.UtcNow }); db.CartProducts.RemoveRange(model.CurrentCart.CartProducts); db.Carts.Remove(model.CurrentCart); db.SaveChanges(); #endregion reset cart return(RedirectToAction("Index", "Receipt", new { id = trackingNumber })); } ModelState.AddModelError("CreditCardNumber", message); } return(View(model)); }