コード例 #1
0
        /// <summary>
        /// Gets the currency.
        /// </summary>
        /// <param name="shoppingCart">The shopping cart.</param>
        /// <returns>Returns currency</returns>
        protected virtual string GetCurrency(DomainModel.Carts.ShoppingCart shoppingCart)
        {
            GeneralSettings settings = Sitecore.Ecommerce.Context.Entity.GetConfiguration <GeneralSettings>();

            if (settings != null && settings.DisplayCurrencyOnPrices)
            {
                return(shoppingCart.Currency.Title);
            }

            return(string.Empty);
        }
コード例 #2
0
        /// <summary>
        /// Fills the shipping options.
        /// </summary>
        /// <exception cref="ArgumentException">List of shipping methods is empty.</exception>
        protected virtual void FillShippingOptions()
        {
            DomainModel.Carts.ShoppingCart shoppingCart = Sitecore.Ecommerce.Context.Entity.GetInstance <DomainModel.Carts.ShoppingCart>();
            AddressInfo info = this.GetUserShippingInfo();

            if (info != null)
            {
                IEntityProvider <ShippingProvider> shippingMethodProvider = Sitecore.Ecommerce.Context.Entity.Resolve <IEntityProvider <ShippingProvider> >();
                Assert.IsNotNull(shippingMethodProvider, "Shipping methods provider is null");

                IEnumerable <ShippingProvider> methods = shippingMethodProvider.GetAll();

                if (!IsPostBack)
                {
                    foreach (ShippingProvider method in methods)
                    {
                        ListItem item = new ListItem
                        {
                            Value = method.Code,
                            Text  = string.Format("{0} - {1}{2}", method.Name, this.GetCurrency(shoppingCart), method.Price)
                        };

                        if (method.Code == shoppingCart.ShippingProvider.Code)
                        {
                            item.Selected = true;
                        }

                        this.ddlShippingMethods.Items.Add(item);
                    }

                    if (shoppingCart.ShippingProvider != null && string.IsNullOrEmpty(shoppingCart.ShippingProvider.Code) && methods.Count() > 0)
                    {
                        shoppingCart.ShippingProvider = methods.FirstOrDefault();
                        shoppingCart.ShippingPrice    = shoppingCart.ShippingProvider.Price;
                        Sitecore.Ecommerce.Context.Entity.SetInstance(shoppingCart);
                    }
                }
                else
                {
                    if (this.ddlShippingMethods.SelectedItem != null)
                    {
                        shoppingCart.ShippingProvider = methods.FirstOrDefault(m => m.Code == this.ddlShippingMethods.SelectedItem.Value);
                        shoppingCart.ShippingPrice    = shoppingCart.ShippingProvider.Price;
                        Sitecore.Ecommerce.Context.Entity.SetInstance(shoppingCart);
                    }
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// Handles the Load event of the Page control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
        /// <exception cref="ValidatorException">Order could not be created.</exception>
        protected void Page_Load(object sender, EventArgs e)
        {
            DomainModel.Carts.ShoppingCart shoppingCart = Sitecore.Ecommerce.Context.Entity.GetInstance <DomainModel.Carts.ShoppingCart>();
            if (string.IsNullOrEmpty(shoppingCart.PaymentSystem.Code))
            {
                return;
            }

            PaymentUrlResolver paymentUrlResolver = new PaymentUrlResolver();
            PaymentArgs        paymentArgs        = new PaymentArgs
            {
                PaymentUrls  = paymentUrlResolver.Resolve(),
                ShoppingCart = shoppingCart
            };

            ITransactionData transactionData = Sitecore.Ecommerce.Context.Entity.Resolve <ITransactionData>();

            PaymentProvider paymentProvider = Sitecore.Ecommerce.Context.Entity.Resolve <PaymentProvider>(shoppingCart.PaymentSystem.Code);

            DomainModel.Payments.PaymentSystem paymentSystem = shoppingCart.PaymentSystem;

            try
            {
                paymentProvider.ProcessCallback(paymentSystem, paymentArgs);
            }
            catch (Exception exception)
            {
                IOrderManager <Order> orderManager = Sitecore.Ecommerce.Context.Entity.Resolve <IOrderManager <Order> >();
                shoppingCart.OrderNumber = orderManager.GenerateOrderNumber();
                transactionData.DeletePersistentValue(shoppingCart.OrderNumber);

                HttpContext.Current.Session["paymentErrorMessage"] = exception.Message;
                this.Response.Redirect(paymentArgs.PaymentUrls.FailurePageUrl);

                return;
            }

            switch (paymentProvider.PaymentStatus)
            {
            case PaymentStatus.Succeeded:
            {
                IOrderManager <Order> orderManager = Sitecore.Ecommerce.Context.Entity.Resolve <IOrderManager <Order> >();
                Order order = orderManager.CreateOrder(shoppingCart);

                if (order != null)
                {
                    // Redirect to order confirmation page
                    string    orderId  = shoppingCart.OrderNumber;
                    ICheckOut checkOut = Sitecore.Ecommerce.Context.Entity.Resolve <ICheckOut>();
                    if (checkOut is CheckOut)
                    {
                        ((CheckOut)checkOut).ResetCheckOut();
                    }

                    if (MainUtil.IsLoggedIn())
                    {
                        orderId = string.Format("orderid={0}", orderId);
                    }
                    else
                    {
                        string encryptKey = Crypto.EncryptTripleDES(orderId, "5dfkjek5");
                        orderId = string.Format("key={0}", Uri.EscapeDataString(encryptKey));
                    }

                    this.StartOrderCreatedPipeline(order.OrderNumber);

                    if (!string.IsNullOrEmpty(orderId))
                    {
                        UrlString url = new UrlString(paymentArgs.PaymentUrls.SuccessPageUrl);
                        url.Append(new UrlString(orderId));
                        this.Response.Redirect(url.ToString());
                    }
                }
                else
                {
                    IOrderManager <Order> orderProvider = Sitecore.Ecommerce.Context.Entity.Resolve <IOrderManager <Order> >();
                    shoppingCart.OrderNumber = orderProvider.GenerateOrderNumber();
                    transactionData.DeletePersistentValue(shoppingCart.OrderNumber);

                    HttpContext.Current.Session["paymentErrorMessage"] = "Order could not be created.";
                    this.Response.Redirect(paymentArgs.PaymentUrls.FailurePageUrl);
                }

                break;
            }

            case PaymentStatus.Canceled:
            {
                IOrderManager <Order> orderProvider = Sitecore.Ecommerce.Context.Entity.Resolve <IOrderManager <Order> >();
                shoppingCart.OrderNumber = orderProvider.GenerateOrderNumber();
                transactionData.DeletePersistentValue(shoppingCart.OrderNumber);

                HttpContext.Current.Session["paymentErrorMessage"] = "Payment has been aborted by user.";
                this.Response.Redirect(paymentArgs.PaymentUrls.CancelPageUrl);

                break;
            }

            case PaymentStatus.Failure:
            {
                IOrderManager <Order> orderProvider = Sitecore.Ecommerce.Context.Entity.Resolve <IOrderManager <Order> >();
                shoppingCart.OrderNumber = orderProvider.GenerateOrderNumber();
                transactionData.DeletePersistentValue(shoppingCart.OrderNumber);

                this.Response.Redirect(paymentArgs.PaymentUrls.FailurePageUrl);

                break;
            }
            }
        }
コード例 #4
0
        /// <summary>
        /// Handles the Load event of the Page control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
        /// <exception cref="ArgumentException">List of payment methods is empty.</exception>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (this.IsPostBack)
            {
                return;
            }

            // Checks if the user has appropiate access.
            ICheckOut checkOut = Sitecore.Ecommerce.Context.Entity.GetInstance <ICheckOut>();

            if ((checkOut == null) || !(checkOut is CheckOut) || !((CheckOut)checkOut).BeginCheckOut || !((CheckOut)checkOut).NameAndAddressDone || !((CheckOut)checkOut).DeliveryDone)
            {
                this.Response.Redirect("/");
            }

            this.lblFormTitle.Text       = Translate.Text(Texts.Payment);
            this.lblFormDescription.Text = Translate.Text(Texts.PleaseSelectAPaymentMethod);
            this.lblpaymentMethods.Text  = string.Concat(Translate.Text(Texts.PaymentMethod), ": ");

            ListItem item = new ListItem {
                Text = "      ", Value = "nonSelected", Selected = true
            };

            this.ddlPaymentMethods.Items.Insert(0, item);

            this.btnConfirm.Text = Translate.Text(Texts.ConfirmPayment);

            IOrderManager <Order> orderProvider = Sitecore.Ecommerce.Context.Entity.Resolve <IOrderManager <Order> >();

            DomainModel.Carts.ShoppingCart shoppingCart = Sitecore.Ecommerce.Context.Entity.GetInstance <DomainModel.Carts.ShoppingCart>();

            // Sets the ordernumber.
            if (string.IsNullOrEmpty(shoppingCart.OrderNumber))
            {
                string orderno = orderProvider.GenerateOrderNumber();
                if (string.IsNullOrEmpty(orderno))
                {
                    orderno = DateTime.Now.ToString("yyyyMMdd HHmmss");
                }

                shoppingCart.OrderNumber = orderno;

                Sitecore.Ecommerce.Context.Entity.SetInstance(shoppingCart);
            }

            IEntityProvider <PaymentSystem> paymentMethodProvider = Sitecore.Ecommerce.Context.Entity.Resolve <IEntityProvider <PaymentSystem> >();

            Assert.IsNotNull(paymentMethodProvider, "Payment methods provider is null");

            IEnumerable <PaymentSystem> paymentMethods = paymentMethodProvider.GetAll();

            if (paymentMethods.IsNullOrEmpty())
            {
                throw new ArgumentException("List of payment methods is empty.");
            }

            this.repeaterPaymentMethods.DataSource = paymentMethods;
            this.repeaterPaymentMethods.DataBind();

            this.AddOnlinePayMethods();
            this.AddOfflinePayMethods();
            this.SetDefaultPaymentMethod();
        }