For discussing the development and integration of subscription-enabled shops using Shopify's Subscription APIs.
Over the past year, the number of `SubscriptionBillingAttemptErrorCode`s has steadily increased to include non-billing errors and as of the `2024-07` version with the new `INSUFFICIENT_INVENTORY` error code it's almost as likely that a billing attempt fails without ever actually needing or trying to charge a credit card.
In theory that's not a problem (its actually nice that it's growing in complexity), unfortunately Shopify seems to be running the auth on customers' cards regardless of whether or not there will be a Shopify/internal reason for the billing attempt to fail.
Example:
- Subscription contract has a line with negative inventory on a product that tracks inventory and doesn't allow continuing to sell
- Billing attempt is created for subscription contract
- Shopify does a pre-auth on the customer's credit card (this shows up in the customer's bank generally as a "Pending" transaction)
- Shopify fails the billing attempt with the `INSUFFICIENT_INVENTORY` error code
- Shopify never completes the transaction on the card so the customer isn't charged
This means that customers could end up with multiple "pending" transactions showing up in their bank. Most consumers will look at that and think that they've been charged multiple times. But even if its only one pending transaction, its a bad look since no order is being created.
Since Shopify has the ability to know if errors like `INSUFFICIENT_INVENTORY` (errors that are unrelated to charging a payment method) are happening, wouldn't it make a lot more sense not to do the authorization on the customers' bank until you know those internal errors are not going to happen?
Thanks for your help!