public ActionResult Index(MyAccountModel model) { string publicKey = ConfigurationManager.AppSettings["Braintree.PublicKey"]; string privateKey = ConfigurationManager.AppSettings["Braintree.PrivateKey"]; string environment = ConfigurationManager.AppSettings["Braintree.Environment"]; string merchantId = ConfigurationManager.AppSettings["Braintree.MerchantId"]; Braintree.BraintreeGateway braintree = new Braintree.BraintreeGateway(environment, merchantId, publicKey, privateKey); int userId = -1; using (MemberEntities1 e = new MemberEntities1()) { userId = e.CustomerLists.Single(x => x.EmailAddress == User.Identity.Name).ID; } Braintree.CustomerRequest update = new Braintree.CustomerRequest(); update.FirstName = model.FirstName; update.LastName = model.LastName; update.Phone = model.Phone; update.Company = model.Company; update.Fax = model.Fax; update.Website = model.Website; braintree.Customer.Update(userId.ToString(), update); return(View(model)); }
public ActionResult Index() { 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.PriavteKey"]; Braintree.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) { Braintree.CustomerRequest newCustomer = new Braintree.CustomerRequest(); newCustomer.Email = User.Identity.Name; var result = customerGateway.Create(newCustomer); customer = result.Target; } else { customer = matchedCustomers.FirstItem; } return(View(customer)); }
public async Task <ActionResult> Register(RegisterModel model) { if (ModelState.IsValid) { using (IdentityModels entities = new IdentityModels()) { var userStore = new UserStore <User>(entities); var manager = new UserManager <User>(userStore); manager.UserTokenProvider = new EmailTokenProvider <User>(); var user = new User() { UserName = model.EmailAddress, Email = model.EmailAddress }; IdentityResult result = manager.Create(user, model.Password); if (result.Succeeded) { User u = manager.FindByName(model.EmailAddress); // Creates customer record in Braintree string merchantId = ConfigurationManager.AppSettings["Braintree.MerchantID"]; string publicKey = ConfigurationManager.AppSettings["Braintree.PublicKey"]; string privateKey = ConfigurationManager.AppSettings["Braintree.PrivateKey"]; string environment = ConfigurationManager.AppSettings["Braintree.Environment"]; Braintree.BraintreeGateway braintree = new Braintree.BraintreeGateway(environment, merchantId, publicKey, privateKey); Braintree.CustomerRequest customer = new Braintree.CustomerRequest(); customer.CustomerId = u.Id; customer.Email = u.Email; var r = await braintree.Customer.CreateAsync(customer); string confirmationToken = manager.GenerateEmailConfirmationToken(u.Id); string sendGridApiKey = ConfigurationManager.AppSettings["SendGrid.ApiKey"]; SendGrid.SendGridClient client = new SendGrid.SendGridClient(sendGridApiKey); SendGrid.Helpers.Mail.SendGridMessage message = new SendGrid.Helpers.Mail.SendGridMessage(); message.Subject = string.Format("Please confirm your account"); message.From = new SendGrid.Helpers.Mail.EmailAddress("*****@*****.**", "Will Mabrey"); message.AddTo(new SendGrid.Helpers.Mail.EmailAddress(model.EmailAddress)); SendGrid.Helpers.Mail.Content contents = new SendGrid.Helpers.Mail.Content("text/html", string.Format("<a href=\"{0}\">Confirm Account</a>", Request.Url.GetLeftPart(UriPartial.Authority) + "/MyAccount/Confirm/" + confirmationToken + "?email=" + model.EmailAddress)); message.AddContent(contents.Type, contents.Value); SendGrid.Response response = await client.SendEmailAsync(message); return(RedirectToAction("ConfirmSent")); } else { ModelState.AddModelError("EmailAddress", "Unable to register with this email address."); } } } return(View(model)); }
public ActionResult Index(CheckoutModel model) { string publicKey = ConfigurationManager.AppSettings["Braintree.PublicKey"]; string privateKey = ConfigurationManager.AppSettings["Braintree.PrivateKey"]; string environment = ConfigurationManager.AppSettings["Braintree.Environment"]; string merchantId = ConfigurationManager.AppSettings["Braintree.MerchantId"]; Braintree.BraintreeGateway braintree = new Braintree.BraintreeGateway(environment, merchantId, publicKey, privateKey); //int userId = -1; if (ModelState.IsValid) { using (CustomersEntities entities = new CustomersEntities()) { var currentCustomer = entities.Customers.Single(x => x.EmailAddress == User.Identity.Name); var currentPackage = currentCustomer.CustomerPackages.First(x => x.PurchaseDate == null); //TODO: Validate the credit card - if it errors out, add a model error and display it to the user //TODO: Persist this information to the database //var currentPackage = entities.Customers.Single(x => x.EmailAddress == User.Identity.Name).CustomerPackages.First(x => x.PurchaseDate == null); //model.Package = new PackageModel(); //string publicKey = ConfigurationManager.AppSettings["Braintree.PublicKey"]; //string privateKey = ConfigurationManager.AppSettings["Braintree.PrivateKey"]; //string environment = ConfigurationManager.AppSettings["Braintree.Environment"]; //string merchantId = ConfigurationManager.AppSettings["Braintree.MerchantId"]; Braintree.CustomerRequest request = new Braintree.CustomerRequest(); request.Email = model.EmailAddress; request.FirstName = model.FirstName; request.LastName = model.LastName; request.Phone = model.PhoneNumber; request.CreditCard = new Braintree.CreditCardRequest(); request.CreditCard.Number = model.CreditCardNumber; request.CreditCard.CardholderName = model.CreditCardName; request.CreditCard.ExpirationMonth = (model.CreditCardExpirationMonth).ToString().PadLeft(2, '0'); request.CreditCard.ExpirationYear = model.CreditCardExpirationYear.ToString(); var customerResult = braintree.Customer.Create(request); Braintree.TransactionRequest sale = new Braintree.TransactionRequest(); sale.Amount = currentPackage.Package.Price; sale.CustomerId = customerResult.Target.Id; sale.PaymentMethodToken = customerResult.Target.DefaultPaymentMethod.Token; braintree.Transaction.Sale(sale); currentPackage.PurchaseDate = DateTime.UtcNow; entities.SaveChanges(); return(RedirectToAction("Receipt", "Membership", null)); } } return(View(model)); }
public async Task <ActionResult> Registration(RegistrationModel model) { if (ModelState.IsValid) { if (WebSecurity.UserExists(model.EmailAddress)) { ModelState.AddModelError("EmailAddress", "Username already in user"); } else { string confirmationToken = WebSecurity.CreateUserAndAccount(model.EmailAddress, model.Password, null, true); string publicKey = ConfigurationManager.AppSettings["Braintree.PublicKey"]; string privateKey = ConfigurationManager.AppSettings["Braintree.PrivateKey"]; string environment = ConfigurationManager.AppSettings["Braintree.Environment"]; string merchantId = ConfigurationManager.AppSettings["Braintree.MerchantID"]; Braintree.BraintreeGateway braintree = new Braintree.BraintreeGateway(environment, merchantId, publicKey, privateKey); Braintree.CustomerRequest request = new Braintree.CustomerRequest(); request.Email = model.EmailAddress; using (MemberEntities1 entities = new MemberEntities1()) { request.Id = entities.CustomerLists.Single(x => x.EmailAddress == model.EmailAddress).ID.ToString(); } braintree.Customer.Create(request); string confirmationUrl = Request.Url.GetLeftPart(UriPartial.Authority) + "/Membership/Confirm?confirmationToken=" + confirmationToken; string sendGridApiKey = ConfigurationManager.AppSettings["SendGrid.ApiKey"]; SendGrid.SendGridAPIClient client = new SendGrid.SendGridAPIClient(sendGridApiKey); Email from = new Email("*****@*****.**"); string subject = "Confirm your new account"; Email to = new Email(model.EmailAddress); Content content = new Content("text/html", string.Format("<a href=\"{0}\">Confirm</a>", confirmationUrl)); Mail mail = new Mail(from, subject, to, content); mail.TemplateId = "00aaf54f-cf22-4cfe-98b5-b20d3cd72354"; mail.Personalization[0].AddSubstitution("-link-", confirmationUrl); var response = await client.client.mail.send.post(requestBody : mail.Get()); string message = await response.Body.ReadAsStringAsync(); if (!string.IsNullOrEmpty(message)) { throw new Exception(message); } return(RedirectToAction("ConfirmationSent")); } } return(View(model)); }
public async Task <IActionResult> Index(CheckoutViewModel model) { if (ModelState.IsValid) { Braintree.CustomerRequest customerRequest = new Braintree.CustomerRequest { }; Braintree.AddressRequest addressRequest = new Braintree.AddressRequest { StreetAddress = model.Billingaddress, PostalCode = model.BillingZip, Region = model.BillingState, Locality = model.BillingCity, CountryName = "USA" }; Braintree.TransactionRequest saleRequest = new Braintree.TransactionRequest(); saleRequest.Amount = 10; //Hard-coded forever because Braintree ain't gonna take $2 million+ saleRequest.CreditCard = new Braintree.TransactionCreditCardRequest { CardholderName = model.creditcardname, CVV = model.creditcardverificationvalue, ExpirationMonth = model.expirationmonth, ExpirationYear = model.expirationyear, Number = model.creditcardnumber }; saleRequest.BillingAddress = new Braintree.AddressRequest { StreetAddress = model.Billingaddress, PostalCode = model.BillingZip, Region = model.BillingState, Locality = model.BillingCity, CountryName = "USA" }; var result = await _braintreeGateway.Transaction.SaleAsync(saleRequest); if (result.IsSuccess()) { //If model state is valid, proceed to the next step. return(this.RedirectToAction("Index", "Home")); } foreach (var error in result.Errors.All()) { ModelState.AddModelError(error.Code.ToString(), error.Message); } } return(View()); }
public ActionResult Index(string firstName, string lastName, string id) { if (User.Identity.IsAuthenticated == false) { return(RedirectToAction("Index", "Home")); } 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); var customerGateway = gateway.Customer; Braintree.CustomerRequest request = new Braintree.CustomerRequest(); request.FirstName = firstName; request.LastName = lastName; var result = customerGateway.Update(id, request); ViewBag.Message = "Updated Successfully"; return(View(result.Target)); }
// 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]; if (User.Identity.IsAuthenticated) { 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); 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) { Braintree.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; } return(View(details)); }
public async Task <ActionResult> Register(string username, string fname, string lname, DateTime?dateOfBirth, string phone, string password) { IdentityUser newUser = new IdentityUser(username) { // set the Email to be the username Email = username, PhoneNumber = phone }; IdentityResult result = await UserManager.CreateAsync(newUser, password); if (!result.Succeeded) { ViewBag.Errors = result.Errors; return(View()); } // Check if new registrant has ordered before. If so, they should already have a Customer record // We don't want to create a new one - just modify their record to add the AspNetUserID string custID = ""; Customer existingCustomer = db.Customers.FirstOrDefault(x => x.EmailAddress == username); if (existingCustomer == null) { var newCustomer = new Customer { AspNetUserID = newUser.Id, FirstName = fname, LastName = lname, DateOfBirth = dateOfBirth, PhoneNumber = phone, EmailAddress = username, DateCreated = DateTime.UtcNow, DateLastModified = DateTime.UtcNow }; custID = newCustomer.Id.ToString(); db.Customers.Add(newCustomer); await db.SaveChangesAsync(); } else { existingCustomer.PhoneNumber = phone; existingCustomer.DateOfBirth = dateOfBirth ?? null; existingCustomer.AspNetUserID = newUser.Id; custID = existingCustomer.Id.ToString(); } string merchantId = ConfigurationManager.AppSettings["Braintree.MerchantID"]; string publicKey = ConfigurationManager.AppSettings["Braintree.PublicKey"]; string privateKey = ConfigurationManager.AppSettings["Braintree.PrivateKey"]; string environment = ConfigurationManager.AppSettings["Braintree.Environment"]; Braintree.BraintreeGateway braintreeGateway = new Braintree.BraintreeGateway (environment, merchantId, publicKey, privateKey); Braintree.CustomerSearchRequest search = new Braintree.CustomerSearchRequest(); search.Email.Equals(username); var existingCustomers = await braintreeGateway.Customer.SearchAsync(search); if (existingCustomers != null || !existingCustomers.Ids.Any()) { Braintree.CustomerRequest c = new Braintree.CustomerRequest { FirstName = fname, LastName = lname, CustomerId = custID, Email = username, Phone = phone }; var creationResult = await braintreeGateway.Customer.CreateAsync(c); } string token = await UserManager.GenerateEmailConfirmationTokenAsync(newUser.Id); string body = string.Format( "<a href=\"{0}/account/confirmaccount?email={1}&token={2}\">Confirm Your Account</a>", Request.Url.GetLeftPart(UriPartial.Authority), username, token); await UserManager.SendEmailAsync(newUser.Id, "Confirm Your WeirdEnsemble Account", body); TempData["ConfirmEmail"] = "Account created. Please check your email inbox to confirm your account!"; return(RedirectToAction("SignIn")); }
public async Task <IActionResult> Index(ShippingViewModel model) { await SetupViewAsync(model); System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^\d{5}(?:[-\s]\d{4})?$"); if (string.IsNullOrEmpty(model.ShippingZipCode) || !regex.IsMatch(model.ShippingZipCode)) { ModelState.AddModelError("ZipCode", "Invalid ZipCode"); } if (ModelState.IsValid) { Braintree.CustomerSearchRequest customerSearch = new Braintree.CustomerSearchRequest(); customerSearch.Email.Is(model.Email); Braintree.Customer customer = null; var customers = await _braintreeGateway.Customer.SearchAsync(customerSearch); if (customers.Ids.Any()) { customer = customers.FirstItem; } else { Braintree.CustomerRequest newCustomer = new Braintree.CustomerRequest { Email = model.Email }; var creationResult = await _braintreeGateway.Customer.CreateAsync(newCustomer); customer = creationResult.Target; } if (string.IsNullOrEmpty(model.CardToken)) { Braintree.CreditCard card = null; if (customer.CreditCards.Any()) { string lastFour = new string(model.CreditCardNumber.Skip(model.CreditCardNumber.Length - 4).ToArray()); card = customer.CreditCards.FirstOrDefault( x => x.ExpirationMonth == model.ExpirationMonth && x.ExpirationYear == model.ExpirationYear && x.LastFour == lastFour); } if (card == null) { Braintree.CreditCardRequest newCard = new Braintree.CreditCardRequest { CustomerId = customer.Id, CardholderName = model.CreditCardName, CVV = model.CreditCardVerificationValue, ExpirationMonth = model.ExpirationMonth, ExpirationYear = model.ExpirationYear, Number = model.CreditCardNumber }; var creationResult = await _braintreeGateway.CreditCard.CreateAsync(newCard); card = creationResult.Target; model.CardToken = card.Token; } } Braintree.TransactionRequest saleRequest = new Braintree.TransactionRequest(); saleRequest.Amount = model.CartLineItem.Sum(x => (x.ProductConfiguration.Product.UnitPrice * x.Quantity ?? .99m)); saleRequest.CustomerId = customer.Id; saleRequest.PaymentMethodToken = model.CardToken; saleRequest.BillingAddress = new Braintree.AddressRequest { StreetAddress = model.BillingAddress, PostalCode = model.BillingZipCode, Region = model.BillingState, Locality = model.BillingCity, CountryName = "United States of America", CountryCodeAlpha2 = "US", CountryCodeAlpha3 = "USA", CountryCodeNumeric = "840" }; var result = await _braintreeGateway.Transaction.SaleAsync(saleRequest); if (result.IsSuccess()) { //If model state is valid convert to order and show reciept return(this.RedirectToAction("Index", "Receipt")); } foreach (var error in result.Errors.All()) { ModelState.AddModelError(error.Code.ToString(), error.Message); } } return(View(model)); }
public async Task <ActionResult> Index(CheckoutModel model2) { using (MemberEntities1 entities = new MemberEntities1()) { //int orderId = int.Parse(Request.Cookies["OrderID"].Value); var cart = entities.Carts.Single(x => x.Id == model2.id); Order o = new Order(); cart.Orders.Add(o); if (ModelState.IsValid) { bool addressValidationSuccessful = true; bool validateAddress = false; string smartyStreetsAuthId = ConfigurationManager.AppSettings["SmartyStreets.AuthId"]; string smartyStreetsAuthToken = ConfigurationManager.AppSettings["SmartyStreets.AuthToken"]; Rentler.SmartyStreets.SmartyStreetsClient client = new Rentler.SmartyStreets.SmartyStreetsClient(smartyStreetsAuthId, smartyStreetsAuthToken); var addresses = await client.GetStreetAddressAsync(model2.BillingStreet1, null, model2.BillingStreet2, model2.BillingCity, model2.BillingState, model2.BillingPostalCode); if (addresses.Count() == 0) { ModelState.AddModelError("BillingStreet1", "Could not find exact or similiar address"); addressValidationSuccessful = false; } else { if (!string.IsNullOrEmpty(model2.BillingStreet1) && addresses.First().delivery_line_1 != model2.BillingStreet1) { ModelState.AddModelError("BillingStreet1", string.Format("Suggested Address: {0}", addresses.First().delivery_line_1)); addressValidationSuccessful = false; } if (!string.IsNullOrEmpty(model2.BillingStreet2) && addresses.First().delivery_line_2 != model2.BillingStreet2) { ModelState.AddModelError("BillingStreet2", string.Format("Suggested Address: {0}", addresses.First().delivery_line_2)); addressValidationSuccessful = false; } if (!string.IsNullOrEmpty(model2.BillingCity) && addresses.First().components.city_name != model2.BillingCity) { ModelState.AddModelError("BillingCity", string.Format("Suggested Address: {0}", addresses.First().components.city_name)); addressValidationSuccessful = false; } if (!string.IsNullOrEmpty(model2.BillingPostalCode) && addresses.First().components.zipcode != model2.BillingPostalCode) { ModelState.AddModelError("BillingPostalCode", string.Format("Suggested Address: {0}", addresses.First().components.zipcode)); addressValidationSuccessful = false; } if (!string.IsNullOrEmpty(model2.BillingState) && addresses.First().components.state_abbreviation != model2.BillingState) { ModelState.AddModelError("BillingState", string.Format("Suggested Address: {0}", addresses.First().components.state_abbreviation)); addressValidationSuccessful = false; } } if (addressValidationSuccessful || !validateAddress) { //TODO: Validate the credit card - if it errors out, add a model error and display it to the user string publicKey = ConfigurationManager.AppSettings["Braintree.PublicKey"]; string privateKey = ConfigurationManager.AppSettings["Braintree.PrivateKey"]; string environment = ConfigurationManager.AppSettings["Braintree.Environment"]; string merchantId = ConfigurationManager.AppSettings["Braintree.MerchantId"]; Braintree.BraintreeGateway braintree = new Braintree.BraintreeGateway(environment, merchantId, publicKey, privateKey); int userId = -1; if (string.IsNullOrEmpty(User.Identity.Name)) { userId = 34; var customer = braintree.Customer.Find(userId.ToString()); Braintree.CustomerRequest request = new Braintree.CustomerRequest(); request.CreditCard = new Braintree.CreditCardRequest(); request.CreditCard.Number = model2.CreditCardNumber; request.CreditCard.CardholderName = model2.CreditCardName; request.CreditCard.ExpirationMonth = (model2.CreditCardExpirationMonth).ToString().PadLeft(2, '0'); request.CreditCard.ExpirationYear = model2.CreditCardExpirationYear.ToString(); var customerResult = braintree.Customer.Update(userId.ToString(), request); Braintree.TransactionRequest sale = new Braintree.TransactionRequest(); sale.Amount = decimal.Parse(cart.saleTotal.Replace("USD", string.Empty)); sale.CustomerId = customerResult.Target.Id; sale.PaymentMethodToken = customerResult.Target.DefaultPaymentMethod.Token; braintree.Transaction.Sale(sale); o.FirstName = model2.FirstName; o.LastName = model2.LastName; o.EmailAddress = model2.EmailAddress; o.PhoneNumber = model2.PhoneNumber; o.BillingCity = model2.BillingCity; o.BillingPostalCode = model2.BillingPostalCode; o.BillingReceipient = model2.BillingReceipient; o.BillingStreet1 = model2.BillingStreet1; o.BillingStreet2 = model2.BillingStreet2; o.BillingState = model2.BillingState; o.DateCreated = DateTime.UtcNow; o.DateLastModified = DateTime.UtcNow; entities.SaveChanges(); return(RedirectToAction("Index", "Receipt", new { id = o.OrderId })); } else { using (MemberEntities1 e = new MemberEntities1()) { userId = e.CustomerLists.Single(x => x.EmailAddress == User.Identity.Name).ID; } var customer = braintree.Customer.Find(userId.ToString()); Braintree.CustomerRequest request = new Braintree.CustomerRequest(); request.CreditCard = new Braintree.CreditCardRequest(); request.CreditCard.Number = model2.CreditCardNumber; request.CreditCard.CardholderName = model2.CreditCardName; request.CreditCard.ExpirationMonth = (model2.CreditCardExpirationMonth).ToString().PadLeft(2, '0'); request.CreditCard.ExpirationYear = model2.CreditCardExpirationYear.ToString(); var customerResult = braintree.Customer.Update(userId.ToString(), request); Braintree.TransactionRequest sale = new Braintree.TransactionRequest(); sale.Amount = decimal.Parse(cart.saleTotal.Replace("USD", string.Empty)); sale.CustomerId = customerResult.Target.Id; sale.PaymentMethodToken = customerResult.Target.DefaultPaymentMethod.Token; braintree.Transaction.Sale(sale); o.FirstName = model2.FirstName; o.LastName = model2.LastName; o.EmailAddress = model2.EmailAddress; o.PhoneNumber = model2.PhoneNumber; o.BillingCity = model2.BillingCity; o.BillingPostalCode = model2.BillingPostalCode; o.BillingReceipient = model2.BillingReceipient; o.BillingStreet1 = model2.BillingStreet1; o.BillingStreet2 = model2.BillingStreet2; o.BillingState = model2.BillingState; o.DateCreated = DateTime.UtcNow; o.DateLastModified = DateTime.UtcNow; entities.SaveChanges(); return(RedirectToAction("Index", "Receipt", new { id = o.OrderId })); } } } } return(View(model2)); }
public async System.Threading.Tasks.Task <Microsoft.AspNetCore.Mvc.IActionResult> Checkout(Models.Order order, string braintreeNonce) { if (ModelState.IsValid) { Braintree.CustomerRequest customer = new Braintree.CustomerRequest(); // if (User.Identity.IsAuthenticated) // { // var user = _context.Users.Single(x => x.UserName == User.Identity.Name); // customer.FirstName = user.FirstName; // customer.LastName = user.LastName; // } customer.Email = order.Email; customer.Phone = order.Phone; Braintree.TransactionRequest transactionRequest = new Braintree.TransactionRequest { Amount = cart.Lines.Sum(cartItem => cartItem.Quantity * cartItem.Product.Price), PaymentMethodNonce = order.BraintreeNonce, Customer = customer, LineItems = cart.Lines.Select(cartItem => new Braintree.TransactionLineItemRequest { UnitAmount = cartItem.Product.Price, Name = cartItem.Product.Name, Description = cartItem.Product.Description, Quantity = cartItem.Quantity, TotalAmount = cartItem.Quantity * cartItem.Product.Price, ProductCode = cartItem.ProductID.ToString(), LineItemKind = Braintree.TransactionLineItemKind.DEBIT }).ToArray() }; var transactionResult = await _braintreeGateway.Transaction.SaleAsync(transactionRequest); //should check for result of transactionResult here, but skipping for sake of demo'ng rest of code order.PlacementDate = System.DateTime.Now; order.TrackingNumber = System.Guid.NewGuid().ToString().Substring(0, 8); order.SubTotal = cart.Lines.Sum(x => x.Quantity * x.Product.Price); order.Total = cart.Lines.Sum(x => x.Quantity * x.Product.Price); order.Lines = cart.Lines.ToArray(); repository.SaveOrder(order); if (debug != true) { string HtmlLines = ""; foreach (Models.CartLine item in order.Lines) { HtmlLines = HtmlLines + "<li>" + item.ProductName + " (quantity: " + item.Quantity + ")</li>"; } var message = new SendGrid.Helpers.Mail.SendGridMessage { From = new SendGrid.Helpers.Mail.EmailAddress("*****@*****.**", "Chalky's Billiard Store Administration"), Subject = "Receipt for order #" + order.TrackingNumber, HtmlContent = "<h2>Thanks!</h2><p>Thanks for placing your order.</p><p>We'll ship your goods as soon as possible.</p><br/><h2>Order details for Order #" + order.TrackingNumber + "</h2>Order Date: " + order.PlacementDate + " CT <ul>" + HtmlLines + "</ul>" }; message.AddTo(order.Email); var result = await _sendGridClient.SendEmailAsync(message); //This can be helpful debug code, but we wont display it out to the user: var responseBody = await result.DeserializeResponseBodyAsync(result.Body); if (responseBody != null) { foreach (var body in responseBody) { System.Console.WriteLine(body.Key + ":" + body.Value); } } } return(RedirectToAction(nameof(Completed), new { id = order.OrderID })); } else { ViewBag.BraintreeClientToken = await _braintreeGateway.ClientToken.GenerateAsync(); return(View(order)); } }