pay 6.8.1 → 7.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/pay/webhooks/paddle_billing_controller.rb +51 -0
- data/app/controllers/pay/webhooks/{paddle_controller.rb → paddle_classic_controller.rb} +6 -6
- data/app/helpers/pay/currency_helper.rb +7 -0
- data/app/mailers/pay/application_mailer.rb +5 -1
- data/app/models/pay/charge.rb +1 -2
- data/app/models/pay/customer.rb +1 -2
- data/app/models/pay/merchant.rb +1 -3
- data/app/models/pay/payment_method.rb +1 -2
- data/app/models/pay/subscription.rb +10 -11
- data/app/models/pay/webhook.rb +10 -5
- data/app/views/pay/payments/show.html.erb +10 -17
- data/config/locales/en.yml +1 -1
- data/config/routes.rb +2 -1
- data/db/migrate/1_create_pay_tables.rb +6 -1
- data/lib/pay/braintree/subscription.rb +12 -2
- data/lib/pay/engine.rb +3 -2
- data/lib/pay/env.rb +1 -7
- data/lib/pay/fake_processor/subscription.rb +11 -1
- data/lib/pay/lemon_squeezy/billable.rb +90 -0
- data/lib/pay/lemon_squeezy/charge.rb +68 -0
- data/lib/pay/{paddle → lemon_squeezy}/error.rb +1 -1
- data/lib/pay/lemon_squeezy/payment_method.rb +40 -0
- data/lib/pay/lemon_squeezy/subscription.rb +185 -0
- data/lib/pay/lemon_squeezy/webhooks/subscription.rb +11 -0
- data/lib/pay/lemon_squeezy/webhooks/transaction_completed.rb +11 -0
- data/lib/pay/lemon_squeezy.rb +138 -0
- data/lib/pay/paddle_billing/billable.rb +90 -0
- data/lib/pay/paddle_billing/charge.rb +68 -0
- data/lib/pay/paddle_billing/error.rb +7 -0
- data/lib/pay/paddle_billing/payment_method.rb +40 -0
- data/lib/pay/paddle_billing/subscription.rb +185 -0
- data/lib/pay/paddle_billing/webhooks/subscription.rb +11 -0
- data/lib/pay/paddle_billing/webhooks/transaction_completed.rb +11 -0
- data/lib/pay/paddle_billing.rb +58 -0
- data/lib/pay/{paddle → paddle_classic}/billable.rb +9 -10
- data/lib/pay/paddle_classic/charge.rb +35 -0
- data/lib/pay/paddle_classic/error.rb +7 -0
- data/lib/pay/{paddle → paddle_classic}/payment_method.rb +4 -4
- data/lib/pay/{paddle → paddle_classic}/subscription.rb +39 -30
- data/lib/pay/{paddle → paddle_classic}/webhooks/signature_verifier.rb +4 -4
- data/lib/pay/{paddle → paddle_classic}/webhooks/subscription_cancelled.rb +5 -4
- data/lib/pay/{paddle → paddle_classic}/webhooks/subscription_created.rb +2 -2
- data/lib/pay/{paddle → paddle_classic}/webhooks/subscription_payment_refunded.rb +2 -2
- data/lib/pay/{paddle → paddle_classic}/webhooks/subscription_payment_succeeded.rb +7 -7
- data/lib/pay/{paddle → paddle_classic}/webhooks/subscription_updated.rb +2 -2
- data/lib/pay/paddle_classic.rb +82 -0
- data/lib/pay/receipts.rb +1 -1
- data/lib/pay/stripe/billable.rb +6 -2
- data/lib/pay/stripe/payment_method.rb +1 -0
- data/lib/pay/stripe/subscription.rb +46 -3
- data/lib/pay/stripe.rb +3 -4
- data/lib/pay/version.rb +1 -1
- data/lib/pay.rb +3 -2
- data/lib/tasks/pay.rake +2 -2
- metadata +34 -18
- data/app/helpers/pay/application_helper.rb +0 -4
- data/lib/pay/paddle/charge.rb +0 -35
- data/lib/pay/paddle/response.rb +0 -0
- data/lib/pay/paddle.rb +0 -80
@@ -0,0 +1,82 @@
|
|
1
|
+
module Pay
|
2
|
+
module PaddleClassic
|
3
|
+
autoload :Billable, "pay/paddle_classic/billable"
|
4
|
+
autoload :Charge, "pay/paddle_classic/charge"
|
5
|
+
autoload :Error, "pay/paddle_classic/error"
|
6
|
+
autoload :PaymentMethod, "pay/paddle_classic/payment_method"
|
7
|
+
autoload :Subscription, "pay/paddle_classic/subscription"
|
8
|
+
|
9
|
+
module Webhooks
|
10
|
+
autoload :SignatureVerifier, "pay/paddle_classic/webhooks/signature_verifier"
|
11
|
+
autoload :SubscriptionCreated, "pay/paddle_classic/webhooks/subscription_created"
|
12
|
+
autoload :SubscriptionCancelled, "pay/paddle_classic/webhooks/subscription_cancelled"
|
13
|
+
autoload :SubscriptionPaymentRefunded, "pay/paddle_classic/webhooks/subscription_payment_refunded"
|
14
|
+
autoload :SubscriptionPaymentSucceeded, "pay/paddle_classic/webhooks/subscription_payment_succeeded"
|
15
|
+
autoload :SubscriptionUpdated, "pay/paddle_classic/webhooks/subscription_updated"
|
16
|
+
end
|
17
|
+
|
18
|
+
extend Env
|
19
|
+
|
20
|
+
def self.enabled?
|
21
|
+
return false unless Pay.enabled_processors.include?(:paddle_classic) && defined?(::Paddle)
|
22
|
+
|
23
|
+
Pay::Engine.version_matches?(required: "~> 2.1", current: ::Paddle::VERSION) || (raise "[Pay] paddle gem must be version ~> 2.1")
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.client
|
27
|
+
@client ||= Paddle::Classic::Client.new(
|
28
|
+
vendor_id: vendor_id,
|
29
|
+
vendor_auth_code: vendor_auth_code,
|
30
|
+
sandbox: environment != "production"
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.vendor_id
|
35
|
+
find_value_by_name(:paddle_classic, :vendor_id)
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.vendor_auth_code
|
39
|
+
find_value_by_name(:paddle_classic, :vendor_auth_code)
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.environment
|
43
|
+
find_value_by_name(:paddle_classic, :environment) || "production"
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.public_key
|
47
|
+
find_value_by_name(:paddle_classic, :public_key)
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.public_key_file
|
51
|
+
find_value_by_name(:paddle_classic, :public_key_file)
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.public_key_base64
|
55
|
+
find_value_by_name(:paddle_classic, :public_key_base64)
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.passthrough(owner:, **options)
|
59
|
+
options.merge(owner_sgid: owner.to_sgid.to_s).to_json
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.parse_passthrough(passthrough)
|
63
|
+
JSON.parse(passthrough)
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.owner_from_passthrough(passthrough)
|
67
|
+
GlobalID::Locator.locate_signed parse_passthrough(passthrough)["owner_sgid"]
|
68
|
+
rescue JSON::ParserError
|
69
|
+
nil
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.configure_webhooks
|
73
|
+
Pay::Webhooks.configure do |events|
|
74
|
+
events.subscribe "paddle_classic.subscription_created", Pay::PaddleClassic::Webhooks::SubscriptionCreated.new
|
75
|
+
events.subscribe "paddle_classic.subscription_updated", Pay::PaddleClassic::Webhooks::SubscriptionUpdated.new
|
76
|
+
events.subscribe "paddle_classic.subscription_cancelled", Pay::PaddleClassic::Webhooks::SubscriptionCancelled.new
|
77
|
+
events.subscribe "paddle_classic.subscription_payment_succeeded", Pay::PaddleClassic::Webhooks::SubscriptionPaymentSucceeded.new
|
78
|
+
events.subscribe "paddle_classic.subscription_payment_refunded", Pay::PaddleClassic::Webhooks::SubscriptionPaymentRefunded.new
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
data/lib/pay/receipts.rb
CHANGED
data/lib/pay/stripe/billable.rb
CHANGED
@@ -227,12 +227,16 @@ module Pay
|
|
227
227
|
mode: "payment"
|
228
228
|
}
|
229
229
|
|
230
|
-
#
|
231
|
-
if options[:ui_mode]
|
230
|
+
# Hosted (the default) checkout sessions require a success_url and cancel_url
|
231
|
+
if ["", "hosted"].include? options[:ui_mode].to_s
|
232
232
|
args[:success_url] = merge_session_id_param(options.delete(:success_url) || root_url)
|
233
233
|
args[:cancel_url] = merge_session_id_param(options.delete(:cancel_url) || root_url)
|
234
234
|
end
|
235
235
|
|
236
|
+
if options[:return_url]
|
237
|
+
args[:return_url] = merge_session_id_param(options.delete(:return_url))
|
238
|
+
end
|
239
|
+
|
236
240
|
# Line items are optional
|
237
241
|
if (line_items = options.delete(:line_items))
|
238
242
|
quantity = options.delete(:quantity) || 1
|
@@ -10,6 +10,7 @@ module Pay
|
|
10
10
|
:ends_at,
|
11
11
|
:name,
|
12
12
|
:on_trial?,
|
13
|
+
:past_due?,
|
13
14
|
:pause_starts_at,
|
14
15
|
:pause_starts_at?,
|
15
16
|
:processor_id,
|
@@ -28,6 +29,11 @@ module Pay
|
|
28
29
|
:current_period_end,
|
29
30
|
to: :pay_subscription
|
30
31
|
|
32
|
+
def self.sync_from_checkout_session(session_id, stripe_account: nil)
|
33
|
+
checkout_session = ::Stripe::Checkout::Session.retrieve({id: session_id}, {stripe_account: stripe_account}.compact)
|
34
|
+
sync(checkout_session.subscription)
|
35
|
+
end
|
36
|
+
|
31
37
|
def self.sync(subscription_id, object: nil, name: nil, stripe_account: nil, try: 0, retries: 1)
|
32
38
|
# Skip loading the latest subscription details from the API if we already have it
|
33
39
|
object ||= ::Stripe::Subscription.retrieve({id: subscription_id}.merge(expand_options), {stripe_account: stripe_account}.compact)
|
@@ -89,6 +95,17 @@ module Pay
|
|
89
95
|
Time.at(object.current_period_end)
|
90
96
|
end
|
91
97
|
|
98
|
+
# Sync payment method if directly attached to subscription
|
99
|
+
if object.default_payment_method
|
100
|
+
if object.default_payment_method.is_a? String
|
101
|
+
Pay::Stripe::PaymentMethod.sync(object.default_payment_method)
|
102
|
+
attributes[:payment_method_id] = object.default_payment_method
|
103
|
+
else
|
104
|
+
Pay::Stripe::PaymentMethod.sync(object.default_payment_method.id, object: object.default_payment_method)
|
105
|
+
attributes[:payment_method_id] = object.default_payment_method.id
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
92
109
|
# Update or create the subscription
|
93
110
|
pay_subscription = pay_customer.subscriptions.find_by(processor_id: object.id)
|
94
111
|
if pay_subscription
|
@@ -130,6 +147,7 @@ module Pay
|
|
130
147
|
def self.expand_options
|
131
148
|
{
|
132
149
|
expand: [
|
150
|
+
"default_payment_method",
|
133
151
|
"pending_setup_intent",
|
134
152
|
"latest_invoice.payment_intent",
|
135
153
|
"latest_invoice.charge",
|
@@ -158,9 +176,28 @@ module Pay
|
|
158
176
|
stripe_sub&.pending_setup_intent&.client_secret || stripe_sub&.latest_invoice&.payment_intent&.client_secret
|
159
177
|
end
|
160
178
|
|
179
|
+
# Sets the default_payment_method on a subscription
|
180
|
+
# Pass an empty string to unset
|
181
|
+
def update_payment_method(id)
|
182
|
+
@stripe_subscription = ::Stripe::Subscription.update(processor_id, {default_payment_method: id}.merge(expand_options), stripe_options)
|
183
|
+
pay_subscription.update(payment_method_id: @stripe_subscription.default_payment_method&.id)
|
184
|
+
rescue ::Stripe::StripeError => e
|
185
|
+
raise Pay::Stripe::Error, e
|
186
|
+
end
|
187
|
+
|
188
|
+
# Marks a subscription to cancel at period end
|
189
|
+
#
|
190
|
+
# If subscription is already past_due, the subscription will be cancelled immediately
|
191
|
+
# To disable this, pass past_due_cancel_now: false
|
161
192
|
def cancel(**options)
|
162
|
-
|
163
|
-
|
193
|
+
return if canceled?
|
194
|
+
|
195
|
+
if past_due? && options.fetch(:past_due_cancel_now, true)
|
196
|
+
cancel_now!
|
197
|
+
else
|
198
|
+
@stripe_subscription = ::Stripe::Subscription.update(processor_id, {cancel_at_period_end: true}.merge(expand_options), stripe_options)
|
199
|
+
pay_subscription.update(ends_at: (on_trial? ? trial_ends_at : Time.at(@stripe_subscription.current_period_end)))
|
200
|
+
end
|
164
201
|
rescue ::Stripe::StripeError => e
|
165
202
|
raise Pay::Stripe::Error, e
|
166
203
|
end
|
@@ -170,6 +207,8 @@ module Pay
|
|
170
207
|
# cancel_now!(prorate: true)
|
171
208
|
# cancel_now!(invoice_now: true)
|
172
209
|
def cancel_now!(**options)
|
210
|
+
return if canceled?
|
211
|
+
|
173
212
|
@stripe_subscription = ::Stripe::Subscription.cancel(processor_id, options.merge(expand_options), stripe_options)
|
174
213
|
pay_subscription.update(ends_at: Time.current, status: :canceled)
|
175
214
|
rescue ::Stripe::StripeError => e
|
@@ -243,8 +282,12 @@ module Pay
|
|
243
282
|
)
|
244
283
|
end
|
245
284
|
|
285
|
+
def resumable?
|
286
|
+
on_grace_period? || paused?
|
287
|
+
end
|
288
|
+
|
246
289
|
def resume
|
247
|
-
unless
|
290
|
+
unless resumable?
|
248
291
|
raise StandardError, "You can only resume subscriptions within their grace period."
|
249
292
|
end
|
250
293
|
|
data/lib/pay/stripe.rb
CHANGED
@@ -30,7 +30,7 @@ module Pay
|
|
30
30
|
|
31
31
|
extend Env
|
32
32
|
|
33
|
-
REQUIRED_VERSION = "~>
|
33
|
+
REQUIRED_VERSION = "~> 10"
|
34
34
|
|
35
35
|
# A list of database model names that include Pay
|
36
36
|
# Used for safely looking up models with client_reference_id
|
@@ -44,7 +44,6 @@ module Pay
|
|
44
44
|
|
45
45
|
def self.setup
|
46
46
|
::Stripe.api_key = private_key
|
47
|
-
::Stripe.api_version ||= "2023-08-16"
|
48
47
|
|
49
48
|
# Used by Stripe to identify Pay for support
|
50
49
|
::Stripe.set_app_info("PayRails", partner_id: "pp_partner_IqhY0UExnJYLxg", version: Pay::VERSION, url: "https://github.com/pay-rails/pay")
|
@@ -123,13 +122,13 @@ module Pay
|
|
123
122
|
|
124
123
|
def self.to_client_reference_id(record)
|
125
124
|
raise ArgumentError, "#{record.class.name} does not include Pay. Allowed models: #{model_names.to_a.join(", ")}" unless model_names.include?(record.class.name)
|
126
|
-
[record.class.name, record.id].join("
|
125
|
+
[record.class.name, record.id].join("_")
|
127
126
|
end
|
128
127
|
|
129
128
|
def self.find_by_client_reference_id(client_reference_id)
|
130
129
|
# If there is a client reference ID, make sure we have a Pay::Customer record
|
131
130
|
# client_reference_id should be in the format of "User/1"
|
132
|
-
model_name, id = client_reference_id.split("
|
131
|
+
model_name, id = client_reference_id.split("_", 2)
|
133
132
|
|
134
133
|
# Only allow model names that use Pay
|
135
134
|
return unless model_names.include?(model_name)
|
data/lib/pay/version.rb
CHANGED
data/lib/pay.rb
CHANGED
@@ -17,7 +17,8 @@ module Pay
|
|
17
17
|
# Payment processors
|
18
18
|
autoload :Braintree, "pay/braintree"
|
19
19
|
autoload :FakeProcessor, "pay/fake_processor"
|
20
|
-
autoload :
|
20
|
+
autoload :PaddleBilling, "pay/paddle_billing"
|
21
|
+
autoload :PaddleClassic, "pay/paddle_classic"
|
21
22
|
autoload :Stripe, "pay/stripe"
|
22
23
|
|
23
24
|
autoload :Webhooks, "pay/webhooks"
|
@@ -55,7 +56,7 @@ module Pay
|
|
55
56
|
@@routes_path = "/pay"
|
56
57
|
|
57
58
|
mattr_accessor :enabled_processors
|
58
|
-
@@enabled_processors = [:stripe, :braintree, :
|
59
|
+
@@enabled_processors = [:stripe, :braintree, :paddle_billing, :paddle_classic]
|
59
60
|
|
60
61
|
mattr_accessor :send_emails
|
61
62
|
@@send_emails = true
|
data/lib/tasks/pay.rake
CHANGED
@@ -20,8 +20,8 @@ def sync_default_payment_method(pay_customer, retries: 2)
|
|
20
20
|
when "stripe"
|
21
21
|
payment_method_id = pay_customer.customer.invoice_settings.default_payment_method
|
22
22
|
Pay::Stripe::PaymentMethod.sync(payment_method_id) if payment_method_id
|
23
|
-
when "
|
24
|
-
Pay::
|
23
|
+
when "paddle_classic"
|
24
|
+
Pay::PaddleClassic::PaymentMethod.sync(pay_customer: pay_customer)
|
25
25
|
end
|
26
26
|
rescue
|
27
27
|
sleep 0.5
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 7.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Charnes
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2023-
|
13
|
+
date: 2023-12-06 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -44,9 +44,10 @@ files:
|
|
44
44
|
- app/controllers/pay/application_controller.rb
|
45
45
|
- app/controllers/pay/payments_controller.rb
|
46
46
|
- app/controllers/pay/webhooks/braintree_controller.rb
|
47
|
-
- app/controllers/pay/webhooks/
|
47
|
+
- app/controllers/pay/webhooks/paddle_billing_controller.rb
|
48
|
+
- app/controllers/pay/webhooks/paddle_classic_controller.rb
|
48
49
|
- app/controllers/pay/webhooks/stripe_controller.rb
|
49
|
-
- app/helpers/pay/
|
50
|
+
- app/helpers/pay/currency_helper.rb
|
50
51
|
- app/jobs/pay/application_job.rb
|
51
52
|
- app/jobs/pay/customer_sync_job.rb
|
52
53
|
- app/mailers/pay/application_mailer.rb
|
@@ -103,20 +104,35 @@ files:
|
|
103
104
|
- lib/pay/fake_processor/merchant.rb
|
104
105
|
- lib/pay/fake_processor/payment_method.rb
|
105
106
|
- lib/pay/fake_processor/subscription.rb
|
107
|
+
- lib/pay/lemon_squeezy.rb
|
108
|
+
- lib/pay/lemon_squeezy/billable.rb
|
109
|
+
- lib/pay/lemon_squeezy/charge.rb
|
110
|
+
- lib/pay/lemon_squeezy/error.rb
|
111
|
+
- lib/pay/lemon_squeezy/payment_method.rb
|
112
|
+
- lib/pay/lemon_squeezy/subscription.rb
|
113
|
+
- lib/pay/lemon_squeezy/webhooks/subscription.rb
|
114
|
+
- lib/pay/lemon_squeezy/webhooks/transaction_completed.rb
|
106
115
|
- lib/pay/nano_id.rb
|
107
|
-
- lib/pay/
|
108
|
-
- lib/pay/
|
109
|
-
- lib/pay/
|
110
|
-
- lib/pay/
|
111
|
-
- lib/pay/
|
112
|
-
- lib/pay/
|
113
|
-
- lib/pay/
|
114
|
-
- lib/pay/
|
115
|
-
- lib/pay/
|
116
|
-
- lib/pay/
|
117
|
-
- lib/pay/
|
118
|
-
- lib/pay/
|
119
|
-
- lib/pay/
|
116
|
+
- lib/pay/paddle_billing.rb
|
117
|
+
- lib/pay/paddle_billing/billable.rb
|
118
|
+
- lib/pay/paddle_billing/charge.rb
|
119
|
+
- lib/pay/paddle_billing/error.rb
|
120
|
+
- lib/pay/paddle_billing/payment_method.rb
|
121
|
+
- lib/pay/paddle_billing/subscription.rb
|
122
|
+
- lib/pay/paddle_billing/webhooks/subscription.rb
|
123
|
+
- lib/pay/paddle_billing/webhooks/transaction_completed.rb
|
124
|
+
- lib/pay/paddle_classic.rb
|
125
|
+
- lib/pay/paddle_classic/billable.rb
|
126
|
+
- lib/pay/paddle_classic/charge.rb
|
127
|
+
- lib/pay/paddle_classic/error.rb
|
128
|
+
- lib/pay/paddle_classic/payment_method.rb
|
129
|
+
- lib/pay/paddle_classic/subscription.rb
|
130
|
+
- lib/pay/paddle_classic/webhooks/signature_verifier.rb
|
131
|
+
- lib/pay/paddle_classic/webhooks/subscription_cancelled.rb
|
132
|
+
- lib/pay/paddle_classic/webhooks/subscription_created.rb
|
133
|
+
- lib/pay/paddle_classic/webhooks/subscription_payment_refunded.rb
|
134
|
+
- lib/pay/paddle_classic/webhooks/subscription_payment_succeeded.rb
|
135
|
+
- lib/pay/paddle_classic/webhooks/subscription_updated.rb
|
120
136
|
- lib/pay/payment.rb
|
121
137
|
- lib/pay/receipts.rb
|
122
138
|
- lib/pay/stripe.rb
|
@@ -168,7 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
168
184
|
- !ruby/object:Gem::Version
|
169
185
|
version: '0'
|
170
186
|
requirements: []
|
171
|
-
rubygems_version: 3.4.
|
187
|
+
rubygems_version: 3.4.22
|
172
188
|
signing_key:
|
173
189
|
specification_version: 4
|
174
190
|
summary: Payments engine for Ruby on Rails
|
data/lib/pay/paddle/charge.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
module Pay
|
2
|
-
module Paddle
|
3
|
-
class Charge
|
4
|
-
attr_reader :pay_charge
|
5
|
-
|
6
|
-
delegate :processor_id, :customer, to: :pay_charge
|
7
|
-
|
8
|
-
def initialize(pay_charge)
|
9
|
-
@pay_charge = pay_charge
|
10
|
-
end
|
11
|
-
|
12
|
-
def charge
|
13
|
-
return unless customer.subscription
|
14
|
-
payments = PaddlePay::Subscription::Payment.list({subscription_id: customer.subscription.processor_id})
|
15
|
-
charges = payments.select { |p| p[:id].to_s == processor_id }
|
16
|
-
charges.try(:first)
|
17
|
-
rescue ::PaddlePay::PaddlePayError => e
|
18
|
-
raise Pay::Paddle::Error, e
|
19
|
-
end
|
20
|
-
|
21
|
-
def refund!(amount_to_refund)
|
22
|
-
return unless customer.subscription
|
23
|
-
payments = PaddlePay::Subscription::Payment.list({subscription_id: customer.subscription.processor_id, is_paid: 1})
|
24
|
-
if payments.count > 0
|
25
|
-
PaddlePay::Subscription::Payment.refund(payments.last[:id], {amount: amount_to_refund})
|
26
|
-
pay_charge.update(amount_refunded: amount_to_refund)
|
27
|
-
else
|
28
|
-
raise Error, "Payment not found"
|
29
|
-
end
|
30
|
-
rescue ::PaddlePay::PaddlePayError => e
|
31
|
-
raise Pay::Paddle::Error, e
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
data/lib/pay/paddle/response.rb
DELETED
File without changes
|
data/lib/pay/paddle.rb
DELETED
@@ -1,80 +0,0 @@
|
|
1
|
-
module Pay
|
2
|
-
module Paddle
|
3
|
-
autoload :Billable, "pay/paddle/billable"
|
4
|
-
autoload :Charge, "pay/paddle/charge"
|
5
|
-
autoload :Error, "pay/paddle/error"
|
6
|
-
autoload :PaymentMethod, "pay/paddle/payment_method"
|
7
|
-
autoload :Subscription, "pay/paddle/subscription"
|
8
|
-
|
9
|
-
module Webhooks
|
10
|
-
autoload :SignatureVerifier, "pay/paddle/webhooks/signature_verifier"
|
11
|
-
autoload :SubscriptionCreated, "pay/paddle/webhooks/subscription_created"
|
12
|
-
autoload :SubscriptionCancelled, "pay/paddle/webhooks/subscription_cancelled"
|
13
|
-
autoload :SubscriptionPaymentRefunded, "pay/paddle/webhooks/subscription_payment_refunded"
|
14
|
-
autoload :SubscriptionPaymentSucceeded, "pay/paddle/webhooks/subscription_payment_succeeded"
|
15
|
-
autoload :SubscriptionUpdated, "pay/paddle/webhooks/subscription_updated"
|
16
|
-
end
|
17
|
-
|
18
|
-
extend Env
|
19
|
-
|
20
|
-
def self.enabled?
|
21
|
-
return false unless Pay.enabled_processors.include?(:paddle) && defined?(::PaddlePay)
|
22
|
-
|
23
|
-
Pay::Engine.version_matches?(required: "~> 0.2", current: ::PaddlePay::VERSION) || (raise "[Pay] paddle gem must be version ~> 0.2")
|
24
|
-
end
|
25
|
-
|
26
|
-
def self.setup
|
27
|
-
::PaddlePay.config.vendor_id = vendor_id
|
28
|
-
::PaddlePay.config.vendor_auth_code = vendor_auth_code
|
29
|
-
::PaddlePay.config.environment = environment
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.vendor_id
|
33
|
-
find_value_by_name(:paddle, :vendor_id)
|
34
|
-
end
|
35
|
-
|
36
|
-
def self.vendor_auth_code
|
37
|
-
find_value_by_name(:paddle, :vendor_auth_code)
|
38
|
-
end
|
39
|
-
|
40
|
-
def self.environment
|
41
|
-
find_value_by_name(:paddle, :environment) || "production"
|
42
|
-
end
|
43
|
-
|
44
|
-
def self.public_key
|
45
|
-
find_value_by_name(:paddle, :public_key)
|
46
|
-
end
|
47
|
-
|
48
|
-
def self.public_key_file
|
49
|
-
find_value_by_name(:paddle, :public_key_file)
|
50
|
-
end
|
51
|
-
|
52
|
-
def self.public_key_base64
|
53
|
-
find_value_by_name(:paddle, :public_key_base64)
|
54
|
-
end
|
55
|
-
|
56
|
-
def self.passthrough(owner:, **options)
|
57
|
-
options.merge(owner_sgid: owner.to_sgid.to_s).to_json
|
58
|
-
end
|
59
|
-
|
60
|
-
def self.parse_passthrough(passthrough)
|
61
|
-
JSON.parse(passthrough)
|
62
|
-
end
|
63
|
-
|
64
|
-
def self.owner_from_passthrough(passthrough)
|
65
|
-
GlobalID::Locator.locate_signed parse_passthrough(passthrough)["owner_sgid"]
|
66
|
-
rescue JSON::ParserError
|
67
|
-
nil
|
68
|
-
end
|
69
|
-
|
70
|
-
def self.configure_webhooks
|
71
|
-
Pay::Webhooks.configure do |events|
|
72
|
-
events.subscribe "paddle.subscription_created", Pay::Paddle::Webhooks::SubscriptionCreated.new
|
73
|
-
events.subscribe "paddle.subscription_updated", Pay::Paddle::Webhooks::SubscriptionUpdated.new
|
74
|
-
events.subscribe "paddle.subscription_cancelled", Pay::Paddle::Webhooks::SubscriptionCancelled.new
|
75
|
-
events.subscribe "paddle.subscription_payment_succeeded", Pay::Paddle::Webhooks::SubscriptionPaymentSucceeded.new
|
76
|
-
events.subscribe "paddle.subscription_payment_refunded", Pay::Paddle::Webhooks::SubscriptionPaymentRefunded.new
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|