spree_stripe_subscriptions 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/models/spree/stripe_subscription.rb +34 -16
- data/lib/spree_stripe_subscriptions/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f79c6ac45672093c0d5e05829a45d29aee68f0d3ce738cfd15b0a61b7aaaac8f
|
4
|
+
data.tar.gz: 9c9d0c093cfe191b6fb935a8da17cd4ab62e54e622f9b912fd6b644da89324c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e23cef4662313aa0a8ed116c7aa2669707dbbb0041b527d8650697951f90a868177c9afc9874190f88057623882256ae4f16081bbaa788f5cc493e4561d2587a
|
7
|
+
data.tar.gz: a629bea13f0f29b026db94c9abcc1142ca951d0e3c4a06a09096c0b9d1fe0b9cf78728dab2b0dbb5f598b056e974e772bc7604462fe464e699865693766e0b99
|
@@ -34,29 +34,42 @@ module Spree
|
|
34
34
|
|
35
35
|
def self.create_or_update_subscription(event)
|
36
36
|
event_data = event.data.object
|
37
|
-
customer = Spree::StripeCustomer.find_by!(stripe_customer_id: event_data.customer)
|
38
|
-
plan = Spree::StripePlan.find_by!(stripe_plan_id: event_data.plan.id)
|
39
37
|
|
40
|
-
|
38
|
+
subscription_event = %w[customer.subscription.updated customer.subscription.deleted].include?(event.type)
|
39
|
+
invoice_event = (event.type == 'invoice.paid')
|
40
|
+
schedule_event = (event.type == 'subscription_schedule.updated')
|
41
41
|
|
42
|
-
|
42
|
+
stripe_subscription_id = if invoice_event || schedule_event
|
43
|
+
event_data.subscription
|
44
|
+
elsif subscription_event
|
45
|
+
event_data.id
|
46
|
+
end
|
47
|
+
|
48
|
+
stripe_subscription = Stripe::Subscription.retrieve(stripe_subscription_id)
|
49
|
+
|
50
|
+
customer = Spree::StripeCustomer.find_by!(stripe_customer_id: stripe_subscription.customer)
|
51
|
+
plan = Spree::StripePlan.find_by!(stripe_plan_id: stripe_subscription.plan.id)
|
52
|
+
|
53
|
+
webhook_subscription = Spree::StripeSubscription.where(
|
54
|
+
stripe_subscription_id: stripe_subscription.id
|
55
|
+
).first_or_initialize
|
43
56
|
|
44
57
|
webhook_subscription.update(
|
45
|
-
customer: customer, user: customer.user, plan: plan, status:
|
46
|
-
current_period_start:
|
47
|
-
current_period_end:
|
48
|
-
billing_cycle_anchor:
|
49
|
-
cancel_at_period_end:
|
50
|
-
cancel_at:
|
51
|
-
canceled_at:
|
52
|
-
ended_at:
|
53
|
-
schedule:
|
58
|
+
customer: customer, user: customer.user, plan: plan, status: stripe_subscription.status,
|
59
|
+
current_period_start: stripe_subscription.current_period_start ? Time.at(stripe_subscription.current_period_start).utc.to_datetime : nil,
|
60
|
+
current_period_end: stripe_subscription.current_period_end ? Time.at(stripe_subscription.current_period_end).utc.to_datetime : nil,
|
61
|
+
billing_cycle_anchor: stripe_subscription.billing_cycle_anchor ? Time.at(stripe_subscription.billing_cycle_anchor).utc.to_datetime : nil,
|
62
|
+
cancel_at_period_end: stripe_subscription.cancel_at_period_end,
|
63
|
+
cancel_at: stripe_subscription.cancel_at ? Time.at(stripe_subscription.cancel_at).utc.to_datetime : nil,
|
64
|
+
canceled_at: stripe_subscription.canceled_at ? Time.at(stripe_subscription.canceled_at).utc.to_datetime : nil,
|
65
|
+
ended_at: stripe_subscription.ended_at ? Time.at(stripe_subscription.ended_at).utc.to_datetime : nil,
|
66
|
+
schedule: stripe_subscription.schedule
|
54
67
|
)
|
55
68
|
|
56
|
-
active_subscription = user.stripe_subscriptions.active.last
|
57
|
-
if active_subscription.present?
|
69
|
+
active_subscription = customer.user.stripe_subscriptions.active.last
|
70
|
+
if active_subscription.present? && subscription_event
|
58
71
|
# Checking if customer upgraded to other plan
|
59
|
-
old_subscriptions = user.stripe_subscriptions.active.where.not(id: [active_subscription.id, webhook_subscription.id].uniq)
|
72
|
+
old_subscriptions = customer.user.stripe_subscriptions.active.where.not(id: [active_subscription.id, webhook_subscription.id].uniq)
|
60
73
|
old_subscriptions.each do |old_subscription|
|
61
74
|
# Unsubscribe from old subscription
|
62
75
|
old_subscription.unsubscribe
|
@@ -90,6 +103,11 @@ module Spree
|
|
90
103
|
|
91
104
|
webhook_subscription = Spree::StripeSubscription.find_by(stripe_subscription_id: stripe_subscription_id)
|
92
105
|
|
106
|
+
unless webhook_subscription.present?
|
107
|
+
# If invoice.paid webhook is sent earlier than subscription.updated then subscription will be created
|
108
|
+
webhook_subscription = Spree::StripeSubscription.create_or_update_subscription(event)
|
109
|
+
end
|
110
|
+
|
93
111
|
if webhook_subscription.present?
|
94
112
|
stripe_invoice_id = event_data.id
|
95
113
|
customer = Spree::StripeCustomer.find_by(stripe_customer_id: event_data.customer)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_stripe_subscriptions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Satyakam Pandya
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-03-
|
11
|
+
date: 2023-03-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: spree
|