When a company sells under several brands, someone eventually asks the obvious question: why can't customers put products from every brand into one cart and check out once?
It sounds like a small improvement to the shopping experience, but it isn’t a small feature. A shared cart between brands, on Drupal Commerce at least, is relatively easy, assuming each brand runs from the same Drupal installation.
But that’s only half of the story. What happens after the order is placed? The hard part of a shared cart experience is everything after checkout, especially fulfillment.
How the cart works by default
In a multi-brand Drupal Commerce setup, each brand gets its own store entity. A store holds a brand's commerce settings:
- Which merchant account takes the payment
- Which prices and promotions apply
- Which payment methods are available
Once something like Commerce Store Domain is installed and configured, a shopper's cart belongs to the store of the brand they're browsing.
- Add an item on Brand A, and it goes into Brand A's cart.
- Visit Brand B, and the cart there is empty.
- Each brand is checked out separately.
This takes no custom development. An item added on one brand will not show up on another brand’s cart. This already works, which is why Drupal Commerce makes so much sense for a business wanting to streamline their multi-brand storefront management.
But what if we want a shared cart?
What a shared cart across brands requires
A shared cart is three pieces of work, and the cart itself, what your customers interact with, is the smallest of them.
- A shared login (moderate). A cart for a shopper who hasn't signed in is tied to their browser session, and browsers won't carry a session between separate domains like brand-a.com and brand-b.com. The shopper has to be recognized on every brand first. Once they're signed in, the cart is tied to their account and follows them.
- Letting one cart span brands (small). A small piece of code stops the cart from being confined to the brand being browsed.
- Splitting the placed order per brand (largest). Each brand needs to take its own money and be taxed, shipped and invoiced on its own terms. This is the piece businesses most often underestimate. Your own organization, fulfillment processes, and accounting requirements help determine the level of effort.
What can go wrong
Every Drupal Commerce order is recorded against exactly one store. So when a cart holds products from three brands, the order still technically belongs to just one of them.
By default, the entire payment will go through the first brand’s merchant account, including the money that should belong to the other two brands. Promotions for one brand will still work on products that the brand doesn’t even sell.
Neither of these is a bug. Both naturally follow from an order being tied to a single store. It works as expected, but any shared cart implementation will have to solve the problem.
Because a shared cart is only half a feature. Without splitting the order per brand, one brand collects everyone's money and one brand's promotions discount everyone's products.
How to split the order the right way
One outdoor lifestyle and gear company runs eight brand sites from a single Drupal Commerce installation, and its shoppers can fill one cart across every brand and check out as they would expect. Nothing breaks their normal expectation for a typical eCommerce transaction.
Here's how the order is handled on the backend:
- The customer's order stays whole. The shopper sees one order and one confirmation.
- Behind the scenes, each brand gets its own fulfillment order.
- Each brand gets its own payment record, its own warehouse instructions, and its own name on any relevant transactional emails.
- Support staff still see one complete order when a customer calls with a question.
This functionality is what turns a shared cart from a mere UX tweak to something the business can actually work with.
Easier for signed-in shoppers
A shared cart is much simpler if it's only offered to signed-in customers, because their account information has been recorded on the shared database for every brand. The cart can follow them from brand to brand, once it recognizes them. With anonymous shoppers, their cart lives in the browser session, so it stays behind if they leave the first brand they visited. Architecting it so the login also passes along the cart is more work.
For B2B companies selling to accounts with payment terms, offering the shared cart only to signed-in customers won’t break too many expectations. It’s assumed.
Questions to ask before you commit to a shared cart
- How often do your customers actually buy from more than one brand at the same time?
- Do your brands use separate merchant accounts, tax setups or warehouses? If so, splitting the order isn't optional.
- Should each brand's promotions stay within that brand?
- Does the shared cart need to work for anonymous shoppers, or only for signed-in accounts?
- Can checkout use a neutral company brand instead of one brand's look?
- Does the shared cart need to exist at launch, or can it come in a later release?
Our recommendation: start with separate carts
If you want a shared experience without taking on the order-splitting work right away, launch with a separate cart for each brand. It's the standard behavior, needs no custom development, and still gives customers one account and one order history across every brand (Single sign-on across multiple domains, however, is still its own piece of work.)
When a shared cart becomes a priority, you can add it later as a scoped project, without rebuilding the architecture underneath.
If you're deciding whether a shared cart is worth it for your brands, we're happy to walk through your requirements and show you what it would take.
Add new comment