mirror of https://github.com/zulip/zulip.git
webhooks/stripe: Support customer.subscription.update events.
This commit is contained in:
parent
ba640bf89d
commit
9afb1c3459
|
@ -0,0 +1,129 @@
|
||||||
|
{
|
||||||
|
"created":1326853478,
|
||||||
|
"livemode":false,
|
||||||
|
"id":"customer.subscription.updated_00000000000000",
|
||||||
|
"type":"customer.subscription.updated",
|
||||||
|
"object":"event",
|
||||||
|
"request":null,
|
||||||
|
"pending_webhooks":1,
|
||||||
|
"api_version":"2018-02-28",
|
||||||
|
"data":{
|
||||||
|
"object":{
|
||||||
|
"id":"sub_00000000000000",
|
||||||
|
"object":"subscription",
|
||||||
|
"application_fee_percent":null,
|
||||||
|
"billing":"charge_automatically",
|
||||||
|
"billing_cycle_anchor":1542644734,
|
||||||
|
"cancel_at_period_end":false,
|
||||||
|
"canceled_at":null,
|
||||||
|
"created":1542644734,
|
||||||
|
"current_period_end":1545236734,
|
||||||
|
"current_period_start":1542644734,
|
||||||
|
"customer":"cus_00000000000000",
|
||||||
|
"days_until_due":null,
|
||||||
|
"default_source":null,
|
||||||
|
"discount":null,
|
||||||
|
"ended_at":null,
|
||||||
|
"items":{
|
||||||
|
"object":"list",
|
||||||
|
"data":[
|
||||||
|
{
|
||||||
|
"id":"si_00000000000000",
|
||||||
|
"object":"subscription_item",
|
||||||
|
"created":1542644735,
|
||||||
|
"metadata":{
|
||||||
|
|
||||||
|
},
|
||||||
|
"plan":{
|
||||||
|
"id":"gold_00000000000000",
|
||||||
|
"object":"plan",
|
||||||
|
"active":true,
|
||||||
|
"aggregate_usage":null,
|
||||||
|
"amount":2000,
|
||||||
|
"billing_scheme":"per_unit",
|
||||||
|
"created":1394782612,
|
||||||
|
"currency":"cad",
|
||||||
|
"interval":"month",
|
||||||
|
"interval_count":1,
|
||||||
|
"livemode":false,
|
||||||
|
"metadata":{
|
||||||
|
|
||||||
|
},
|
||||||
|
"nickname":null,
|
||||||
|
"product":"prod_00000000000000",
|
||||||
|
"tiers":null,
|
||||||
|
"tiers_mode":null,
|
||||||
|
"transform_usage":null,
|
||||||
|
"trial_period_days":null,
|
||||||
|
"usage_type":"licensed"
|
||||||
|
},
|
||||||
|
"quantity":1,
|
||||||
|
"subscription":"sub_00000000000000"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"has_more":false,
|
||||||
|
"total_count":1,
|
||||||
|
"url":"/v1/subscription_items?subscription=sub_E0G5y2VdPVOB4o"
|
||||||
|
},
|
||||||
|
"livemode":false,
|
||||||
|
"metadata":{
|
||||||
|
|
||||||
|
},
|
||||||
|
"plan":{
|
||||||
|
"id":"gold_00000000000000",
|
||||||
|
"object":"plan",
|
||||||
|
"active":true,
|
||||||
|
"aggregate_usage":null,
|
||||||
|
"amount":2000,
|
||||||
|
"billing_scheme":"per_unit",
|
||||||
|
"created":1394782612,
|
||||||
|
"currency":"cad",
|
||||||
|
"interval":"month",
|
||||||
|
"interval_count":1,
|
||||||
|
"livemode":false,
|
||||||
|
"metadata":{
|
||||||
|
|
||||||
|
},
|
||||||
|
"nickname":null,
|
||||||
|
"product":"prod_00000000000000",
|
||||||
|
"tiers":null,
|
||||||
|
"tiers_mode":null,
|
||||||
|
"transform_usage":null,
|
||||||
|
"trial_period_days":null,
|
||||||
|
"usage_type":"licensed"
|
||||||
|
},
|
||||||
|
"quantity":1,
|
||||||
|
"start":1542644734,
|
||||||
|
"status":"active",
|
||||||
|
"tax_percent":null,
|
||||||
|
"trial_end":null,
|
||||||
|
"trial_start":null
|
||||||
|
},
|
||||||
|
"previous_attributes":{
|
||||||
|
"plan":{
|
||||||
|
"id":"OLD_00000000000000",
|
||||||
|
"object":"plan",
|
||||||
|
"active":true,
|
||||||
|
"aggregate_usage":null,
|
||||||
|
"amount":2000,
|
||||||
|
"billing_scheme":"per_unit",
|
||||||
|
"created":1542644734,
|
||||||
|
"currency":"cad",
|
||||||
|
"interval":"month",
|
||||||
|
"interval_count":1,
|
||||||
|
"livemode":false,
|
||||||
|
"metadata":{
|
||||||
|
|
||||||
|
},
|
||||||
|
"nickname":null,
|
||||||
|
"product":"prod_00000000000000",
|
||||||
|
"tiers":null,
|
||||||
|
"tiers_mode":null,
|
||||||
|
"transform_usage":null,
|
||||||
|
"trial_period_days":null,
|
||||||
|
"usage_type":"licensed",
|
||||||
|
"name":"Old plan"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -81,6 +81,13 @@ class StripeHookTests(WebhookTestCase):
|
||||||
self.send_and_test_stream_message('customer_subscription_deleted', expected_topic, expected_message,
|
self.send_and_test_stream_message('customer_subscription_deleted', expected_topic, expected_message,
|
||||||
content_type="application/x-www-form-urlencoded")
|
content_type="application/x-www-form-urlencoded")
|
||||||
|
|
||||||
|
def test_customer_subscription_updated(self) -> None:
|
||||||
|
expected_topic = u"Customer sub_00000000000000"
|
||||||
|
expected_message = u"The customer subscription with id **[sub_00000000000000](https://dashboard.stripe.com/subscriptions/sub_00000000000000)** was updated."
|
||||||
|
self.send_and_test_stream_message('customer_subscription_updated',
|
||||||
|
expected_topic, expected_message,
|
||||||
|
content_type="application/x-www-form-urlencoded")
|
||||||
|
|
||||||
def test_customer_subscription_trial_will_end(self) -> None:
|
def test_customer_subscription_trial_will_end(self) -> None:
|
||||||
expected_topic = u"Customer sub_00000000000000"
|
expected_topic = u"Customer sub_00000000000000"
|
||||||
expected_message = u"The customer subscription trial with id **[sub_00000000000000](https://dashboard.stripe.com/subscriptions/sub_00000000000000)** will end in 3 days."
|
expected_message = u"The customer subscription trial with id **[sub_00000000000000](https://dashboard.stripe.com/subscriptions/sub_00000000000000)** will end in 3 days."
|
||||||
|
|
|
@ -80,7 +80,7 @@ def api_stripe_webhook(request: HttpRequest, user_profile: UserProfile,
|
||||||
body_template = "The customer subscription with id **[{id}]({link})** was deleted."
|
body_template = "The customer subscription with id **[{id}]({link})** was deleted."
|
||||||
body = body_template.format(id=object_id, link=link)
|
body = body_template.format(id=object_id, link=link)
|
||||||
|
|
||||||
else: # customer.subscription.trial_will_end
|
elif event_type == "customer.subscription.trial_will_end":
|
||||||
DAY = 60 * 60 * 24 # seconds in a day
|
DAY = 60 * 60 * 24 # seconds in a day
|
||||||
# days_left should always be three according to
|
# days_left should always be three according to
|
||||||
# https://stripe.com/docs/api/python#event_types, but do the
|
# https://stripe.com/docs/api/python#event_types, but do the
|
||||||
|
@ -89,7 +89,9 @@ def api_stripe_webhook(request: HttpRequest, user_profile: UserProfile,
|
||||||
body_template = ("The customer subscription trial with id"
|
body_template = ("The customer subscription trial with id"
|
||||||
" **[{id}]({link})** will end in {days} days.")
|
" **[{id}]({link})** will end in {days} days.")
|
||||||
body = body_template.format(id=object_id, link=link, days=days_left)
|
body = body_template.format(id=object_id, link=link, days=days_left)
|
||||||
|
elif event_type == "customer.subscription.updated":
|
||||||
|
body_template = "The customer subscription with id **[{id}]({link})** was updated."
|
||||||
|
body = body_template.format(id=object_id, link=link)
|
||||||
else:
|
else:
|
||||||
link = "https://dashboard.stripe.com/customers/{}".format(object_id)
|
link = "https://dashboard.stripe.com/customers/{}".format(object_id)
|
||||||
body_template = "{beginning} customer with id **[{id}]({link})** {rest}."
|
body_template = "{beginning} customer with id **[{id}]({link})** {rest}."
|
||||||
|
|
Loading…
Reference in New Issue