public override void Process(ServicePipelineArgs args)
        {
            Assert.IsNotNull(args, "args");
            Assert.IsNotNull(args.Request, "args.Request");
            Assert.IsNotNull(args.Result, "args.Result");
            Assert.IsTrue(args.Request is AddPaymentInfoRequest, "args.Request is AddPaymentInfoRequest");
            Assert.IsTrue(args.Result is AddPaymentInfoResult, "args.Result is AddPaymentInfoResult");
            var request = (AddPaymentInfoRequest)args.Request;
            var result  = (AddPaymentInfoResult)args.Result;

            Assert.IsNotNull(request.Cart, "request.Cart");
            Assert.IsNotNull(request.Payments, "request.Payments");
            Cart cart = request.Cart;

            Container container = GetContainer(cart.ShopName, cart.UserId, cart.CustomerId, "", args.Request.CurrencyCode, new DateTime?());

            var heidelpayPayments = request.Payments.OfType <HeidelpayPaymentInfo>();

            if (!heidelpayPayments.Any())
            {
                return;
            }

            foreach (var heidelpayPayment in heidelpayPayments)
            {
                CommerceParty entity = cart.Parties.FirstOrDefault(a => a.ExternalId != null && a.ExternalId.Equals(heidelpayPayment.PartyID, StringComparison.OrdinalIgnoreCase)) as CommerceParty;
                Assert.IsNotNull(entity, "Billing address can not be null");

                var heidelpayPaymentComponent = new HeidelpayPaymentComponent
                {
                    Id            = Guid.NewGuid().ToString("N"),
                    PaymentMethod = new EntityReference()
                    {
                        EntityTarget = heidelpayPayment.PaymentMethodID
                    },
                    Amount       = Money.CreateMoney(heidelpayPayment.Amount),
                    BillingParty = TranslateEntityToParty(entity, new Party(), result)
                };

                heidelpayPaymentComponent.BillingParty.ExternalId = entity.ExternalId;

                var command = Proxy.DoCommand(container.AddHeidelpayPayment(cart.ExternalId, heidelpayPaymentComponent));
            }

            Sitecore.Commerce.Plugin.Carts.Cart cart1 = GetCart(cart.UserId, cart.ShopName, cart.ExternalId, cart.CustomerId, args.Request.CurrencyCode);
            if (cart1 != null)
            {
                result.Cart     = TranslateCartToEntity(cart1, result);
                result.Payments = result.Cart.Payment.ToList();
            }

            // Abort the rest of the pipeline. Because the default commerce engine connect processors will fail
            // if there is a payment other than creditcard or giftcard.
            args.AbortPipeline();
        }
示例#2
0
        /// <summary>
        /// Processes the specified args.
        /// </summary>
        /// <param name="args">The args.</param>
        public override void Process([NotNull] ServicePipelineArgs args)
        {
            Assert.ArgumentNotNull(args, "args");

            var request = (ProductSynchronizationRequest)args.Request;

            var language = Language.Parse(request.Language).CultureInfo.TwoLetterISOLanguageName;

            using (var nopServiceClient = this.GetClient())
            {
                var productModel = nopServiceClient.GetProduct(request.ProductId, language);

                if (productModel != null && productModel.ProductId != null && !productModel.Deleted && !string.IsNullOrEmpty(productModel.ProductVariantId))
                {
                    var product = this.InstantiateEntity <Product>();

                    this.FillProduct(product, productModel);

                    //Todo : Revert to original strongly typed objects
                    args.Request.Properties["Product"] = product;
                }
                else if (productModel != null && (productModel.ProductId == null || productModel.Deleted))
                {
                    if (!request.Direction.Equals(Direction.Outbound))
                    {
                        args.Request.Properties["ProductToDelete"] = request.ProductId;
                    }
                }
                else
                {
                    var message = new SystemMessage
                    {
                        Message = string.Format(Commerce.Texts.FailedToSynchronizeProduct0, request.ProductId)
                    };
                    args.Result.SystemMessages.Add(message);
                    args.AbortPipeline();
                }

                nopServiceClient.Close();
            }
        }