Skip to content

Commit ea559fe

Browse files
committed
#1457 handle stripe case of subscription resource_missing due to changing connect account id (from test mode to live)
1 parent ea480f8 commit ea559fe

File tree

4 files changed

+62
-2
lines changed

4 files changed

+62
-2
lines changed

subscribie/blueprints/admin/__init__.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,9 @@ def do_pause_stripe_subscription_payment_collection(
403403
with app.app_context():
404404
stripe.api_key = get_stripe_secret_key()
405405
connect_account_id = get_stripe_connect_account_id()
406+
subscription = Subscription.query.filter_by(
407+
stripe_subscription_id=subscription_id
408+
).first()
406409

407410
if subscription_id is None:
408411
log.error("subscription_id cannot be None")
@@ -413,10 +416,22 @@ def do_pause_stripe_subscription_payment_collection(
413416
subscription_id, stripe_account=connect_account_id
414417
)
415418
except stripe._error.InvalidRequestError as e:
419+
if e.code == "resource_missing":
420+
msg = (
421+
"stripe subscription id: "
422+
f"{subscription_id} does not exist "
423+
f"for account {connect_account_id}. "
424+
"perhaps show owner has switched from test mode "
425+
"to live mode and has a new stripe connect account"
426+
)
427+
log.warning(msg)
428+
subscription.stripe_status = "resource_missing"
429+
database.session.commit()
416430
msg = f"Error could not retrieve subscription ({subscription_id}) to pause (is it deleted already?)" # noqa: E501
417431
log.error(f"{msg}. {e}")
418432
return False
419433

434+
# Update Subscribie Stripe Subscription status
420435
if stripe_subscription.status != "canceled":
421436
stripe_pause = stripe.Subscription.modify(
422437
subscription_id,
@@ -433,9 +448,12 @@ def do_pause_stripe_subscription_payment_collection(
433448
).first()
434449

435450
pause_collection.stripe_pause_collection = stripe_pause_filter
451+
subscription.stripe_status = "paused"
436452
database.session.commit()
437453
log.debug(f"Subscription paused ({subscription_id})")
438454
else:
455+
subscription.stripe_status = "canceled"
456+
database.session.commit()
439457
log.debug(
440458
f"Skipping. Subscription {subscription_id} because it's canceled."
441459
)

subscribie/blueprints/admin/templates/admin/subscriber/show_subscriber.html

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,23 @@ <h3>Subscriptions</h3>
208208
{% for subscription in person.subscriptions %}
209209
<li class="list-group-item">
210210
<strong>{{ subscription.plan.title }}</strong><br />
211-
<strong>Subscription Status:</strong> {{ subscription.stripe_status or 'Unknown' }} {% if subscription.transactions|length > 0 %}<a href="{{ url_for('admin.refresh_subscription', subscription_uuid=subscription.uuid, person_id=person.id) }}">(Refresh)</a>{% endif %}
211+
<strong>Subscription Status:</strong>
212+
{% if subscription.stripe_status == "resource_missing" %}
213+
Obsolete
214+
<details style="display: inline">
215+
<summary><em><small>explain</small></em></summary>
216+
<div class="alert alert-info">
217+
<p>An "Obsolete" Subscription status is when a subscription is no-longer associated
218+
with your shop (resource_missing).</p>
219+
<p>For example, when you switch your shop from 'test' mode to 'live mode',
220+
all of your 'test' subscriptions are obsolete, since they are not connected
221+
to your 'live' shop (hence they are obsolete records).</p>
222+
</div>
223+
</details>
224+
{% else %}
225+
{{ subscription.stripe_status or 'Unknown' }}
226+
{% endif %}
227+
{% if subscription.transactions|length > 0 %}<a href="{{ url_for('admin.refresh_subscription', subscription_uuid=subscription.uuid, person_id=person.id) }}">(Refresh)</a>{% endif %}
212228
<br />
213229
<strong>Payment Collection Status:</strong>
214230
{% if subscription.plan.requirements and subscription.plan.requirements.subscription %}

subscribie/blueprints/admin/templates/admin/subscribers.html

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,19 @@ <h4>Search...</h4>
157157
<div class="subscription-status alert alert-success">Active</div>
158158
{% elif subscription.stripe_status == 'past_due' %}
159159
<div class="subscription-status alert alert-danger">past_due</div>
160+
{% elif subscription.stripe_status == 'resource_missing' %}
161+
<div class="subscription-status alert alert-dark">Obsolete
162+
<details style="display: inline">
163+
<summary><em><small>explain</small></em></summary>
164+
<div class="alert alert-info">
165+
<p>An "Obsolete" Subscription status is when a subscription is no-longer associated
166+
with your shop (resource_missing).</p>
167+
<p>For example, when you switch your shop from 'test' mode to 'live mode',
168+
all of your 'test' subscriptions are obsolete, since they are not connected
169+
to your 'live' shop (hence they are obsolete records).</p>
170+
</div>
171+
</details>
172+
</div>
160173
{% else %}
161174
<div class="subscription-status alert alert-dark">{{ subscription.stripe_status }}</div>
162175
{% endif %}
@@ -221,6 +234,19 @@ <h4>Search...</h4>
221234
<div class="subscription-status alert alert-success">Active</div>
222235
{% elif subscription.stripe_status == 'past_due' %}
223236
<div class="subscription-status alert alert-danger">past_due</div>
237+
{% elif subscription.stripe_status == 'resource_missing' %}
238+
<div class="subscription-status alert alert-dark">Obsolete
239+
<details style="display: inline">
240+
<summary><em><small>explain</small></em></summary>
241+
<div class="alert alert-info">
242+
<p>An "Obsolete" Subscription status is when a subscription is no-longer associated
243+
with your shop (resource_missing).</p>
244+
<p>For example, when you switch your shop from 'test' mode to 'live mode',
245+
all of your 'test' subscriptions are obsolete, since they are not connected
246+
to your 'live' shop (hence they are obsolete records).</p>
247+
</div>
248+
</details>
249+
</div>
224250
{% else %}
225251
<div class="subscription-status alert alert-dark">{{ subscription.stripe_status }}</div>
226252
{% endif %}

subscribie/blueprints/checkout/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -935,7 +935,7 @@ def stripe_webhook():
935935

936936
stripe_livemode = PaymentProvider.query.first().stripe_livemode
937937
if stripe_livemode != event["livemode"]:
938-
log.warn(
938+
log.warning(
939939
f"Received a Stripe webhook event in a different livemode: {event['livemode']}, to the livemode currently set: '{stripe_livemode}'" # noqa: E501
940940
)
941941

0 commit comments

Comments
 (0)