Exemplo n.º 1
0
        /// <summary>
        /// Adds payment info to a cart
        /// </summary>
        /// <param name="storefront">The Storefront Context</param>
        /// <param name="visitorContext">The Visitor Context</param>
        /// <param name="cart">the cart</param>
        /// <param name="info">the payment info</param>
        /// <param name="party">the party info</param>
        /// <param name="refreshCart">if set to <c>true</c> the cart will be re-calculated using the Commerce Server pipelines.</param>
        /// <returns>
        /// the updated cart
        /// </returns>
        protected virtual CartResult AddPaymentInfoToCart([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext, [NotNull] CommerceCart cart, [NotNull] PaymentInfo info, [NotNull] CommerceParty party, bool refreshCart = false)
        {
            Assert.ArgumentNotNull(cart, "cart");
            Assert.ArgumentNotNull(info, "info");
            Assert.ArgumentNotNull(party, "party");
            Assert.ArgumentCondition(info is CommerceCreditCardPaymentInfo, "info", "info is CommerceCreditCardPaymentInfo");

            var creditCardInfo = info as CommerceCreditCardPaymentInfo;

            if (creditCardInfo != null)
            {
                creditCardInfo.PartyID = party.ExternalId;
                creditCardInfo.Amount  = cart.Total.Amount;
            }

            var request = new AddPaymentInfoRequest(cart, new List <PaymentInfo> {
                creditCardInfo
            });

            request.RefreshCart(refreshCart);
            var result = this.CartServiceProvider.AddPaymentInfo(request);

            if (!result.Success)
            {
                Helpers.LogSystemMessages(result.SystemMessages, result);
            }

            return(result);
        }
        public ActionResult Add(CommerceParty party)
        {
            // Always set external id to some magic number (Party in the loaded cart does not contain an ExternalId)
            // the AddPaymentInfoToCart processor looks for a ExternalId == PartyId
            party.ExternalId = Guid.NewGuid().ToString("D");

            var parties = new List <Sitecore.Commerce.Entities.Party> {
                party
            };

            var cart = Cart;

            cart.Parties = parties;

            var request = new AddPaymentInfoRequest(cart, new List <PaymentInfo>
            {
                new HeidelpayPaymentInfo
                {
                    Amount          = Cart.Total.Amount,
                    PaymentMethodID = "c16ce432-b7e6-44ec-a9fc-01c4fc5caaca",
                    PartyID         = party.ExternalId
                }
            });

            var result = csp.AddPaymentInfo(request);

            if (!result.Success)
            {
                throw new InvalidOperationException(string.Join(",", result.SystemMessages.Select(x => x.Message)));
            }

            return(Redirect(LinkManager.GetItemUrl(Sitecore.Context.Item)));
        }
        public ManagerResponse <AddPaymentInfoResult, Cart> AddPaymentInfo(string shopName, Cart cart, PartyEntity billingPartyEntity, FederatedPaymentArgs federatedPaymentArgs)
        {
            List <PaymentInfo> payments = new List <PaymentInfo>();

            cart = this.RemoveAllPaymentMethods(cart).Result;

            if (federatedPaymentArgs != null && !string.IsNullOrEmpty(federatedPaymentArgs.CardToken) && billingPartyEntity != null)
            {
                CommerceParty commerceParty = this.connectEntityMapper.MapToCommerceParty(billingPartyEntity);
                commerceParty.PartyId    = Guid.NewGuid().ToString().Replace("-", string.Empty);
                commerceParty.ExternalId = commerceParty.PartyId;
                if (string.IsNullOrWhiteSpace(commerceParty.Name))
                {
                    commerceParty.Name = $"billing{commerceParty.PartyId}";
                }
                cart.Parties.Add(commerceParty);
                FederatedPaymentInfo federatedPaymentInfo = this.connectEntityMapper.MapToFederatedPaymentInfo(federatedPaymentArgs);
                federatedPaymentInfo.PartyID = commerceParty.PartyId;
                federatedPaymentInfo.Amount  = cart.Total.Amount;
                payments.Add(federatedPaymentInfo);
            }

            var request = new AddPaymentInfoRequest(cart, payments);
            AddPaymentInfoResult paymentInfoResult = this.cartServiceProvider.AddPaymentInfo(request);

            if (!paymentInfoResult.Success)
            {
                paymentInfoResult.SystemMessages.LogSystemMessages(paymentInfoResult);
            }

            return(new ManagerResponse <AddPaymentInfoResult, Cart>(paymentInfoResult, paymentInfoResult.Cart));
        }
Exemplo n.º 4
0
        public ManagerResponse <CartResult, CommerceCart> SetPaymentMethods(string userId, PaymentInputModel inputModel)
        {
            Assert.ArgumentNotNull(inputModel, nameof(inputModel));

            var result = new AddPaymentInfoResult {
                Success = false
            };
            var response = GetCart(userId, true);

            if (!response.ServiceProviderResult.Success || response.Result == null)
            {
                return(new ManagerResponse <CartResult, CommerceCart>(result, response.Result));
            }

            var payments = new List <PaymentInfo>();
            var cart     = (CommerceCart)response.ServiceProviderResult.Cart;

            if (!string.IsNullOrEmpty(inputModel.CreditCardPayment?.PaymentMethodID) && inputModel.BillingAddress != null)
            {
                var billingParty = inputModel.BillingAddress.ToParty();
                var parties      = cart.Parties.ToList();
                parties.Add(billingParty);
                cart.Parties = parties.AsSafeReadOnly();

                payments.Add(inputModel.CreditCardPayment.ToCreditCardPaymentInfo());
            }

            if (!string.IsNullOrEmpty(inputModel.FederatedPayment?.CardToken) && inputModel.BillingAddress != null)
            {
                var billingParty = inputModel.BillingAddress.ToParty();
                var parties      = cart.Parties.ToList();
                parties.Add(billingParty);
                cart.Parties = parties.AsSafeReadOnly();

                var federatedPayment = inputModel.FederatedPayment.ToFederatedPaymentInfo();
                federatedPayment.PartyID = billingParty.PartyId;
                payments.Add(federatedPayment);
            }

            if (!string.IsNullOrEmpty(inputModel.GiftCardPayment?.PaymentMethodID))
            {
                payments.Add(inputModel.GiftCardPayment.ToGiftCardPaymentInfo());
            }

            var request = new AddPaymentInfoRequest(cart, payments);

            result = CartServiceProvider.AddPaymentInfo(request);
            result.WriteToSitecoreLog();

            return(new ManagerResponse <CartResult, CommerceCart>(result, result.Cart as CommerceCart));
        }
Exemplo n.º 5
0
        public void ShouldAddPaymentInfoToCart()
        {
            var guid    = Guid.NewGuid();
            var request = new AddPaymentInfoRequest(
                new Cart()
            {
                ExternalId = guid.ToString(),
                ShopName   = "my store"
            },
                new List <PaymentInfo>()
            {
                new PaymentInfo()
                {
                    PaymentProviderID = "Payments.PurchaseOrder",
                    PaymentMethodID   = "Purchase Order"
                }
            });

            var result = new AddPaymentInfoResult();
            var args   = new ServicePipelineArgs(request, result);

            _client.AddPaymentInfo(guid, Arg.Any <PaymentInfoModel>(), request.Cart.ShopName).Returns(new PaymentInfoModelResponse()
            {
                Success = true,
                Result  = new PaymentInfoModel()
                {
                    SystemName = "Payments.PurchaseOrder",
                    MethodName = "Purchase Order"
                }
            });

            _processor.Process(args);

            result.Success.Should().BeTrue();
            result.Payments.Should().HaveCount(1);
            result.Cart.Payment.Should().HaveCount(1);
            result.Payments.ElementAt(0).PaymentProviderID.Should().Be("Payments.PurchaseOrder");
            result.Payments.ElementAt(0).PaymentMethodID.Should().Be("Purchase Order");
        }
        public ActionResult CreatePayment(PaymentPickerViewModel createPaymentViewModel)
        {
            var cartService = new CartServiceProvider();
            var cart        = GetCart();

            // First remove all the existing payment info's associated with the cart.
            var removeRequest = new RemovePaymentInfoRequest(cart, cart.Payment.ToList());

            cartService.RemovePaymentInfo(removeRequest);

            var paymentList = new List <PaymentInfo>
            {
                new PaymentInfo()
                {
                    PaymentMethodID = createPaymentViewModel.SelectedPaymentMethodId.ToString(),
                }
            };

            var addRequest = new AddPaymentInfoRequest(cart, paymentList);

            cartService.AddPaymentInfo(addRequest);

            return(Redirect("/preview"));
        }
Exemplo n.º 7
0
        /// <summary>
        /// Adds payment info to a cart
        /// </summary>
        /// <param name="storefront">The Storefront Context</param>
        /// <param name="visitorContext">The Visitor Context</param>
        /// <param name="cart">the cart</param>
        /// <param name="info">the payment info</param>
        /// <param name="party">the party info</param>
        /// <param name="refreshCart">if set to <c>true</c> the cart will be re-calculated using the Commerce Server pipelines.</param>
        /// <returns>
        /// the updated cart
        /// </returns>
        public virtual ManagerResponse<CartResult, CommerceCart> AddPaymentInfoToCart([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext, [NotNull] CommerceCart cart, [NotNull] PaymentInfo info, [NotNull] CommerceParty party, bool refreshCart = false)
        {
            Assert.ArgumentNotNull(cart, "cart");
            Assert.ArgumentNotNull(info, "info");
            Assert.ArgumentNotNull(party, "party");
            Assert.ArgumentCondition(info is CommerceCreditCardPaymentInfo, "info", "info is CommerceCreditCardPaymentInfo");

            var creditCardInfo = info as CommerceCreditCardPaymentInfo;
            if (creditCardInfo != null)
            {
                creditCardInfo.PartyID = party.ExternalId;
                creditCardInfo.Amount = cart.Total.Amount;
            }

            var request = new AddPaymentInfoRequest(cart, new List<PaymentInfo> { creditCardInfo });
            request.RefreshCart(refreshCart);
            var result = this.CartServiceProvider.AddPaymentInfo(request);
            if (!result.Success)
            {
                Helpers.LogSystemMessages(result.SystemMessages, result);
            }

            return new ManagerResponse<CartResult, CommerceCart>(result, result.Cart as CommerceCart);
        }
Exemplo n.º 8
0
        public ActionResult BasketToOrder()
        {
            var shopName =
                "CommerceEngineDefaultStorefront"; // Better use a configured store, not CommerceEngineDefaultStorefront as it's not really configured
            var cartName = "Default";
            var userId   = "Entity-Customer-34d758ae2d2d472d89014954d0cc4440";
            var domain   = Context.User.Domain;

            // Get a cart
            var loadCartRequest = new LoadCartByNameRequest(shopName, cartName, userId);
            var cartResult      = _cartServiceProvider.LoadCart(loadCartRequest);

            Assert.IsTrue(cartResult.Success, String.Join("|", cartResult.SystemMessages.Select(e => e.Message)));

            var cart = cartResult.Cart;

            var quantity = 0.0M; // Get initial quantity

            if (cart.Lines.Count > 0)
            {
                quantity = cart.Lines[0].Quantity;
            }

            // Add a cart line: note that adding a line for the same product twice will update the quantity, not add a line: this is configured in commerce engine (look for RollupCartLinesPolicy)
            var lines    = new List <CartLine>();
            var cartLine = new CommerceCartLine("Neu", "47838_aus_allen_sternen_liebe_cd", "", 1.0M);

            lines.Add(cartLine);

            var addLinesRequest = new AddCartLinesRequest(cart, lines);
            var addLinesResult  = _cartServiceProvider.AddCartLines(addLinesRequest);

            Assert.IsTrue(addLinesResult.Success,
                          String.Join("|", addLinesResult.SystemMessages.Select(e => e.Message)));

            var updatedCart = addLinesResult.Cart;

            Assert.IsTrue(updatedCart.Lines.Count > 0, "Updated cart should have at least one line");
            Assert.IsTrue(quantity + 1 == updatedCart.Lines[0].Quantity, "new quantity should be one more than before");

            var reloadCartRequest  = new LoadCartByNameRequest(shopName, cartName, userId);
            var reloadedCartResult = _cartServiceProvider.LoadCart(reloadCartRequest);

            Assert.IsTrue(reloadedCartResult.Success,
                          String.Join("|", reloadedCartResult.SystemMessages.Select(e => e.Message)));

            var reloadedCart = reloadedCartResult.Cart;

            Assert.IsTrue(reloadedCart.Lines.Count > 0, "Reloaded cart should have at least one line");
            Assert.IsTrue(quantity + 1 == reloadedCart.Lines[0].Quantity,
                          "reloaded cart quantity should be one more than before");

            // Switching cart :-)
            cart = reloadedCart;

            // Add a shipping address
            CommerceParty shippingAddress = new CommerceParty();

            shippingAddress.ExternalId    = "Shipping";
            shippingAddress.PartyId       = shippingAddress.ExternalId;
            shippingAddress.Name          = "Shipping";
            shippingAddress.Address1      = "Barbara Strozzilaan 201";
            shippingAddress.Company       = "Sitecore";
            shippingAddress.Country       = "Canada";
            shippingAddress.State         = "ON"; // State is checked by commerce engine: you can configure it in Commerce
            shippingAddress.CountryCode   = "CA"; // Country is checked by commerce engine
            shippingAddress.LastName      = "Werkman";
            shippingAddress.FirstName     = "Erwin";
            shippingAddress.City          = "Amsterdam";
            shippingAddress.ZipPostalCode = "1030AC";

            var cartParties = cart.Parties.ToList();

            cartParties.Add(shippingAddress);
            cart.Parties = cartParties;

            ShippingOptionType shippingOptionType = ShippingOptionType.ShipToAddress;

            ICollection <CommerceShippingInfo> shippingInfoList = new List <CommerceShippingInfo>();

            var commerceShippingInfo = new CommerceShippingInfo();

            commerceShippingInfo.ShippingOptionType = ShippingOptionType.ShipToAddress;
            commerceShippingInfo.PartyID            = shippingAddress.ExternalId;
            commerceShippingInfo.ShippingMethodID   = "B146622D-DC86-48A3-B72A-05EE8FFD187A"; // Ship Items > Ground
            commerceShippingInfo.ShippingMethodName =
                "Ground";                                                                     // Method id and name have to match what is configured in Sitecore Commerce Control Panel

            shippingInfoList.Add(commerceShippingInfo);

            var csShippingInfoList = new List <ShippingInfo>();

            foreach (var shippingInfo in shippingInfoList)
            {
                csShippingInfoList.Add(shippingInfo);
            }

            // Add a shipping address and shipping method
            var addShippingInfoRequest =
                new Sitecore.Commerce.Engine.Connect.Services.Carts.AddShippingInfoRequest(cart, csShippingInfoList,
                                                                                           shippingOptionType);
            var result = _cartServiceProvider.AddShippingInfo(addShippingInfoRequest);

            Assert.IsTrue(result.Success, String.Join("|", result.SystemMessages.Select(e => e.Message)));

            // Reload the cart so we have the latest information on how much we need to pay
            reloadedCartResult = _cartServiceProvider.LoadCart(reloadCartRequest);

            Assert.IsTrue(reloadedCartResult.Success,
                          String.Join("|", reloadedCartResult.SystemMessages.Select(e => e.Message)));

            cart = reloadedCartResult.Cart;

            // Add billing address
            CommerceParty billingAddress = new CommerceParty();

            billingAddress.ExternalId =
                "Billing"; // This should correspond to the PartyId you are setting for the payment info
            billingAddress.PartyId       = billingAddress.ExternalId;
            billingAddress.Name          = "Billing";
            billingAddress.Address1      = "Dorpsstraat 50";
            billingAddress.Company       = "Sitecore";
            billingAddress.Country       = "Canada";
            billingAddress.State         = "ON"; // State is checked: you can configure it in Commerce
            billingAddress.CountryCode   = "CA";
            billingAddress.LastName      = "Werkman";
            billingAddress.FirstName     = "Erwin";
            billingAddress.City          = "Amsterdam";
            billingAddress.ZipPostalCode = "1234AK";

            cart.Parties.Add(billingAddress);

            // Add a payment address and payment method
            var payments = new List <PaymentInfo>();

            /*
             * For federated payment info to work, you need to set up the Braintree integration
             * var federatedPaymentInfo = new FederatedPaymentInfo();
             *
             * federatedPaymentInfo.PartyID = billingAddress.ExternalId;
             * federatedPaymentInfo.PaymentMethodID = "0CFFAB11-2674-4A18-AB04-228B1F8A1DEC";    // Federated Payment
             * federatedPaymentInfo.Amount = cart.Total.Amount;   // Total payment (of all payment methods for a cart) should always be the same as the total amount of the order
             * federatedPaymentInfo.CardToken = "payment-nonce";  // This should be valid b
             *
             * payments.Add(federatedPaymentInfo);
             */

            var giftCardPaymentInfo = new GiftCardPaymentInfo();

            giftCardPaymentInfo.PaymentMethodID = "B5E5464E-C851-4C3C-8086-A4A874DD2DB0"; // GiftCard
            giftCardPaymentInfo.Amount          = cart.Total.Amount;
            giftCardPaymentInfo.ExternalId      = "GC1000000";                            // This is the number of the giftcard
            giftCardPaymentInfo.PartyID         = billingAddress.ExternalId;

            payments.Add(giftCardPaymentInfo);

            var addPaymentInfoRequest = new AddPaymentInfoRequest(cart, payments);
            var addPaymentInfoResult  = _cartServiceProvider.AddPaymentInfo(addPaymentInfoRequest);

            Assert.IsTrue(addPaymentInfoResult.Success,
                          String.Join("|", addPaymentInfoResult.SystemMessages.Select(e => e.Message)));

            var freshCartRequest = new LoadCartByNameRequest(shopName, cartName, userId);
            var freshCartResult  = _cartServiceProvider.LoadCart(reloadCartRequest);

            Assert.IsTrue(freshCartResult.Success,
                          String.Join("|", freshCartResult.SystemMessages.Select(e => e.Message)));

            cart.Email = "*****@*****.**"; // This is necessary otherwise the cart will not become an order

            // Save the cart as an order
            var submitVisitorOrderRequest = new SubmitVisitorOrderRequest(cart);
            var submitVisitorOrderResult  = _orderServiceProvider.SubmitVisitorOrder(submitVisitorOrderRequest);

            Assert.IsTrue(submitVisitorOrderResult.Success,
                          String.Join("|", submitVisitorOrderResult.SystemMessages.Select(e => e.Message)));

            return(View("Cart", freshCartResult));
        }
Exemplo n.º 9
0
        public ActionResult Index()
        {
            var loadCartRequest = new LoadCartRequest("CommerceEngineDefaultStorefront", "Default", "1234");
            var loadCartResult  = _cartServiceProvider.LoadCart(loadCartRequest);

            var cart = loadCartResult.Cart as CommerceCart;

            var lines    = new List <CartLine>();
            var cartLine = new CommerceCartLine("Habitat_Master", "6042567", "56042567", 1.0M);

            lines.Add(cartLine);

            var addLinesRequest = new AddCartLinesRequest(cart, lines);
            var addLinesResult  = _cartServiceProvider.AddCartLines(addLinesRequest);

            // Add a shipping address
            CommerceParty shippingAddress = new CommerceParty();

            shippingAddress.ExternalId    = "Shipping";
            shippingAddress.PartyId       = shippingAddress.ExternalId;
            shippingAddress.Name          = "Shipping";
            shippingAddress.Address1      = "Barbara Strozzilaan 201";
            shippingAddress.Company       = "Sitecore";
            shippingAddress.Country       = "Canada";
            shippingAddress.State         = "ON"; // State is checked by commerce engine: you can configure it in Commerce
            shippingAddress.CountryCode   = "CA"; // Country is checked by commerce engine
            shippingAddress.LastName      = "Werkman";
            shippingAddress.FirstName     = "Erwin";
            shippingAddress.City          = "Amsterdam";
            shippingAddress.ZipPostalCode = "1030AC";

            var cartParties = cart.Parties.ToList();

            cartParties.Add(shippingAddress);
            cart.Parties = cartParties;

            ShippingOptionType shippingOptionType = ShippingOptionType.ShipToAddress;

            ICollection <CommerceShippingInfo> shippingInfoList = new List <CommerceShippingInfo>();

            var commerceShippingInfo = new CommerceShippingInfo();

            commerceShippingInfo.ShippingOptionType = ShippingOptionType.ShipToAddress;
            commerceShippingInfo.PartyID            = shippingAddress.ExternalId;
            commerceShippingInfo.ShippingMethodID   = "B146622D-DC86-48A3-B72A-05EE8FFD187A"; // Ship Items > Ground
            commerceShippingInfo.ShippingMethodName =
                "Ground";                                                                     // Method id and name have to match what is configured in Sitecore Commerce Control Panel

            shippingInfoList.Add(commerceShippingInfo);

            var csShippingInfoList = new List <ShippingInfo>();

            foreach (var shippingInfo in shippingInfoList)
            {
                csShippingInfoList.Add(shippingInfo);
            }

            // Add a shipping address and shipping method
            var addShippingInfoRequest =
                new Sitecore.Commerce.Engine.Connect.Services.Carts.AddShippingInfoRequest(cart, csShippingInfoList,
                                                                                           shippingOptionType);
            var result = _cartServiceProvider.AddShippingInfo(addShippingInfoRequest);

            cart = result.Cart as CommerceCart;

            // Add billing address
            CommerceParty billingAddress = new CommerceParty();

            billingAddress.ExternalId =
                "Billing"; // This should correspond to the PartyId you are setting for the payment info
            billingAddress.PartyId       = billingAddress.ExternalId;
            billingAddress.Name          = "Billing";
            billingAddress.Address1      = "Dorpsstraat 50";
            billingAddress.Company       = "Sitecore";
            billingAddress.Country       = "Canada";
            billingAddress.State         = "ON"; // State is checked: you can configure it in Commerce
            billingAddress.CountryCode   = "CA";
            billingAddress.LastName      = "Werkman";
            billingAddress.FirstName     = "Erwin";
            billingAddress.City          = "Amsterdam";
            billingAddress.ZipPostalCode = "1234AK";

            cart.Parties.Add(billingAddress);

            // Add a payment address and payment method
            var payments = new List <PaymentInfo>();

            var simplePaymentInfo = new SimplePaymentInfo();

            simplePaymentInfo.PaymentMethodID = "9B110CC3-C7C8-4492-8FCF-0CDE5D3E0EB0";
            simplePaymentInfo.Amount          = cart.Total.Amount;

            payments.Add(simplePaymentInfo);

            /*
             * var giftCardPaymentInfo = new GiftCardPaymentInfo();
             * giftCardPaymentInfo.PaymentMethodID = "B5E5464E-C851-4C3C-8086-A4A874DD2DB0"; // GiftCard
             * giftCardPaymentInfo.Amount = cart.Total.Amount;
             * giftCardPaymentInfo.ExternalId = "GC1000000"; // This is the number of the giftcard
             * giftCardPaymentInfo.PartyID = billingAddress.ExternalId;    // For a gift card this is not really necessary and not recorded
             *
             * payments.Add(giftCardPaymentInfo);
             */

            var addPaymentInfoRequest = new AddPaymentInfoRequest(cart, payments);
            var addPaymentInfoResult  = _cartServiceProvider.AddPaymentInfo(addPaymentInfoRequest);


            return(View("Cart", addPaymentInfoResult));
        }
Exemplo n.º 10
0
        public ActionResult SubmitPayment(string paymentNonce)
        {
            var loadCartRequest = new LoadCartRequest("CommerceEngineDefaultStorefront", "Default", "1234");
            var loadCartResult  = _cartServiceProvider.LoadCart(loadCartRequest);
            var cart            = loadCartResult.Cart as CommerceCart;

            // Add a shipping address
            CommerceParty shippingAddress = new CommerceParty();

            shippingAddress.ExternalId    = "Shipping";
            shippingAddress.PartyId       = shippingAddress.ExternalId;
            shippingAddress.Name          = "Shipping";
            shippingAddress.Address1      = "Barbara Strozzilaan 201";
            shippingAddress.Company       = "Sitecore";
            shippingAddress.Country       = "Canada";
            shippingAddress.State         = "NB"; // State is checked by commerce engine: you can configure it in Commerce
            shippingAddress.CountryCode   = "CA"; // Country is checked by commerce engine
            shippingAddress.LastName      = "Werkman";
            shippingAddress.FirstName     = "Erwin";
            shippingAddress.City          = "Amsterdam";
            shippingAddress.ZipPostalCode = "1030AC";

            var cartParties = cart.Parties.ToList();

            cartParties.Add(shippingAddress);
            cart.Parties = cartParties;

            ShippingOptionType shippingOptionType = ShippingOptionType.ShipToAddress;

            ICollection <CommerceShippingInfo> shippingInfoList = new List <CommerceShippingInfo>();

            var commerceShippingInfo = new CommerceShippingInfo();

            commerceShippingInfo.ShippingOptionType = ShippingOptionType.ShipToAddress;
            commerceShippingInfo.PartyID            = shippingAddress.ExternalId;
            commerceShippingInfo.ShippingMethodID   = "B146622D-DC86-48A3-B72A-05EE8FFD187A"; // Ship Items > Ground
            commerceShippingInfo.ShippingMethodName =
                "Ground";                                                                     // Method id and name have to match what is configured in Sitecore Commerce Control Panel

            shippingInfoList.Add(commerceShippingInfo);

            var csShippingInfoList = new List <ShippingInfo>();

            foreach (var shippingInfo in shippingInfoList)
            {
                csShippingInfoList.Add(shippingInfo);
            }

            // Add a shipping address and shipping method
            var addShippingInfoRequest =
                new Sitecore.Commerce.Engine.Connect.Services.Carts.AddShippingInfoRequest(cart, csShippingInfoList,
                                                                                           shippingOptionType);
            var result = _cartServiceProvider.AddShippingInfo(addShippingInfoRequest);

            Assert.IsTrue(result.Success, String.Join("|", result.SystemMessages.Select(e => e.Message)));

            // Reload the cart so we have the latest information on how much we need to pay
            var reloadCartRequest  = new LoadCartRequest("CommerceEngineDefaultStorefront", "Default", "1234");
            var reloadedCartResult = _cartServiceProvider.LoadCart(reloadCartRequest);

            Assert.IsTrue(reloadedCartResult.Success,
                          String.Join("|", reloadedCartResult.SystemMessages.Select(e => e.Message)));

            cart = reloadedCartResult.Cart as CommerceCart;

            CommerceParty billingAddress = new CommerceParty();

            billingAddress.ExternalId    = "Billing";   // This should correspond to the PartyId you are setting for the payment info
            billingAddress.PartyId       = billingAddress.ExternalId;
            billingAddress.Name          = "Billing";
            billingAddress.Address1      = "Dorpsstraat 50";
            billingAddress.Company       = "Sitecore";
            billingAddress.Country       = "Canada";
            billingAddress.State         = "NB";           // State is checked: you can configure it in Commerce
            billingAddress.CountryCode   = "CA";
            billingAddress.LastName      = "Werkman";
            billingAddress.FirstName     = "Erwin";
            billingAddress.City          = "Amsterdam";
            billingAddress.ZipPostalCode = "1234AK";

            cart.Parties.Add(billingAddress);

            var payments = new List <PaymentInfo>();

            var federatedPaymentInfo = new FederatedPaymentInfo();

            federatedPaymentInfo.PartyID         = billingAddress.ExternalId;
            federatedPaymentInfo.PaymentMethodID = "0CFFAB11-2674-4A18-AB04-228B1F8A1DEC"; // Federated Payment
            federatedPaymentInfo.Amount          = cart.Total.Amount;                      // Total payment (of all payment methods for a cart) should always be the same as the total amount of the order
            federatedPaymentInfo.CardToken       = paymentNonce;

            payments.Add(federatedPaymentInfo);

            var addPaymentInfoRequest = new AddPaymentInfoRequest(cart, payments);
            var addPaymentInfoResult  = _cartServiceProvider.AddPaymentInfo(addPaymentInfoRequest);

            Assert.IsTrue(addPaymentInfoResult.Success,
                          String.Join("|", addPaymentInfoResult.SystemMessages.Select(e => e.Message)));

            cart.Email = "*****@*****.**"; // This is necessary otherwise the cart will not become an order

            // Save the cart as an order
            var submitVisitorOrderRequest = new SubmitVisitorOrderRequest(cart);
            var submitVisitorOrderResult  = _orderServiceProvider.SubmitVisitorOrder(submitVisitorOrderRequest);

            Assert.IsTrue(submitVisitorOrderResult.Success,
                          String.Join("|", submitVisitorOrderResult.SystemMessages.Select(e => e.Message)));

            return(View(submitVisitorOrderResult));
        }
Exemplo n.º 11
0
        /// <summary>
        /// Sets the payment methods.
        /// </summary>
        /// <param name="storefront">The storefront.</param>
        /// <param name="visitorContext">The visitor context.</param>
        /// <param name="inputModel">The input model.</param>
        /// <returns>The manager response with a cart in the result.</returns>
        public virtual ManagerResponse <CartResult, CommerceCart> SetPaymentMethods([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext, [NotNull] PaymentInputModel inputModel)
        {
            Assert.ArgumentNotNull(storefront, "storefront");
            Assert.ArgumentNotNull(visitorContext, "visitorContext");
            Assert.ArgumentNotNull(inputModel, "inputModel");

            var result = new AddPaymentInfoResult {
                Success = false
            };
            var response = this.GetCurrentCart(storefront, visitorContext, true);

            if (!response.ServiceProviderResult.Success || response.Result == null)
            {
                return(new ManagerResponse <CartResult, CommerceCart>(result, response.Result));
            }

            var payments = new List <PaymentInfo>();
            var cart     = (CommerceCart)response.ServiceProviderResult.Cart;

            if (inputModel.CreditCardPayment != null && !string.IsNullOrEmpty(inputModel.CreditCardPayment.PaymentMethodID) && inputModel.BillingAddress != null)
            {
                CommerceParty billingParty = inputModel.BillingAddress.ToParty();
                List <Party>  parties      = cart.Parties.ToList();
                parties.Add(billingParty);
                cart.Parties = parties.AsSafeReadOnly();

                payments.Add(inputModel.CreditCardPayment.ToCreditCardPaymentInfo());
            }

            if (inputModel.FederatedPayment != null && !string.IsNullOrEmpty(inputModel.FederatedPayment.CardToken) && inputModel.BillingAddress != null)
            {
                CommerceParty billingParty = inputModel.BillingAddress.ToParty();
                List <Party>  parties      = cart.Parties.ToList();
                parties.Add(billingParty);
                cart.Parties = parties.AsSafeReadOnly();

                var federatedPayment = inputModel.FederatedPayment.ToCreditCardPaymentInfo();
                federatedPayment.PartyID = billingParty.PartyId;
                payments.Add(federatedPayment);
            }

            if (inputModel.GiftCardPayment != null && !string.IsNullOrEmpty(inputModel.GiftCardPayment.PaymentMethodID))
            {
                payments.Add(inputModel.GiftCardPayment.ToGiftCardPaymentInfo());
            }

            if (inputModel.LoyaltyCardPayment != null && !string.IsNullOrEmpty(inputModel.LoyaltyCardPayment.PaymentMethodID))
            {
                payments.Add(inputModel.LoyaltyCardPayment.ToLoyaltyCardPaymentInfo());
            }

            var request = new AddPaymentInfoRequest(cart, payments);

            result = this.CartServiceProvider.AddPaymentInfo(request);
            if (!result.Success)
            {
                Helpers.LogSystemMessages(result.SystemMessages, result);
            }

            return(new ManagerResponse <CartResult, CommerceCart>(result, result.Cart as CommerceCart));
        }