We’re making a public app which, for the purposes of simplifying this question, offers 3rd party warranty options for the items that a merchant sells. So a customer finds an item they want, let’s say a bicycle, and we add a little menu to offer a bronze/silver/gold plans, and if the user decides to select one then both the bicycle and the warranty are added to the cart. Simple, except how?
We don’t want users to see the warranty as a standalone product when browsing or searching the merchants store. Users certainly should not be able to buy one in isolation. This is an add-on to other products and not a product in itself. The tiers and pricing are also defined and managed by a 3rd party so the merchant should not be able to edit this.
So what can we do?
- Our app can create a warranty “product” with variants for each tier and pricing option, but as far as we can tell there is no way to hide this from users while still keeping it purchasable.
- We can dynamically generate a unique new warranty “product” for each checkout session, but it seems like we’d be polluting the merchants store with thousands of warranty products that users could see. Even worse.
- We could add a line item directly to the cart, something that isn’t tied to a product at all, but this doesn’t seem possible.
- We might be able to use collections to control visibility but this seems very fragile and unreliable since different merchants could use any number of different ways of organizing or using collections and they could have any number of other apps which interfere or modify this behavior.
- We could change the price of the item but that doesn’t seem possible.
- We could add a fee or surcharge but this doesn’t seem to exist and discounts can only reduce the price.
- Something else?
It seems like there is no way to do this. Or am I missing something? The best we can come up with is to use a visible product and then modify the cart, admin functionality, and store functionality to try to hide, redirect, disable, or otherwise prevent people from doing things they shouldn’t do. At best this will be clunky and at worst unreliable or buggy. This is a really bad experience for both the user and the merchant. Is there really no way to achieve such functionality in Shopify?