public ActionResult SendMoney(string purchaseOrder = "", double amount = 0) { _wca.GetContext().Layout.IsCartPage = true; var checkoutData = new StripeCheckoutViewModel { Amount = amount, PurchaseOrder = purchaseOrder, CheckoutItems = new CheckoutItem[] { } }; checkoutData = GetCheckoutData(checkoutData); return(View(checkoutData)); }
public ActionResult SendMoney(StripeCheckoutViewModel stripeData, string next) { var checkoutData = GetCheckoutData(stripeData); if (AnyEmptyString( checkoutData.Email, checkoutData.BillingAddress.FirstName, checkoutData.BillingAddress.LastName, checkoutData.BillingAddress.Address1, checkoutData.BillingAddress.City) || checkoutData.Amount <= 0) { return(RedirectToAction("SendMoney")); } return(RedirectToAction("Pay")); }
public StripeCheckoutViewModel DecryptCheckoutData(string checkoutData) { var binaryEncryptedData = Convert.FromBase64String(checkoutData); var decryptedData = MachineKey.Unprotect(binaryEncryptedData, CryptoPurpose); if (decryptedData == null) { return(null); } var formatter = new BinaryFormatter(); Tuple <CheckoutItem[], decimal, string, string, TaxAmount, string, string> data; using (var stream = new MemoryStream(decryptedData)) { data = (Tuple <CheckoutItem[], decimal, string, string, TaxAmount, string, string>) formatter.Deserialize(stream); } var cartItems = data.Item1; var shippingOption = new ShippingOption { Price = data.Item2, Description = data.Item3, ShippingCompany = data.Item4 }; var taxes = data.Item5; var country = data.Item6; var zipCode = data.Item7; var stripeData = new StripeCheckoutViewModel { BillingAddress = new Address { Country = country, PostalCode = zipCode }, ShippingAddress = new Address { Country = country, PostalCode = zipCode }, CheckoutItems = cartItems, ShippingOption = shippingOption, Taxes = taxes }; return(stripeData); }
public ActionResult Payment(StripeCheckoutViewModel viewModel) { if (ModelState.IsValid) { var apiKey = _domainService.GetSettingsValue(BL.SettingsKey.stripeApiKey, DomainID); var result = _stripeService.ProcessPayment(new StripeCheckoutModel { CreditCardNumber = viewModel.CreditCardNumber, Cvv = viewModel.Cvv, ExpiryMonth = viewModel.ExpiryMonth, ExpiryYear = viewModel.ExpiryYear, OrderId = viewModel.OrderId }, apiKey, DomainID); if (!result.IsError) { return(RedirectToAction("ThankYou", "Website", new { orderID = viewModel.OrderId })); } ModelState.AddModelError("", result.Message); } return(View()); }
public ActionResult Ship(StripeCheckoutViewModel stripeData, string next, string back) { if (!String.IsNullOrWhiteSpace(back)) { return(RedirectToAction("Index", "ShoppingCart")); } var checkoutData = GetCheckoutData(stripeData); if (AnyEmptyString( checkoutData.Email, checkoutData.BillingAddress.FirstName, checkoutData.BillingAddress.LastName, checkoutData.BillingAddress.Address1, checkoutData.BillingAddress.City, checkoutData.ShippingAddress.FirstName, checkoutData.ShippingAddress.LastName, checkoutData.ShippingAddress.Address1, checkoutData.ShippingAddress.City )) { return(RedirectToAction("Ship")); } return(RedirectToAction("Pay")); }
private StripeCheckoutViewModel GetCheckoutData(StripeCheckoutViewModel updateModel = null) { var checkoutData = TempData[NwazetStripeCheckout] as StripeCheckoutViewModel ?? new StripeCheckoutViewModel { CheckoutItems = new CheckoutItem[0], ShippingOption = new ShippingOption(), ShippingAddress = new Address(), BillingAddress = new Address() }; if (updateModel != null) { if (updateModel.CheckoutItems != null) { checkoutData.CheckoutItems = updateModel.CheckoutItems; } if (updateModel.ShippingOption != null) { checkoutData.ShippingOption = updateModel.ShippingOption; } if (updateModel.BillingAddress != null) { checkoutData.BillingAddress = updateModel.BillingAddress; } if (updateModel.ShippingAddress != null) { checkoutData.ShippingAddress = updateModel.ShippingAddress; } if (updateModel.Taxes != null) { checkoutData.Taxes = updateModel.Taxes; } if (updateModel.Email != null) { checkoutData.Email = updateModel.Email; } if (updateModel.Phone != null) { checkoutData.Phone = updateModel.Phone; } if (updateModel.SpecialInstructions != null) { checkoutData.SpecialInstructions = updateModel.SpecialInstructions; } if (updateModel.Token != null) { checkoutData.Token = updateModel.Token; } if (!String.IsNullOrWhiteSpace(updateModel.PurchaseOrder)) { checkoutData.PurchaseOrder = updateModel.PurchaseOrder; } if (updateModel.Amount > 0) { checkoutData.Amount = updateModel.Amount; } } TempData[NwazetStripeCheckout] = checkoutData; TempData.Keep(NwazetStripeCheckout); return(checkoutData); }
public ActionResult Pay(StripeCheckoutViewModel stripeData, string stripeToken, string next, string back) { var checkoutData = GetCheckoutData(stripeData); if (!String.IsNullOrWhiteSpace(back)) { return(RedirectToAction(checkoutData.Amount >= 0 ? "SendMoney" : "Ship")); } var subTotal = 0.0; var total = checkoutData.Amount; var isProductOrder = checkoutData.CheckoutItems.Any(); if (isProductOrder) { var taxes = checkoutData.Taxes == null ? 0 : checkoutData.Taxes.Amount; subTotal = checkoutData.CheckoutItems.Sum(i => i.Price * i.Quantity + i.LinePriceAdjustment); total = subTotal + taxes + checkoutData.ShippingOption.Price; } // Call Stripe to charge card var stripeCharge = _stripeService.Charge(stripeToken, total); if (stripeCharge.Error != null) { Logger.Error(stripeCharge.Error.Type + ": " + stripeCharge.Error.Message); _workflowManager.TriggerEvent("OrderError", null, () => new Dictionary <string, object> { { "CheckoutError", stripeCharge.Error } }); if (stripeCharge.Error.Type == "card_error") { return(Pay(stripeCharge.Error.Message)); } throw new InvalidOperationException(stripeCharge.Error.Type + ": " + stripeCharge.Error.Message); } var userId = -1; var currentUser = _wca.GetContext().CurrentUser; if (currentUser != null) { userId = currentUser.Id; } var order = _orderService.CreateOrder( stripeCharge, checkoutData.CheckoutItems, subTotal, total, checkoutData.Taxes, checkoutData.ShippingOption, checkoutData.ShippingAddress, checkoutData.BillingAddress, checkoutData.Email, checkoutData.Phone, checkoutData.SpecialInstructions, OrderPart.Pending, null, _stripeService.IsInTestMode(), userId, total, checkoutData.PurchaseOrder); TempData["OrderId"] = order.Id; _workflowManager.TriggerEvent( isProductOrder ? "NewOrder" : "NewPayment", order, () => new Dictionary <string, object> { { "Content", order }, { "Order", order } }); order.LogActivity(OrderPart.Event, T("Order created.").Text); // Clear checkout info from temp data TempData.Remove(NwazetStripeCheckout); return(RedirectToAction("Confirmation", "OrderSsl")); }