/// <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); }
/// <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); } } } }
/// <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; } } }
/// <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(); }