stripe 8.7.1 → 8.8.0.pre.beta.1
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/CHANGELOG.md +179 -46
- data/README.md +11 -0
- data/VERSION +1 -1
- data/lib/data/ca-certificates.crt +3340 -290
- data/lib/stripe/api_operations/request.rb +2 -0
- data/lib/stripe/api_version.rb +1 -0
- data/lib/stripe/object_types.rb +16 -0
- data/lib/stripe/request_signing_authenticator.rb +83 -0
- data/lib/stripe/resources/account_session.rb +17 -0
- data/lib/stripe/resources/capital/financing_offer.rb +32 -0
- data/lib/stripe/resources/capital/financing_summary.rb +12 -0
- data/lib/stripe/resources/capital/financing_transaction.rb +13 -0
- data/lib/stripe/resources/customer_session.rb +12 -0
- data/lib/stripe/resources/financial_connections/account.rb +39 -0
- data/lib/stripe/resources/financial_connections/inferred_balance.rb +13 -0
- data/lib/stripe/resources/financial_connections/transaction.rb +13 -0
- data/lib/stripe/resources/gift_cards/card.rb +25 -0
- data/lib/stripe/resources/gift_cards/transaction.rb +56 -0
- data/lib/stripe/resources/issuing/card.rb +18 -0
- data/lib/stripe/resources/issuing/card_bundle.rb +13 -0
- data/lib/stripe/resources/issuing/card_design.rb +58 -0
- data/lib/stripe/resources/order.rb +89 -0
- data/lib/stripe/resources/payment_method_configuration.rb +13 -0
- data/lib/stripe/resources/quote.rb +131 -0
- data/lib/stripe/resources/quote_phase.rb +29 -0
- data/lib/stripe/resources/subscription_schedule.rb +18 -0
- data/lib/stripe/resources/tax/form.rb +39 -0
- data/lib/stripe/resources/tax/registration.rb +19 -0
- data/lib/stripe/resources/terminal/reader.rb +54 -0
- data/lib/stripe/resources.rb +16 -0
- data/lib/stripe/stripe_client.rb +60 -26
- data/lib/stripe/stripe_configuration.rb +3 -0
- data/lib/stripe/util.rb +8 -1
- data/lib/stripe/version.rb +1 -1
- data/lib/stripe.rb +47 -0
- metadata +25 -8
|
@@ -29,6 +29,15 @@ module Stripe
|
|
|
29
29
|
)
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
+
def draft_quote(params = {}, opts = {})
|
|
33
|
+
request_stripe_object(
|
|
34
|
+
method: :post,
|
|
35
|
+
path: format("/v1/quotes/%<quote>s/mark_draft", { quote: CGI.escape(self["id"]) }),
|
|
36
|
+
params: params,
|
|
37
|
+
opts: opts
|
|
38
|
+
)
|
|
39
|
+
end
|
|
40
|
+
|
|
32
41
|
def finalize_quote(params = {}, opts = {})
|
|
33
42
|
request_stripe_object(
|
|
34
43
|
method: :post,
|
|
@@ -56,6 +65,24 @@ module Stripe
|
|
|
56
65
|
)
|
|
57
66
|
end
|
|
58
67
|
|
|
68
|
+
def list_lines(params = {}, opts = {})
|
|
69
|
+
request_stripe_object(
|
|
70
|
+
method: :get,
|
|
71
|
+
path: format("/v1/quotes/%<quote>s/lines", { quote: CGI.escape(self["id"]) }),
|
|
72
|
+
params: params,
|
|
73
|
+
opts: opts
|
|
74
|
+
)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def mark_stale_quote(params = {}, opts = {})
|
|
78
|
+
request_stripe_object(
|
|
79
|
+
method: :post,
|
|
80
|
+
path: format("/v1/quotes/%<quote>s/mark_stale", { quote: CGI.escape(self["id"]) }),
|
|
81
|
+
params: params,
|
|
82
|
+
opts: opts
|
|
83
|
+
)
|
|
84
|
+
end
|
|
85
|
+
|
|
59
86
|
def pdf(params = {}, opts = {}, &read_body_chunk_block)
|
|
60
87
|
config = opts[:client]&.config || Stripe.config
|
|
61
88
|
opts = { api_base: config.uploads_base }.merge(opts)
|
|
@@ -68,6 +95,42 @@ module Stripe
|
|
|
68
95
|
)
|
|
69
96
|
end
|
|
70
97
|
|
|
98
|
+
def preview_invoice_lines(preview_invoice, params = {}, opts = {})
|
|
99
|
+
request_stripe_object(
|
|
100
|
+
method: :get,
|
|
101
|
+
path: format("/v1/quotes/%<quote>s/preview_invoices/%<preview_invoice>s/lines", { quote: CGI.escape(self["id"]), preview_invoice: CGI.escape(preview_invoice) }),
|
|
102
|
+
params: params,
|
|
103
|
+
opts: opts
|
|
104
|
+
)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def preview_invoices(params = {}, opts = {})
|
|
108
|
+
request_stripe_object(
|
|
109
|
+
method: :get,
|
|
110
|
+
path: format("/v1/quotes/%<quote>s/preview_invoices", { quote: CGI.escape(self["id"]) }),
|
|
111
|
+
params: params,
|
|
112
|
+
opts: opts
|
|
113
|
+
)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def preview_subscription_schedules(params = {}, opts = {})
|
|
117
|
+
request_stripe_object(
|
|
118
|
+
method: :get,
|
|
119
|
+
path: format("/v1/quotes/%<quote>s/preview_subscription_schedules", { quote: CGI.escape(self["id"]) }),
|
|
120
|
+
params: params,
|
|
121
|
+
opts: opts
|
|
122
|
+
)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def reestimate(params = {}, opts = {})
|
|
126
|
+
request_stripe_object(
|
|
127
|
+
method: :post,
|
|
128
|
+
path: format("/v1/quotes/%<quote>s/reestimate", { quote: CGI.escape(self["id"]) }),
|
|
129
|
+
params: params,
|
|
130
|
+
opts: opts
|
|
131
|
+
)
|
|
132
|
+
end
|
|
133
|
+
|
|
71
134
|
def self.accept(quote, params = {}, opts = {})
|
|
72
135
|
request_stripe_object(
|
|
73
136
|
method: :post,
|
|
@@ -86,6 +149,15 @@ module Stripe
|
|
|
86
149
|
)
|
|
87
150
|
end
|
|
88
151
|
|
|
152
|
+
def self.draft_quote(quote, params = {}, opts = {})
|
|
153
|
+
request_stripe_object(
|
|
154
|
+
method: :post,
|
|
155
|
+
path: format("/v1/quotes/%<quote>s/mark_draft", { quote: CGI.escape(quote) }),
|
|
156
|
+
params: params,
|
|
157
|
+
opts: opts
|
|
158
|
+
)
|
|
159
|
+
end
|
|
160
|
+
|
|
89
161
|
def self.finalize_quote(quote, params = {}, opts = {})
|
|
90
162
|
request_stripe_object(
|
|
91
163
|
method: :post,
|
|
@@ -113,6 +185,24 @@ module Stripe
|
|
|
113
185
|
)
|
|
114
186
|
end
|
|
115
187
|
|
|
188
|
+
def self.list_lines(quote, params = {}, opts = {})
|
|
189
|
+
request_stripe_object(
|
|
190
|
+
method: :get,
|
|
191
|
+
path: format("/v1/quotes/%<quote>s/lines", { quote: CGI.escape(quote) }),
|
|
192
|
+
params: params,
|
|
193
|
+
opts: opts
|
|
194
|
+
)
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def self.mark_stale_quote(quote, params = {}, opts = {})
|
|
198
|
+
request_stripe_object(
|
|
199
|
+
method: :post,
|
|
200
|
+
path: format("/v1/quotes/%<quote>s/mark_stale", { quote: CGI.escape(quote) }),
|
|
201
|
+
params: params,
|
|
202
|
+
opts: opts
|
|
203
|
+
)
|
|
204
|
+
end
|
|
205
|
+
|
|
116
206
|
def self.pdf(quote, params = {}, opts = {}, &read_body_chunk_block)
|
|
117
207
|
config = opts[:client]&.config || Stripe.config
|
|
118
208
|
opts = { api_base: config.uploads_base }.merge(opts)
|
|
@@ -124,5 +214,46 @@ module Stripe
|
|
|
124
214
|
&read_body_chunk_block
|
|
125
215
|
)
|
|
126
216
|
end
|
|
217
|
+
|
|
218
|
+
def self.preview_invoice_lines(
|
|
219
|
+
quote,
|
|
220
|
+
preview_invoice,
|
|
221
|
+
params = {},
|
|
222
|
+
opts = {}
|
|
223
|
+
)
|
|
224
|
+
request_stripe_object(
|
|
225
|
+
method: :get,
|
|
226
|
+
path: format("/v1/quotes/%<quote>s/preview_invoices/%<preview_invoice>s/lines", { quote: CGI.escape(quote), preview_invoice: CGI.escape(preview_invoice) }),
|
|
227
|
+
params: params,
|
|
228
|
+
opts: opts
|
|
229
|
+
)
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
def self.preview_invoices(quote, params = {}, opts = {})
|
|
233
|
+
request_stripe_object(
|
|
234
|
+
method: :get,
|
|
235
|
+
path: format("/v1/quotes/%<quote>s/preview_invoices", { quote: CGI.escape(quote) }),
|
|
236
|
+
params: params,
|
|
237
|
+
opts: opts
|
|
238
|
+
)
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
def self.preview_subscription_schedules(quote, params = {}, opts = {})
|
|
242
|
+
request_stripe_object(
|
|
243
|
+
method: :get,
|
|
244
|
+
path: format("/v1/quotes/%<quote>s/preview_subscription_schedules", { quote: CGI.escape(quote) }),
|
|
245
|
+
params: params,
|
|
246
|
+
opts: opts
|
|
247
|
+
)
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
def self.reestimate(quote, params = {}, opts = {})
|
|
251
|
+
request_stripe_object(
|
|
252
|
+
method: :post,
|
|
253
|
+
path: format("/v1/quotes/%<quote>s/reestimate", { quote: CGI.escape(quote) }),
|
|
254
|
+
params: params,
|
|
255
|
+
opts: opts
|
|
256
|
+
)
|
|
257
|
+
end
|
|
127
258
|
end
|
|
128
259
|
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Stripe
|
|
5
|
+
# A quote phase describes the line items, coupons, and trialing status of a subscription for a predefined time period.
|
|
6
|
+
class QuotePhase < APIResource
|
|
7
|
+
extend Stripe::APIOperations::List
|
|
8
|
+
|
|
9
|
+
OBJECT_NAME = "quote_phase"
|
|
10
|
+
|
|
11
|
+
def list_line_items(params = {}, opts = {})
|
|
12
|
+
request_stripe_object(
|
|
13
|
+
method: :get,
|
|
14
|
+
path: format("/v1/quote_phases/%<quote_phase>s/line_items", { quote_phase: CGI.escape(self["id"]) }),
|
|
15
|
+
params: params,
|
|
16
|
+
opts: opts
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.list_line_items(quote_phase, params = {}, opts = {})
|
|
21
|
+
request_stripe_object(
|
|
22
|
+
method: :get,
|
|
23
|
+
path: format("/v1/quote_phases/%<quote_phase>s/line_items", { quote_phase: CGI.escape(quote_phase) }),
|
|
24
|
+
params: params,
|
|
25
|
+
opts: opts
|
|
26
|
+
)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -12,6 +12,15 @@ module Stripe
|
|
|
12
12
|
|
|
13
13
|
OBJECT_NAME = "subscription_schedule"
|
|
14
14
|
|
|
15
|
+
def amend(params = {}, opts = {})
|
|
16
|
+
request_stripe_object(
|
|
17
|
+
method: :post,
|
|
18
|
+
path: format("/v1/subscription_schedules/%<schedule>s/amend", { schedule: CGI.escape(self["id"]) }),
|
|
19
|
+
params: params,
|
|
20
|
+
opts: opts
|
|
21
|
+
)
|
|
22
|
+
end
|
|
23
|
+
|
|
15
24
|
def cancel(params = {}, opts = {})
|
|
16
25
|
request_stripe_object(
|
|
17
26
|
method: :post,
|
|
@@ -30,6 +39,15 @@ module Stripe
|
|
|
30
39
|
)
|
|
31
40
|
end
|
|
32
41
|
|
|
42
|
+
def self.amend(schedule, params = {}, opts = {})
|
|
43
|
+
request_stripe_object(
|
|
44
|
+
method: :post,
|
|
45
|
+
path: format("/v1/subscription_schedules/%<schedule>s/amend", { schedule: CGI.escape(schedule) }),
|
|
46
|
+
params: params,
|
|
47
|
+
opts: opts
|
|
48
|
+
)
|
|
49
|
+
end
|
|
50
|
+
|
|
33
51
|
def self.cancel(schedule, params = {}, opts = {})
|
|
34
52
|
request_stripe_object(
|
|
35
53
|
method: :post,
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Stripe
|
|
5
|
+
module Tax
|
|
6
|
+
# Tax forms are legal documents which are delivered to one or more tax authorities for information reporting purposes.
|
|
7
|
+
#
|
|
8
|
+
# Related guide: [US tax reporting for Connect platforms](https://stripe.com/docs/connect/tax-reporting)
|
|
9
|
+
class Form < APIResource
|
|
10
|
+
extend Stripe::APIOperations::List
|
|
11
|
+
|
|
12
|
+
OBJECT_NAME = "tax.form"
|
|
13
|
+
|
|
14
|
+
def pdf(params = {}, opts = {}, &read_body_chunk_block)
|
|
15
|
+
config = opts[:client]&.config || Stripe.config
|
|
16
|
+
opts = { api_base: config.uploads_base }.merge(opts)
|
|
17
|
+
request_stream(
|
|
18
|
+
method: :get,
|
|
19
|
+
path: format("/v1/tax/forms/%<id>s/pdf", { id: CGI.escape(self["id"]) }),
|
|
20
|
+
params: params,
|
|
21
|
+
opts: opts,
|
|
22
|
+
&read_body_chunk_block
|
|
23
|
+
)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.pdf(id, params = {}, opts = {}, &read_body_chunk_block)
|
|
27
|
+
config = opts[:client]&.config || Stripe.config
|
|
28
|
+
opts = { api_base: config.uploads_base }.merge(opts)
|
|
29
|
+
execute_resource_request_stream(
|
|
30
|
+
:get,
|
|
31
|
+
format("/v1/tax/forms/%<id>s/pdf", { id: CGI.escape(id) }),
|
|
32
|
+
params,
|
|
33
|
+
opts,
|
|
34
|
+
&read_body_chunk_block
|
|
35
|
+
)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Stripe
|
|
5
|
+
module Tax
|
|
6
|
+
# A Tax `Registration` lets us know that your business is registered to collect tax on payments within a region, enabling you to [automatically collect tax](https://stripe.com/docs/tax).
|
|
7
|
+
#
|
|
8
|
+
# Stripe doesn't register on your behalf with the relevant authorities when you create a Tax `Registration` object. For more information on how to register to collect tax, see [our guide](https://stripe.com/docs/tax/registering).
|
|
9
|
+
#
|
|
10
|
+
# Related guide: [Using the Registrations API](https://stripe.com/docs/tax/registrations-api)
|
|
11
|
+
class Registration < APIResource
|
|
12
|
+
extend Stripe::APIOperations::Create
|
|
13
|
+
extend Stripe::APIOperations::List
|
|
14
|
+
include Stripe::APIOperations::Save
|
|
15
|
+
|
|
16
|
+
OBJECT_NAME = "tax.registration"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -23,6 +23,33 @@ module Stripe
|
|
|
23
23
|
)
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
+
def collect_inputs(params = {}, opts = {})
|
|
27
|
+
request_stripe_object(
|
|
28
|
+
method: :post,
|
|
29
|
+
path: format("/v1/terminal/readers/%<reader>s/collect_inputs", { reader: CGI.escape(self["id"]) }),
|
|
30
|
+
params: params,
|
|
31
|
+
opts: opts
|
|
32
|
+
)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def collect_payment_method(params = {}, opts = {})
|
|
36
|
+
request_stripe_object(
|
|
37
|
+
method: :post,
|
|
38
|
+
path: format("/v1/terminal/readers/%<reader>s/collect_payment_method", { reader: CGI.escape(self["id"]) }),
|
|
39
|
+
params: params,
|
|
40
|
+
opts: opts
|
|
41
|
+
)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def confirm_payment_intent(params = {}, opts = {})
|
|
45
|
+
request_stripe_object(
|
|
46
|
+
method: :post,
|
|
47
|
+
path: format("/v1/terminal/readers/%<reader>s/confirm_payment_intent", { reader: CGI.escape(self["id"]) }),
|
|
48
|
+
params: params,
|
|
49
|
+
opts: opts
|
|
50
|
+
)
|
|
51
|
+
end
|
|
52
|
+
|
|
26
53
|
def process_payment_intent(params = {}, opts = {})
|
|
27
54
|
request_stripe_object(
|
|
28
55
|
method: :post,
|
|
@@ -68,6 +95,33 @@ module Stripe
|
|
|
68
95
|
)
|
|
69
96
|
end
|
|
70
97
|
|
|
98
|
+
def self.collect_inputs(reader, params = {}, opts = {})
|
|
99
|
+
request_stripe_object(
|
|
100
|
+
method: :post,
|
|
101
|
+
path: format("/v1/terminal/readers/%<reader>s/collect_inputs", { reader: CGI.escape(reader) }),
|
|
102
|
+
params: params,
|
|
103
|
+
opts: opts
|
|
104
|
+
)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def self.collect_payment_method(reader, params = {}, opts = {})
|
|
108
|
+
request_stripe_object(
|
|
109
|
+
method: :post,
|
|
110
|
+
path: format("/v1/terminal/readers/%<reader>s/collect_payment_method", { reader: CGI.escape(reader) }),
|
|
111
|
+
params: params,
|
|
112
|
+
opts: opts
|
|
113
|
+
)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def self.confirm_payment_intent(reader, params = {}, opts = {})
|
|
117
|
+
request_stripe_object(
|
|
118
|
+
method: :post,
|
|
119
|
+
path: format("/v1/terminal/readers/%<reader>s/confirm_payment_intent", { reader: CGI.escape(reader) }),
|
|
120
|
+
params: params,
|
|
121
|
+
opts: opts
|
|
122
|
+
)
|
|
123
|
+
end
|
|
124
|
+
|
|
71
125
|
def self.process_payment_intent(reader, params = {}, opts = {})
|
|
72
126
|
request_stripe_object(
|
|
73
127
|
method: :post,
|
data/lib/stripe/resources.rb
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
require "stripe/resources/account"
|
|
5
5
|
require "stripe/resources/account_link"
|
|
6
|
+
require "stripe/resources/account_session"
|
|
6
7
|
require "stripe/resources/apple_pay_domain"
|
|
7
8
|
require "stripe/resources/application_fee"
|
|
8
9
|
require "stripe/resources/application_fee_refund"
|
|
@@ -13,6 +14,9 @@ require "stripe/resources/bank_account"
|
|
|
13
14
|
require "stripe/resources/billing_portal/configuration"
|
|
14
15
|
require "stripe/resources/billing_portal/session"
|
|
15
16
|
require "stripe/resources/capability"
|
|
17
|
+
require "stripe/resources/capital/financing_offer"
|
|
18
|
+
require "stripe/resources/capital/financing_summary"
|
|
19
|
+
require "stripe/resources/capital/financing_transaction"
|
|
16
20
|
require "stripe/resources/card"
|
|
17
21
|
require "stripe/resources/cash_balance"
|
|
18
22
|
require "stripe/resources/charge"
|
|
@@ -24,6 +28,7 @@ require "stripe/resources/credit_note_line_item"
|
|
|
24
28
|
require "stripe/resources/customer"
|
|
25
29
|
require "stripe/resources/customer_balance_transaction"
|
|
26
30
|
require "stripe/resources/customer_cash_balance_transaction"
|
|
31
|
+
require "stripe/resources/customer_session"
|
|
27
32
|
require "stripe/resources/discount"
|
|
28
33
|
require "stripe/resources/dispute"
|
|
29
34
|
require "stripe/resources/ephemeral_key"
|
|
@@ -34,8 +39,12 @@ require "stripe/resources/file_link"
|
|
|
34
39
|
require "stripe/resources/financial_connections/account"
|
|
35
40
|
require "stripe/resources/financial_connections/account_owner"
|
|
36
41
|
require "stripe/resources/financial_connections/account_ownership"
|
|
42
|
+
require "stripe/resources/financial_connections/inferred_balance"
|
|
37
43
|
require "stripe/resources/financial_connections/session"
|
|
44
|
+
require "stripe/resources/financial_connections/transaction"
|
|
38
45
|
require "stripe/resources/funding_instructions"
|
|
46
|
+
require "stripe/resources/gift_cards/card"
|
|
47
|
+
require "stripe/resources/gift_cards/transaction"
|
|
39
48
|
require "stripe/resources/identity/verification_report"
|
|
40
49
|
require "stripe/resources/identity/verification_session"
|
|
41
50
|
require "stripe/resources/invoice"
|
|
@@ -43,15 +52,19 @@ require "stripe/resources/invoice_item"
|
|
|
43
52
|
require "stripe/resources/invoice_line_item"
|
|
44
53
|
require "stripe/resources/issuing/authorization"
|
|
45
54
|
require "stripe/resources/issuing/card"
|
|
55
|
+
require "stripe/resources/issuing/card_bundle"
|
|
56
|
+
require "stripe/resources/issuing/card_design"
|
|
46
57
|
require "stripe/resources/issuing/cardholder"
|
|
47
58
|
require "stripe/resources/issuing/dispute"
|
|
48
59
|
require "stripe/resources/issuing/transaction"
|
|
49
60
|
require "stripe/resources/line_item"
|
|
50
61
|
require "stripe/resources/login_link"
|
|
51
62
|
require "stripe/resources/mandate"
|
|
63
|
+
require "stripe/resources/order"
|
|
52
64
|
require "stripe/resources/payment_intent"
|
|
53
65
|
require "stripe/resources/payment_link"
|
|
54
66
|
require "stripe/resources/payment_method"
|
|
67
|
+
require "stripe/resources/payment_method_configuration"
|
|
55
68
|
require "stripe/resources/payout"
|
|
56
69
|
require "stripe/resources/person"
|
|
57
70
|
require "stripe/resources/plan"
|
|
@@ -59,6 +72,7 @@ require "stripe/resources/price"
|
|
|
59
72
|
require "stripe/resources/product"
|
|
60
73
|
require "stripe/resources/promotion_code"
|
|
61
74
|
require "stripe/resources/quote"
|
|
75
|
+
require "stripe/resources/quote_phase"
|
|
62
76
|
require "stripe/resources/radar/early_fraud_warning"
|
|
63
77
|
require "stripe/resources/radar/value_list"
|
|
64
78
|
require "stripe/resources/radar/value_list_item"
|
|
@@ -78,6 +92,8 @@ require "stripe/resources/subscription_item"
|
|
|
78
92
|
require "stripe/resources/subscription_schedule"
|
|
79
93
|
require "stripe/resources/tax/calculation"
|
|
80
94
|
require "stripe/resources/tax/calculation_line_item"
|
|
95
|
+
require "stripe/resources/tax/form"
|
|
96
|
+
require "stripe/resources/tax/registration"
|
|
81
97
|
require "stripe/resources/tax/settings"
|
|
82
98
|
require "stripe/resources/tax/transaction"
|
|
83
99
|
require "stripe/resources/tax/transaction_line_item"
|
data/lib/stripe/stripe_client.rb
CHANGED
|
@@ -212,9 +212,10 @@ module Stripe
|
|
|
212
212
|
end
|
|
213
213
|
|
|
214
214
|
def execute_request(method, path,
|
|
215
|
-
api_base: nil, api_key: nil,
|
|
215
|
+
api_base: nil, api_key: nil,
|
|
216
|
+
headers: {}, params: {}, api_mode: nil)
|
|
216
217
|
http_resp, api_key = execute_request_internal(
|
|
217
|
-
method, path, api_base, api_key, headers, params
|
|
218
|
+
method, path, api_base, api_key, headers, params, api_mode
|
|
218
219
|
)
|
|
219
220
|
|
|
220
221
|
begin
|
|
@@ -245,6 +246,7 @@ module Stripe
|
|
|
245
246
|
def execute_request_stream(method, path,
|
|
246
247
|
api_base: nil, api_key: nil,
|
|
247
248
|
headers: {}, params: {},
|
|
249
|
+
api_mode: nil,
|
|
248
250
|
&read_body_chunk_block)
|
|
249
251
|
unless block_given?
|
|
250
252
|
raise ArgumentError,
|
|
@@ -252,7 +254,8 @@ module Stripe
|
|
|
252
254
|
end
|
|
253
255
|
|
|
254
256
|
http_resp, api_key = execute_request_internal(
|
|
255
|
-
method, path, api_base, api_key,
|
|
257
|
+
method, path, api_base, api_key,
|
|
258
|
+
headers, params, api_mode, &read_body_chunk_block
|
|
256
259
|
)
|
|
257
260
|
|
|
258
261
|
# When the read_body_chunk_block is given, we no longer have access to the
|
|
@@ -432,7 +435,7 @@ module Stripe
|
|
|
432
435
|
|
|
433
436
|
private def execute_request_internal(method, path,
|
|
434
437
|
api_base, api_key, headers, params,
|
|
435
|
-
&read_body_chunk_block)
|
|
438
|
+
api_mode, &read_body_chunk_block)
|
|
436
439
|
raise ArgumentError, "method should be a symbol" \
|
|
437
440
|
unless method.is_a?(Symbol)
|
|
438
441
|
raise ArgumentError, "path should be a string" \
|
|
@@ -440,9 +443,10 @@ module Stripe
|
|
|
440
443
|
|
|
441
444
|
api_base ||= config.api_base
|
|
442
445
|
api_key ||= config.api_key
|
|
446
|
+
authenticator ||= config.authenticator
|
|
443
447
|
params = Util.objects_to_ids(params)
|
|
444
448
|
|
|
445
|
-
|
|
449
|
+
check_keys!(api_key, authenticator)
|
|
446
450
|
|
|
447
451
|
body_params = nil
|
|
448
452
|
query_params = nil
|
|
@@ -455,8 +459,9 @@ module Stripe
|
|
|
455
459
|
|
|
456
460
|
query_params, path = merge_query_params(query_params, path)
|
|
457
461
|
|
|
458
|
-
headers = request_headers(api_key, method)
|
|
462
|
+
headers = request_headers(api_key, method, api_mode)
|
|
459
463
|
.update(Util.normalize_headers(headers))
|
|
464
|
+
|
|
460
465
|
url = api_url(path, api_base)
|
|
461
466
|
|
|
462
467
|
# Merge given query parameters with any already encoded in the path.
|
|
@@ -467,13 +472,16 @@ module Stripe
|
|
|
467
472
|
# a log-friendly variant of the encoded form. File objects are displayed
|
|
468
473
|
# as such instead of as their file contents.
|
|
469
474
|
body, body_log =
|
|
470
|
-
body_params ? encode_body(body_params, headers) : [nil, nil]
|
|
475
|
+
body_params ? encode_body(body_params, headers, api_mode) : [nil, nil]
|
|
476
|
+
|
|
477
|
+
authenticator.authenticate(method, headers, body) unless api_key
|
|
471
478
|
|
|
472
479
|
# stores information on the request we're about to make so that we don't
|
|
473
480
|
# have to pass as many parameters around for logging.
|
|
474
481
|
context = RequestLogContext.new
|
|
475
482
|
context.account = headers["Stripe-Account"]
|
|
476
483
|
context.api_key = api_key
|
|
484
|
+
context.authenticator = authenticator
|
|
477
485
|
context.api_version = headers["Stripe-Version"]
|
|
478
486
|
context.body = body_log
|
|
479
487
|
context.idempotency_key = headers["Idempotency-Key"]
|
|
@@ -512,8 +520,16 @@ module Stripe
|
|
|
512
520
|
(api_base || config.api_base) + url
|
|
513
521
|
end
|
|
514
522
|
|
|
515
|
-
private def
|
|
516
|
-
|
|
523
|
+
private def check_keys!(api_key, authenticator)
|
|
524
|
+
if api_key && authenticator
|
|
525
|
+
raise AuthenticationError, "Can't specify both API key " \
|
|
526
|
+
"and authenticator. Either set your API key" \
|
|
527
|
+
'using "Stripe.api_key = <API-KEY>", or set your authenticator ' \
|
|
528
|
+
'using "Stripe.authenticator = <AUTHENTICATOR>"' \
|
|
529
|
+
end
|
|
530
|
+
|
|
531
|
+
unless api_key || authenticator
|
|
532
|
+
# Default to missing API key error message for general users.
|
|
517
533
|
raise AuthenticationError, "No API key provided. " \
|
|
518
534
|
'Set your API key using "Stripe.api_key = <API-KEY>". ' \
|
|
519
535
|
"You can generate API keys from the Stripe web interface. " \
|
|
@@ -532,7 +548,7 @@ module Stripe
|
|
|
532
548
|
# Encodes a set of body parameters using multipart if `Content-Type` is set
|
|
533
549
|
# for that, or standard form-encoding otherwise. Returns the encoded body
|
|
534
550
|
# and a version of the encoded body that's safe to be logged.
|
|
535
|
-
private def encode_body(body_params, headers)
|
|
551
|
+
private def encode_body(body_params, headers, api_mode)
|
|
536
552
|
body = nil
|
|
537
553
|
flattened_params = Util.flatten_params(body_params)
|
|
538
554
|
|
|
@@ -548,15 +564,22 @@ module Stripe
|
|
|
548
564
|
flattened_params =
|
|
549
565
|
flattened_params.map { |k, v| [k, v.is_a?(String) ? v : v.to_s] }.to_h
|
|
550
566
|
|
|
567
|
+
elsif api_mode == :preview
|
|
568
|
+
body = JSON.generate(body_params)
|
|
569
|
+
headers["Content-Type"] = "application/json"
|
|
551
570
|
else
|
|
552
571
|
body = Util.encode_parameters(body_params)
|
|
553
572
|
end
|
|
554
573
|
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
574
|
+
if api_mode == :preview
|
|
575
|
+
body_log = body
|
|
576
|
+
else
|
|
577
|
+
# We don't use `Util.encode_parameters` partly as an optimization (to
|
|
578
|
+
# not redo work we've already done), and partly because the encoded
|
|
579
|
+
# forms of certain characters introduce a lot of visual noise and it's
|
|
580
|
+
# nice to have a clearer format for logs.
|
|
581
|
+
body_log = flattened_params.map { |k, v| "#{k}=#{v}" }.join("&")
|
|
582
|
+
end
|
|
560
583
|
|
|
561
584
|
[body, body_log]
|
|
562
585
|
end
|
|
@@ -745,10 +768,11 @@ module Stripe
|
|
|
745
768
|
end
|
|
746
769
|
|
|
747
770
|
private def specific_api_error(resp, error_data, context)
|
|
771
|
+
message = error_data[:message]
|
|
748
772
|
Util.log_error("Stripe API error",
|
|
749
773
|
status: resp.http_status,
|
|
750
774
|
error_code: error_data[:code],
|
|
751
|
-
error_message:
|
|
775
|
+
error_message: message,
|
|
752
776
|
error_param: error_data[:param],
|
|
753
777
|
error_type: error_data[:type],
|
|
754
778
|
idempotency_key: context.idempotency_key,
|
|
@@ -769,26 +793,26 @@ module Stripe
|
|
|
769
793
|
when 400, 404
|
|
770
794
|
case error_data[:type]
|
|
771
795
|
when "idempotency_error"
|
|
772
|
-
IdempotencyError.new(
|
|
796
|
+
IdempotencyError.new(message, **opts)
|
|
773
797
|
else
|
|
774
798
|
InvalidRequestError.new(
|
|
775
|
-
|
|
799
|
+
message, error_data[:param],
|
|
776
800
|
**opts
|
|
777
801
|
)
|
|
778
802
|
end
|
|
779
803
|
when 401
|
|
780
|
-
AuthenticationError.new(
|
|
804
|
+
AuthenticationError.new(message, **opts)
|
|
781
805
|
when 402
|
|
782
806
|
CardError.new(
|
|
783
|
-
|
|
807
|
+
message, error_data[:param],
|
|
784
808
|
**opts
|
|
785
809
|
)
|
|
786
810
|
when 403
|
|
787
|
-
PermissionError.new(
|
|
811
|
+
PermissionError.new(message, **opts)
|
|
788
812
|
when 429
|
|
789
|
-
RateLimitError.new(
|
|
813
|
+
RateLimitError.new(message, **opts)
|
|
790
814
|
else
|
|
791
|
-
APIError.new(
|
|
815
|
+
APIError.new(message, **opts)
|
|
792
816
|
end
|
|
793
817
|
end
|
|
794
818
|
|
|
@@ -856,7 +880,7 @@ module Stripe
|
|
|
856
880
|
message + "\n\n(Network error: #{error.message})"
|
|
857
881
|
end
|
|
858
882
|
|
|
859
|
-
private def request_headers(api_key, method)
|
|
883
|
+
private def request_headers(api_key, method, api_mode)
|
|
860
884
|
user_agent = "Stripe/v1 RubyBindings/#{Stripe::VERSION}"
|
|
861
885
|
unless Stripe.app_info.nil?
|
|
862
886
|
user_agent += " " + format_app_info(Stripe.app_info)
|
|
@@ -865,9 +889,13 @@ module Stripe
|
|
|
865
889
|
headers = {
|
|
866
890
|
"User-Agent" => user_agent,
|
|
867
891
|
"Authorization" => "Bearer #{api_key}",
|
|
868
|
-
"Content-Type" => "application/x-www-form-urlencoded",
|
|
869
892
|
}
|
|
870
893
|
|
|
894
|
+
if api_mode != :preview
|
|
895
|
+
# TODO: (major) don't set Content-Type if method is not post
|
|
896
|
+
headers["Content-Type"] = "application/x-www-form-urlencoded"
|
|
897
|
+
end
|
|
898
|
+
|
|
871
899
|
if config.enable_telemetry? && !@last_request_metrics.nil?
|
|
872
900
|
headers["X-Stripe-Client-Telemetry"] = JSON.generate(
|
|
873
901
|
last_request_metrics: @last_request_metrics.payload
|
|
@@ -880,7 +908,12 @@ module Stripe
|
|
|
880
908
|
headers["Idempotency-Key"] ||= SecureRandom.uuid
|
|
881
909
|
end
|
|
882
910
|
|
|
883
|
-
|
|
911
|
+
if api_mode == :preview
|
|
912
|
+
headers["Stripe-Version"] = ApiVersion::PREVIEW
|
|
913
|
+
elsif config.api_version
|
|
914
|
+
headers["Stripe-Version"] = config.api_version
|
|
915
|
+
end
|
|
916
|
+
|
|
884
917
|
headers["Stripe-Account"] = config.stripe_account if config.stripe_account
|
|
885
918
|
|
|
886
919
|
user_agent = @system_profiler.user_agent
|
|
@@ -966,6 +999,7 @@ module Stripe
|
|
|
966
999
|
attr_accessor :body
|
|
967
1000
|
attr_accessor :account
|
|
968
1001
|
attr_accessor :api_key
|
|
1002
|
+
attr_accessor :authenticator
|
|
969
1003
|
attr_accessor :api_version
|
|
970
1004
|
attr_accessor :idempotency_key
|
|
971
1005
|
attr_accessor :method
|
|
@@ -27,6 +27,7 @@ module Stripe
|
|
|
27
27
|
class StripeConfiguration
|
|
28
28
|
attr_accessor :api_key
|
|
29
29
|
attr_accessor :api_version
|
|
30
|
+
attr_accessor :authenticator
|
|
30
31
|
attr_accessor :client_id
|
|
31
32
|
attr_accessor :enable_telemetry
|
|
32
33
|
attr_accessor :logger
|
|
@@ -63,6 +64,8 @@ module Stripe
|
|
|
63
64
|
end
|
|
64
65
|
|
|
65
66
|
def initialize
|
|
67
|
+
@api_version = ApiVersion::CURRENT
|
|
68
|
+
|
|
66
69
|
@ca_bundle_path = Stripe::DEFAULT_CA_BUNDLE_PATH
|
|
67
70
|
@enable_telemetry = true
|
|
68
71
|
@verify_ssl_certs = true
|