Comment fusionner des paniers anonymes lorsqu’un client se connecte avec Optimiz

Dans le commerce électronique, il est courant que les utilisateurs naviguent sur un site de manière anonyme, en ajoutant des articles à leur panier sans créer de compte. Plus tard, lorsque l’utilisateur décide de créer un compte ou de se connecter, il se peut qu’il ait déjà des articles dans son panier anonyme qu’il souhaite conserver. Dans ce scénario, il est important de fusionner le panier anonyme avec le panier authentifié pour garantir une expérience d’achat transparente.

Dans cet article de blog, je vais vous montrer comment fusionner des paniers anonymes avec des paniers authentifiés dans Optimizely Commerce 14.

Aperçu

Le code que je vais utiliser est un composant middleware qui s’exécute sur chaque requête HTTP entrante. Si l’utilisateur est authentifié, le middleware récupère le panier anonyme de l’utilisateur à l’aide du IAnonymousIdFeature et le fusionne avec leur panier authentifié.

using EPiServer.Commerce.Order;
using EPiServer.ServiceLocation;
using Mediachase.Commerce;
using Mediachase.Commerce.Anonymous;
using Mediachase.Commerce.Customers;
using Mediachase.Commerce.Markets;

namespace Infrastructure.Commerce.Extensions
{
    public class AnonymousCartMergingMiddleware
    {
        private readonly RequestDelegate _next;

        public AnonymousCartMergingMiddleware(RequestDelegate next)
        {
            _next = next;
        }

        public async Task InvokeAsync(HttpContext context)
        {
            if (context.User.Identity != null && context.User.Identity.IsAuthenticated)
            {
                var anonymousId = context.Features.Get().AnonymousId;
                
                if (!string.IsNullOrWhiteSpace(anonymousId))
                {
                    var orderRepository = ServiceLocator.Current.GetInstance();
                    var marketService = ServiceLocator.Current.GetInstance();
                    
                    var market = marketService.GetMarket(MarketId.Default);
                    var cart = orderRepository.LoadCart(new Guid(anonymousId), "Default", market.MarketId);

                    if (cart != null && cart.GetAllLineItems().ToList().Count > 0)
                    {
                        var profileMigrator = ServiceLocator.Current.GetInstance();
                        profileMigrator.MigrateCarts(new Guid(anonymousId));

                        var currentMarket = ServiceLocator.Current.GetInstance();

                        if (currentMarket.GetCurrentMarket().MarketId != MarketId.Default)
                        {
                            var customerCart = orderRepository.LoadCart(CustomerContext.Current.CurrentContactId, "Default", market.MarketId);

                            customerCart.MarketId = currentMarket.GetCurrentMarket().MarketId;
                            orderRepository.Save(customerCart);
                        }
                    }
                }
            }

            await _next(context);
        }
    }
}

Vous pouvez utiliser une méthode d’extension pour exposer le middleware via `IApplicationBuilder`.

namespace Infrastructure.Commerce.Extensions
{
    public static class AnonymousCartMergingMiddlewareExtensions
    {
        public static IApplicationBuilder UseAnonymousCartMerging(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware();
        }
    }
}

Le code suivant appelle le middleware à partir de `Startup.cs`

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseAnonymousCartMerging();        
    }

27 mars 2023

Leave a Reply

Your email address will not be published. Required fields are marked *

Most Popular

Get The Latest Updates

Subscribe To Our Weekly Newsletter

No spam, notifications only about new products, updates.

Tag

Lire

Articles Similaires