예제 #1
0
        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));
        }
예제 #2
0
        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"));
        }
예제 #3
0
        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);
        }
예제 #4
0
        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());
        }
예제 #5
0
        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"));
        }
예제 #6
0
        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);
        }
예제 #7
0
        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"));
        }