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