Пример #1
0
        // 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));
        }
Пример #2
0
        // 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));
        }
Пример #3
0
        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));
        }
Пример #4
0
        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));
        }
Пример #5
0
        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));
        }
Пример #7
0
        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));
        }