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