コード例 #1
0
        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 void SetPaymentInfo_IfAddPaymentInfoFailed_ShouldReturnsError(
            CartResult loadCartResult,
            CartResult updateCartResult,
            CartResult removeCartResult,
            AddPaymentInfoResult addCartResult,
            Address address,
            Party party,
            Models.Entities.Payment.FederatedPaymentInfo federatedPaymentInfo,
            SystemMessage systemMessage)
        {
            //arrange
            loadCartResult.Success = true;
            this.cartManager.LoadCart(Arg.Any <string>(), Arg.Any <string>()).Returns(loadCartResult);

            updateCartResult.Success = true;
            this.cartManager.UpdateCart(Arg.Any <Cart>(), Arg.Any <CartBase>()).Returns(updateCartResult);

            removeCartResult.Success = true;
            this.cartManager.RemovePaymentInfo(Arg.Any <Cart>()).Returns(removeCartResult);

            addCartResult.Success = false;
            addCartResult.SystemMessages.Add(systemMessage);
            this.cartManager.AddPaymentInfo(Arg.Any <Cart>(), Arg.Any <Party>(), Arg.Any <FederatedPaymentInfo>()).Returns(addCartResult);

            this.paymentMapper.Map <Address, Party>(address).Returns(party);

            //act
            var result = this.billingService.SetPaymentInfo(address, federatedPaymentInfo);

            //assert
            Assert.False(result.Success);
            Assert.Equal(systemMessage.Message, result.Errors[0]);
        }
コード例 #3
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));
        }
コード例 #4
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");
        }
コード例 #5
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 addPaymentResponse = new ManagerResponse<CartResult, CommerceCart>(new AddPaymentInfoResult { Success = true }, null);
            var errorResponse = new AddPaymentInfoResult { Success = false };
            var response = this.GetCurrentCart(storefront, visitorContext, true);
            if (!response.ServiceProviderResult.Success || response.Result == null)
            {
                return new ManagerResponse<CartResult, CommerceCart>(errorResponse, response.Result);
            }

            var cart = (CommerceCart)response.ServiceProviderResult.Cart;
            if (inputModel.CreditCardPayment != null && !string.IsNullOrEmpty(inputModel.CreditCardPayment.PaymentMethodID) && inputModel.BillingAddress != null)
            {
                var removeBillingResponse = this.RemoveAllBillingParties(storefront, visitorContext, cart);
                if (!removeBillingResponse.ServiceProviderResult.Success)
                {
                    errorResponse.SystemMessages.Add(removeBillingResponse.ServiceProviderResult.SystemMessages[0]);
                    return new ManagerResponse<CartResult, CommerceCart>(errorResponse, errorResponse.Cart as CommerceCart);
                }

                cart = removeBillingResponse.Result;

                CommerceParty billingParty = inputModel.BillingAddress.ToNewBillingParty();

                var addPartyResponse = this.AddPartyToCart(storefront, visitorContext, cart, billingParty);
                if (!addPartyResponse.ServiceProviderResult.Success)
                {
                    errorResponse.SystemMessages.Add(addPartyResponse.ServiceProviderResult.SystemMessages[0]);
                    return new ManagerResponse<CartResult, CommerceCart>(errorResponse, errorResponse.Cart as CommerceCart);
                }

                cart = addPartyResponse.Result;

                var removePaymentResponse = this.RemoveAllPaymentMethods(storefront, visitorContext, cart);
                if (!removePaymentResponse.ServiceProviderResult.Success)
                {
                    errorResponse.SystemMessages.Add(removePaymentResponse.ServiceProviderResult.SystemMessages[0]);
                    return new ManagerResponse<CartResult, CommerceCart>(errorResponse, errorResponse.Cart as CommerceCart);
                }

                cart = removePaymentResponse.Result;

                CommerceCreditCardPaymentInfo creditCardPayment = inputModel.CreditCardPayment.ToCreditCardPaymentInfo();

                addPaymentResponse = this.AddPaymentInfoToCart(storefront, visitorContext, cart, creditCardPayment, billingParty, true);
                if (!addPaymentResponse.ServiceProviderResult.Success)
                {
                    errorResponse.SystemMessages.Add(addPaymentResponse.ServiceProviderResult.SystemMessages[0]);
                    return new ManagerResponse<CartResult, CommerceCart>(errorResponse, errorResponse.Cart as CommerceCart);
                }

                cart = addPaymentResponse.Result;
            }

            return addPaymentResponse;
        }
コード例 #6
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));
        }