Allow certain paid tiers to collect shipping address

TL;DR: Here are concrete ideas for specification and implementation of the requested feature for collecting shipping addressses.

In another thread a few months ago, I asked why not, optionally, tell the Stripe Checkout form to collect shipping addresses from paying subscribers upon entering their billing info.

My Ghost site is for a magazine that has a print edition, and Ghost’s inability to have Stripe collect shipping addresses makes for an extremely ugly and complicated workaround. (Another person in the thread has the same problem, also using Ghost for a print magazine’s website.) The question also came up in an older thread here, where other people asked for the same thing.

So what would this look like exactly and how would it work? That hasn’t really been suggested, so I’d like to offer some ideas for its specification and implementation:

  1. Ultimately, this requires that Stripe Checkout sessions include shipping address fields. Here is where that session is created. According to the 2020-08-27 Stripe API used in Ghost, that means including a field that lists the countries to allow for the subscriber’s shipping address.
  2. Whether to tell Stripe to collect a shipping address should be tied to the notion of (paid) Tier. The product case for shipping addresses for magazines is that certain tiers of subscription should come with print issue delivery (of one or more issues per period). Another request for shipping addresses in the forum have mentioned sending out small gifts as a membership bonus. In both cases, whether to collect a subscriber’s shipping address might make sense for “more premium” tiers and not all tiers – and only paid tiers for which we are collecting billing info for Stripe in the first place.
  3. The list of countries for support shipping addresses, which is needed by Stripe, should be a site-wide setting, not per tier. For some Ghost sites, maybe it makes sense to collect shipping addresses from subscribers only in a single country, or maybe all of North America for example, for reasons of postage. Since Stripe needs a list of valid countries for the address collection, it should be sufficient to define this valid list once, not N times for different tiers that need addresses.
  4. A subscriber of a paid tier that requires shipping addresses should see the address on the member portal, next to the billing info, so that they can edit it. What if someone moves after providing their address? They need a way to update that of course, preferably within the Ghost site, not merely in a Stripe Customer Portal. Maybe that should fire a new kind of event?
  5. OPTIONAL EXTENSION: Add a field to the tier for a shipping rate to charge. (This could merely be factored into the tier price though.)

I hope the above helps make this feature request become reality. I can take a stab at a code change of the above, on a forked Ghost repo. But I’m a software engineer without any real familiarity with the Ghost project’s code and organization.