stripe 11.3.0.pre.beta.1 → 11.3.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/CHANGELOG.md +658 -1314
- data/OPENAPI_VERSION +1 -1
- data/README.md +0 -11
- data/VERSION +1 -1
- data/lib/stripe/api_operations/request.rb +1 -2
- data/lib/stripe/api_version.rb +0 -1
- data/lib/stripe/object_types.rb +0 -16
- data/lib/stripe/resources/account.rb +28 -15
- data/lib/stripe/resources/bank_account.rb +4 -3
- data/lib/stripe/resources/event.rb +3 -3
- data/lib/stripe/resources/financial_connections/account.rb +0 -3
- data/lib/stripe/resources/invoice.rb +5 -100
- data/lib/stripe/resources/issuing/authorization.rb +11 -0
- data/lib/stripe/resources/login_link.rb +1 -1
- data/lib/stripe/resources/payment_intent.rb +0 -50
- data/lib/stripe/resources/person.rb +2 -3
- data/lib/stripe/resources/quote.rb +0 -104
- data/lib/stripe/resources/subscription_schedule.rb +0 -20
- data/lib/stripe/resources/terminal/reader.rb +0 -60
- data/lib/stripe/resources/token.rb +2 -2
- data/lib/stripe/resources/webhook_endpoint.rb +2 -2
- data/lib/stripe/resources.rb +0 -15
- data/lib/stripe/stripe_client.rb +28 -62
- data/lib/stripe/stripe_configuration.rb +1 -2
- data/lib/stripe/util.rb +1 -8
- data/lib/stripe/version.rb +1 -1
- data/lib/stripe.rb +0 -54
- metadata +5 -21
- data/lib/stripe/request_signing_authenticator.rb +0 -79
- data/lib/stripe/resources/account_notice.rb +0 -32
- data/lib/stripe/resources/capital/financing_offer.rb +0 -49
- data/lib/stripe/resources/capital/financing_summary.rb +0 -15
- data/lib/stripe/resources/capital/financing_transaction.rb +0 -27
- data/lib/stripe/resources/financial_connections/account_inferred_balance.rb +0 -14
- data/lib/stripe/resources/gift_cards/card.rb +0 -59
- data/lib/stripe/resources/gift_cards/transaction.rb +0 -93
- data/lib/stripe/resources/invoice_payment.rb +0 -12
- data/lib/stripe/resources/issuing/credit_underwriting_record.rb +0 -88
- data/lib/stripe/resources/margin.rb +0 -37
- data/lib/stripe/resources/order.rb +0 -120
- data/lib/stripe/resources/quote_phase.rb +0 -39
- data/lib/stripe/resources/quote_preview_invoice.rb +0 -43
- data/lib/stripe/resources/quote_preview_subscription_schedule.rb +0 -11
- data/lib/stripe/resources/tax/form.rb +0 -49
@@ -7,7 +7,6 @@ module Stripe
|
|
7
7
|
class Quote < APIResource
|
8
8
|
extend Stripe::APIOperations::Create
|
9
9
|
extend Stripe::APIOperations::List
|
10
|
-
extend Stripe::APIOperations::NestedResource
|
11
10
|
include Stripe::APIOperations::Save
|
12
11
|
|
13
12
|
OBJECT_NAME = "quote"
|
@@ -15,9 +14,6 @@ module Stripe
|
|
15
14
|
"quote"
|
16
15
|
end
|
17
16
|
|
18
|
-
nested_resource_class_methods :preview_invoice, operations: %i[list]
|
19
|
-
nested_resource_class_methods :preview_subscription_schedule, operations: %i[list]
|
20
|
-
|
21
17
|
# Accepts the specified quote.
|
22
18
|
def accept(params = {}, opts = {})
|
23
19
|
request_stripe_object(
|
@@ -128,86 +124,6 @@ module Stripe
|
|
128
124
|
)
|
129
125
|
end
|
130
126
|
|
131
|
-
# Retrieves a paginated list of lines for a quote. These lines describe changes that will be used to create new subscription schedules or update existing subscription schedules when the quote is accepted.
|
132
|
-
def list_lines(params = {}, opts = {})
|
133
|
-
request_stripe_object(
|
134
|
-
method: :get,
|
135
|
-
path: format("/v1/quotes/%<quote>s/lines", { quote: CGI.escape(self["id"]) }),
|
136
|
-
params: params,
|
137
|
-
opts: opts
|
138
|
-
)
|
139
|
-
end
|
140
|
-
|
141
|
-
# Retrieves a paginated list of lines for a quote. These lines describe changes that will be used to create new subscription schedules or update existing subscription schedules when the quote is accepted.
|
142
|
-
def self.list_lines(quote, params = {}, opts = {})
|
143
|
-
request_stripe_object(
|
144
|
-
method: :get,
|
145
|
-
path: format("/v1/quotes/%<quote>s/lines", { quote: CGI.escape(quote) }),
|
146
|
-
params: params,
|
147
|
-
opts: opts
|
148
|
-
)
|
149
|
-
end
|
150
|
-
|
151
|
-
# Preview the invoice line items that would be generated by accepting the quote.
|
152
|
-
def list_preview_invoice_lines(preview_invoice, params = {}, opts = {})
|
153
|
-
request_stripe_object(
|
154
|
-
method: :get,
|
155
|
-
path: format("/v1/quotes/%<quote>s/preview_invoices/%<preview_invoice>s/lines", { quote: CGI.escape(self["id"]), preview_invoice: CGI.escape(preview_invoice) }),
|
156
|
-
params: params,
|
157
|
-
opts: opts
|
158
|
-
)
|
159
|
-
end
|
160
|
-
|
161
|
-
# Preview the invoice line items that would be generated by accepting the quote.
|
162
|
-
def self.list_preview_invoice_lines(quote, preview_invoice, params = {}, opts = {})
|
163
|
-
request_stripe_object(
|
164
|
-
method: :get,
|
165
|
-
path: format("/v1/quotes/%<quote>s/preview_invoices/%<preview_invoice>s/lines", { quote: CGI.escape(quote), preview_invoice: CGI.escape(preview_invoice) }),
|
166
|
-
params: params,
|
167
|
-
opts: opts
|
168
|
-
)
|
169
|
-
end
|
170
|
-
|
171
|
-
# Converts a stale quote to draft.
|
172
|
-
def mark_draft(params = {}, opts = {})
|
173
|
-
request_stripe_object(
|
174
|
-
method: :post,
|
175
|
-
path: format("/v1/quotes/%<quote>s/mark_draft", { quote: CGI.escape(self["id"]) }),
|
176
|
-
params: params,
|
177
|
-
opts: opts
|
178
|
-
)
|
179
|
-
end
|
180
|
-
|
181
|
-
# Converts a stale quote to draft.
|
182
|
-
def self.mark_draft(quote, params = {}, opts = {})
|
183
|
-
request_stripe_object(
|
184
|
-
method: :post,
|
185
|
-
path: format("/v1/quotes/%<quote>s/mark_draft", { quote: CGI.escape(quote) }),
|
186
|
-
params: params,
|
187
|
-
opts: opts
|
188
|
-
)
|
189
|
-
end
|
190
|
-
|
191
|
-
# Converts a draft or open quote to stale.
|
192
|
-
def mark_stale(params = {}, opts = {})
|
193
|
-
request_stripe_object(
|
194
|
-
method: :post,
|
195
|
-
path: format("/v1/quotes/%<quote>s/mark_stale", { quote: CGI.escape(self["id"]) }),
|
196
|
-
params: params,
|
197
|
-
opts: opts
|
198
|
-
)
|
199
|
-
end
|
200
|
-
|
201
|
-
# Converts a draft or open quote to stale.
|
202
|
-
def self.mark_stale(quote, params = {}, opts = {})
|
203
|
-
request_stripe_object(
|
204
|
-
method: :post,
|
205
|
-
path: format("/v1/quotes/%<quote>s/mark_stale", { quote: CGI.escape(quote) }),
|
206
|
-
params: params,
|
207
|
-
opts: opts
|
208
|
-
)
|
209
|
-
end
|
210
|
-
|
211
127
|
# Download the PDF for a finalized quote. Explanation for special handling can be found [here](https://docs.corp.stripe.com/quotes/overview#quote_pdf)
|
212
128
|
def pdf(params = {}, opts = {}, &read_body_chunk_block)
|
213
129
|
config = opts[:client]&.config || Stripe.config
|
@@ -234,26 +150,6 @@ module Stripe
|
|
234
150
|
)
|
235
151
|
end
|
236
152
|
|
237
|
-
# Recompute the upcoming invoice estimate for the quote.
|
238
|
-
def reestimate(params = {}, opts = {})
|
239
|
-
request_stripe_object(
|
240
|
-
method: :post,
|
241
|
-
path: format("/v1/quotes/%<quote>s/reestimate", { quote: CGI.escape(self["id"]) }),
|
242
|
-
params: params,
|
243
|
-
opts: opts
|
244
|
-
)
|
245
|
-
end
|
246
|
-
|
247
|
-
# Recompute the upcoming invoice estimate for the quote.
|
248
|
-
def self.reestimate(quote, params = {}, opts = {})
|
249
|
-
request_stripe_object(
|
250
|
-
method: :post,
|
251
|
-
path: format("/v1/quotes/%<quote>s/reestimate", { quote: CGI.escape(quote) }),
|
252
|
-
params: params,
|
253
|
-
opts: opts
|
254
|
-
)
|
255
|
-
end
|
256
|
-
|
257
153
|
# A quote models prices and services for a customer.
|
258
154
|
def self.update(id, params = {}, opts = {})
|
259
155
|
request_stripe_object(
|
@@ -15,26 +15,6 @@ module Stripe
|
|
15
15
|
"subscription_schedule"
|
16
16
|
end
|
17
17
|
|
18
|
-
# Amends an existing subscription schedule.
|
19
|
-
def amend(params = {}, opts = {})
|
20
|
-
request_stripe_object(
|
21
|
-
method: :post,
|
22
|
-
path: format("/v1/subscription_schedules/%<schedule>s/amend", { schedule: CGI.escape(self["id"]) }),
|
23
|
-
params: params,
|
24
|
-
opts: opts
|
25
|
-
)
|
26
|
-
end
|
27
|
-
|
28
|
-
# Amends an existing subscription schedule.
|
29
|
-
def self.amend(schedule, params = {}, opts = {})
|
30
|
-
request_stripe_object(
|
31
|
-
method: :post,
|
32
|
-
path: format("/v1/subscription_schedules/%<schedule>s/amend", { schedule: CGI.escape(schedule) }),
|
33
|
-
params: params,
|
34
|
-
opts: opts
|
35
|
-
)
|
36
|
-
end
|
37
|
-
|
38
18
|
# Cancels a subscription schedule and its associated subscription immediately (if the subscription schedule has an active subscription). A subscription schedule can only be canceled if its status is not_started or active.
|
39
19
|
def cancel(params = {}, opts = {})
|
40
20
|
request_stripe_object(
|
@@ -37,66 +37,6 @@ module Stripe
|
|
37
37
|
)
|
38
38
|
end
|
39
39
|
|
40
|
-
# Initiates an input collection flow on a Reader.
|
41
|
-
def collect_inputs(params = {}, opts = {})
|
42
|
-
request_stripe_object(
|
43
|
-
method: :post,
|
44
|
-
path: format("/v1/terminal/readers/%<reader>s/collect_inputs", { reader: CGI.escape(self["id"]) }),
|
45
|
-
params: params,
|
46
|
-
opts: opts
|
47
|
-
)
|
48
|
-
end
|
49
|
-
|
50
|
-
# Initiates an input collection flow on a Reader.
|
51
|
-
def self.collect_inputs(reader, params = {}, opts = {})
|
52
|
-
request_stripe_object(
|
53
|
-
method: :post,
|
54
|
-
path: format("/v1/terminal/readers/%<reader>s/collect_inputs", { reader: CGI.escape(reader) }),
|
55
|
-
params: params,
|
56
|
-
opts: opts
|
57
|
-
)
|
58
|
-
end
|
59
|
-
|
60
|
-
# Initiates a payment flow on a Reader and updates the PaymentIntent with card details before manual confirmation.
|
61
|
-
def collect_payment_method(params = {}, opts = {})
|
62
|
-
request_stripe_object(
|
63
|
-
method: :post,
|
64
|
-
path: format("/v1/terminal/readers/%<reader>s/collect_payment_method", { reader: CGI.escape(self["id"]) }),
|
65
|
-
params: params,
|
66
|
-
opts: opts
|
67
|
-
)
|
68
|
-
end
|
69
|
-
|
70
|
-
# Initiates a payment flow on a Reader and updates the PaymentIntent with card details before manual confirmation.
|
71
|
-
def self.collect_payment_method(reader, params = {}, opts = {})
|
72
|
-
request_stripe_object(
|
73
|
-
method: :post,
|
74
|
-
path: format("/v1/terminal/readers/%<reader>s/collect_payment_method", { reader: CGI.escape(reader) }),
|
75
|
-
params: params,
|
76
|
-
opts: opts
|
77
|
-
)
|
78
|
-
end
|
79
|
-
|
80
|
-
# Finalizes a payment on a Reader.
|
81
|
-
def confirm_payment_intent(params = {}, opts = {})
|
82
|
-
request_stripe_object(
|
83
|
-
method: :post,
|
84
|
-
path: format("/v1/terminal/readers/%<reader>s/confirm_payment_intent", { reader: CGI.escape(self["id"]) }),
|
85
|
-
params: params,
|
86
|
-
opts: opts
|
87
|
-
)
|
88
|
-
end
|
89
|
-
|
90
|
-
# Finalizes a payment on a Reader.
|
91
|
-
def self.confirm_payment_intent(reader, params = {}, opts = {})
|
92
|
-
request_stripe_object(
|
93
|
-
method: :post,
|
94
|
-
path: format("/v1/terminal/readers/%<reader>s/confirm_payment_intent", { reader: CGI.escape(reader) }),
|
95
|
-
params: params,
|
96
|
-
opts: opts
|
97
|
-
)
|
98
|
-
end
|
99
|
-
|
100
40
|
# Creates a new Reader object.
|
101
41
|
def self.create(params = {}, opts = {})
|
102
42
|
request_stripe_object(
|
@@ -19,7 +19,7 @@ module Stripe
|
|
19
19
|
#
|
20
20
|
# You can't store or use tokens more than once. To store card or bank account
|
21
21
|
# information for later use, create [Customer](https://stripe.com/docs/api#customers)
|
22
|
-
# objects or [
|
22
|
+
# objects or [External accounts](https://stripe.com/api#external_accounts).
|
23
23
|
# [Radar](https://stripe.com/docs/radar), our integrated solution for automatic fraud protection,
|
24
24
|
# performs best with integrations that use client-side tokenization.
|
25
25
|
class Token < APIResource
|
@@ -31,7 +31,7 @@ module Stripe
|
|
31
31
|
end
|
32
32
|
|
33
33
|
# Creates a single-use token that represents a bank account's details.
|
34
|
-
# You can use this token with any API method in place of a bank account dictionary. You can only use this token once. To do so, attach it to a [
|
34
|
+
# You can use this token with any API method in place of a bank account dictionary. You can only use this token once. To do so, attach it to a [connected account](https://stripe.com/docs/api#accounts) where [controller.requirement_collection](https://stripe.com/api/accounts/object#account_object-controller-requirement_collection) is application, which includes Custom accounts.
|
35
35
|
def self.create(params = {}, opts = {})
|
36
36
|
request_stripe_object(method: :post, path: "/v1/tokens", params: params, opts: opts)
|
37
37
|
end
|
@@ -2,13 +2,13 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
module Stripe
|
5
|
-
# You can configure [webhook endpoints](https://stripe.com/
|
5
|
+
# You can configure [webhook endpoints](https://docs.stripe.com/webhooks/) via the API to be
|
6
6
|
# notified about events that happen in your Stripe account or connected
|
7
7
|
# accounts.
|
8
8
|
#
|
9
9
|
# Most users configure webhooks from [the dashboard](https://dashboard.stripe.com/webhooks), which provides a user interface for registering and testing your webhook endpoints.
|
10
10
|
#
|
11
|
-
# Related guide: [Setting up webhooks](https://stripe.com/
|
11
|
+
# Related guide: [Setting up webhooks](https://docs.stripe.com/webhooks/configure)
|
12
12
|
class WebhookEndpoint < APIResource
|
13
13
|
extend Stripe::APIOperations::Create
|
14
14
|
include Stripe::APIOperations::Delete
|
data/lib/stripe/resources.rb
CHANGED
@@ -3,7 +3,6 @@
|
|
3
3
|
|
4
4
|
require "stripe/resources/account"
|
5
5
|
require "stripe/resources/account_link"
|
6
|
-
require "stripe/resources/account_notice"
|
7
6
|
require "stripe/resources/account_session"
|
8
7
|
require "stripe/resources/apple_pay_domain"
|
9
8
|
require "stripe/resources/application_fee"
|
@@ -19,9 +18,6 @@ require "stripe/resources/billing/meter_event_summary"
|
|
19
18
|
require "stripe/resources/billing_portal/configuration"
|
20
19
|
require "stripe/resources/billing_portal/session"
|
21
20
|
require "stripe/resources/capability"
|
22
|
-
require "stripe/resources/capital/financing_offer"
|
23
|
-
require "stripe/resources/capital/financing_summary"
|
24
|
-
require "stripe/resources/capital/financing_transaction"
|
25
21
|
require "stripe/resources/card"
|
26
22
|
require "stripe/resources/cash_balance"
|
27
23
|
require "stripe/resources/charge"
|
@@ -48,25 +44,20 @@ require "stripe/resources/exchange_rate"
|
|
48
44
|
require "stripe/resources/file"
|
49
45
|
require "stripe/resources/file_link"
|
50
46
|
require "stripe/resources/financial_connections/account"
|
51
|
-
require "stripe/resources/financial_connections/account_inferred_balance"
|
52
47
|
require "stripe/resources/financial_connections/account_owner"
|
53
48
|
require "stripe/resources/financial_connections/account_ownership"
|
54
49
|
require "stripe/resources/financial_connections/session"
|
55
50
|
require "stripe/resources/financial_connections/transaction"
|
56
51
|
require "stripe/resources/forwarding/request"
|
57
52
|
require "stripe/resources/funding_instructions"
|
58
|
-
require "stripe/resources/gift_cards/card"
|
59
|
-
require "stripe/resources/gift_cards/transaction"
|
60
53
|
require "stripe/resources/identity/verification_report"
|
61
54
|
require "stripe/resources/identity/verification_session"
|
62
55
|
require "stripe/resources/invoice"
|
63
56
|
require "stripe/resources/invoice_item"
|
64
57
|
require "stripe/resources/invoice_line_item"
|
65
|
-
require "stripe/resources/invoice_payment"
|
66
58
|
require "stripe/resources/issuing/authorization"
|
67
59
|
require "stripe/resources/issuing/card"
|
68
60
|
require "stripe/resources/issuing/cardholder"
|
69
|
-
require "stripe/resources/issuing/credit_underwriting_record"
|
70
61
|
require "stripe/resources/issuing/dispute"
|
71
62
|
require "stripe/resources/issuing/personalization_design"
|
72
63
|
require "stripe/resources/issuing/physical_bundle"
|
@@ -75,8 +66,6 @@ require "stripe/resources/issuing/transaction"
|
|
75
66
|
require "stripe/resources/line_item"
|
76
67
|
require "stripe/resources/login_link"
|
77
68
|
require "stripe/resources/mandate"
|
78
|
-
require "stripe/resources/margin"
|
79
|
-
require "stripe/resources/order"
|
80
69
|
require "stripe/resources/payment_intent"
|
81
70
|
require "stripe/resources/payment_link"
|
82
71
|
require "stripe/resources/payment_method"
|
@@ -90,9 +79,6 @@ require "stripe/resources/product"
|
|
90
79
|
require "stripe/resources/product_feature"
|
91
80
|
require "stripe/resources/promotion_code"
|
92
81
|
require "stripe/resources/quote"
|
93
|
-
require "stripe/resources/quote_phase"
|
94
|
-
require "stripe/resources/quote_preview_invoice"
|
95
|
-
require "stripe/resources/quote_preview_subscription_schedule"
|
96
82
|
require "stripe/resources/radar/early_fraud_warning"
|
97
83
|
require "stripe/resources/radar/value_list"
|
98
84
|
require "stripe/resources/radar/value_list_item"
|
@@ -112,7 +98,6 @@ require "stripe/resources/subscription_item"
|
|
112
98
|
require "stripe/resources/subscription_schedule"
|
113
99
|
require "stripe/resources/tax/calculation"
|
114
100
|
require "stripe/resources/tax/calculation_line_item"
|
115
|
-
require "stripe/resources/tax/form"
|
116
101
|
require "stripe/resources/tax/registration"
|
117
102
|
require "stripe/resources/tax/settings"
|
118
103
|
require "stripe/resources/tax/transaction"
|
data/lib/stripe/stripe_client.rb
CHANGED
@@ -206,10 +206,9 @@ module Stripe
|
|
206
206
|
end
|
207
207
|
|
208
208
|
def execute_request(method, path,
|
209
|
-
api_base: nil, api_key: nil,
|
210
|
-
headers: {}, params: {}, api_mode: nil, usage: [])
|
209
|
+
api_base: nil, api_key: nil, headers: {}, params: {}, usage: [])
|
211
210
|
http_resp, api_key = execute_request_internal(
|
212
|
-
method, path, api_base, api_key, headers, params,
|
211
|
+
method, path, api_base, api_key, headers, params, usage
|
213
212
|
)
|
214
213
|
|
215
214
|
begin
|
@@ -240,7 +239,6 @@ module Stripe
|
|
240
239
|
def execute_request_stream(method, path,
|
241
240
|
api_base: nil, api_key: nil, usage: [],
|
242
241
|
headers: {}, params: {},
|
243
|
-
api_mode: nil,
|
244
242
|
&read_body_chunk_block)
|
245
243
|
unless block_given?
|
246
244
|
raise ArgumentError,
|
@@ -248,8 +246,7 @@ module Stripe
|
|
248
246
|
end
|
249
247
|
|
250
248
|
http_resp, api_key = execute_request_internal(
|
251
|
-
method, path, api_base, api_key,
|
252
|
-
headers, params, api_mode, usage, &read_body_chunk_block
|
249
|
+
method, path, api_base, api_key, headers, params, usage, &read_body_chunk_block
|
253
250
|
)
|
254
251
|
|
255
252
|
# When the read_body_chunk_block is given, we no longer have access to the
|
@@ -428,8 +425,8 @@ module Stripe
|
|
428
425
|
end
|
429
426
|
|
430
427
|
private def execute_request_internal(method, path,
|
431
|
-
api_base, api_key, headers, params,
|
432
|
-
|
428
|
+
api_base, api_key, headers, params, usage,
|
429
|
+
&read_body_chunk_block)
|
433
430
|
raise ArgumentError, "method should be a symbol" \
|
434
431
|
unless method.is_a?(Symbol)
|
435
432
|
raise ArgumentError, "path should be a string" \
|
@@ -437,10 +434,9 @@ module Stripe
|
|
437
434
|
|
438
435
|
api_base ||= config.api_base
|
439
436
|
api_key ||= config.api_key
|
440
|
-
authenticator ||= config.authenticator
|
441
437
|
params = Util.objects_to_ids(params)
|
442
438
|
|
443
|
-
|
439
|
+
check_api_key!(api_key)
|
444
440
|
|
445
441
|
body_params = nil
|
446
442
|
query_params = nil
|
@@ -453,9 +449,8 @@ module Stripe
|
|
453
449
|
|
454
450
|
query_params, path = merge_query_params(query_params, path)
|
455
451
|
|
456
|
-
headers = request_headers(api_key, method
|
452
|
+
headers = request_headers(api_key, method)
|
457
453
|
.update(Util.normalize_headers(headers))
|
458
|
-
|
459
454
|
url = api_url(path, api_base)
|
460
455
|
|
461
456
|
# Merge given query parameters with any already encoded in the path.
|
@@ -466,16 +461,13 @@ module Stripe
|
|
466
461
|
# a log-friendly variant of the encoded form. File objects are displayed
|
467
462
|
# as such instead of as their file contents.
|
468
463
|
body, body_log =
|
469
|
-
body_params ? encode_body(body_params, headers
|
470
|
-
|
471
|
-
authenticator.authenticate(method, headers, body) unless api_key
|
464
|
+
body_params ? encode_body(body_params, headers) : [nil, nil]
|
472
465
|
|
473
466
|
# stores information on the request we're about to make so that we don't
|
474
467
|
# have to pass as many parameters around for logging.
|
475
468
|
context = RequestLogContext.new
|
476
469
|
context.account = headers["Stripe-Account"]
|
477
470
|
context.api_key = api_key
|
478
|
-
context.authenticator = authenticator
|
479
471
|
context.api_version = headers["Stripe-Version"]
|
480
472
|
context.body = body_log
|
481
473
|
context.idempotency_key = headers["Idempotency-Key"]
|
@@ -512,16 +504,8 @@ module Stripe
|
|
512
504
|
(api_base || config.api_base) + url
|
513
505
|
end
|
514
506
|
|
515
|
-
private def
|
516
|
-
|
517
|
-
raise AuthenticationError, "Can't specify both API key " \
|
518
|
-
"and authenticator. Either set your API key" \
|
519
|
-
'using "Stripe.api_key = <API-KEY>", or set your authenticator ' \
|
520
|
-
'using "Stripe.authenticator = <AUTHENTICATOR>"' \
|
521
|
-
end
|
522
|
-
|
523
|
-
unless api_key || authenticator
|
524
|
-
# Default to missing API key error message for general users.
|
507
|
+
private def check_api_key!(api_key)
|
508
|
+
unless api_key
|
525
509
|
raise AuthenticationError, "No API key provided. " \
|
526
510
|
'Set your API key using "Stripe.api_key = <API-KEY>". ' \
|
527
511
|
"You can generate API keys from the Stripe web interface. " \
|
@@ -540,7 +524,7 @@ module Stripe
|
|
540
524
|
# Encodes a set of body parameters using multipart if `Content-Type` is set
|
541
525
|
# for that, or standard form-encoding otherwise. Returns the encoded body
|
542
526
|
# and a version of the encoded body that's safe to be logged.
|
543
|
-
private def encode_body(body_params, headers
|
527
|
+
private def encode_body(body_params, headers)
|
544
528
|
body = nil
|
545
529
|
flattened_params = Util.flatten_params(body_params)
|
546
530
|
|
@@ -556,22 +540,15 @@ module Stripe
|
|
556
540
|
flattened_params =
|
557
541
|
flattened_params.map { |k, v| [k, v.is_a?(String) ? v : v.to_s] }.to_h
|
558
542
|
|
559
|
-
elsif api_mode == :preview
|
560
|
-
body = JSON.generate(body_params)
|
561
|
-
headers["Content-Type"] = "application/json"
|
562
543
|
else
|
563
544
|
body = Util.encode_parameters(body_params)
|
564
545
|
end
|
565
546
|
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
# forms of certain characters introduce a lot of visual noise and it's
|
572
|
-
# nice to have a clearer format for logs.
|
573
|
-
flattened_params.map { |k, v| "#{k}=#{v}" }.join("&")
|
574
|
-
end
|
547
|
+
# We don't use `Util.encode_parameters` partly as an optimization (to not
|
548
|
+
# redo work we've already done), and partly because the encoded forms of
|
549
|
+
# certain characters introduce a lot of visual noise and it's nice to
|
550
|
+
# have a clearer format for logs.
|
551
|
+
body_log = flattened_params.map { |k, v| "#{k}=#{v}" }.join("&")
|
575
552
|
|
576
553
|
[body, body_log]
|
577
554
|
end
|
@@ -757,11 +734,10 @@ module Stripe
|
|
757
734
|
end
|
758
735
|
|
759
736
|
private def specific_api_error(resp, error_data, context)
|
760
|
-
message = error_data[:message]
|
761
737
|
Util.log_error("Stripe API error",
|
762
738
|
status: resp.http_status,
|
763
739
|
error_code: error_data[:code],
|
764
|
-
error_message: message,
|
740
|
+
error_message: error_data[:message],
|
765
741
|
error_param: error_data[:param],
|
766
742
|
error_type: error_data[:type],
|
767
743
|
idempotency_key: context.idempotency_key,
|
@@ -782,26 +758,26 @@ module Stripe
|
|
782
758
|
when 400, 404
|
783
759
|
case error_data[:type]
|
784
760
|
when "idempotency_error"
|
785
|
-
IdempotencyError.new(message, **opts)
|
761
|
+
IdempotencyError.new(error_data[:message], **opts)
|
786
762
|
else
|
787
763
|
InvalidRequestError.new(
|
788
|
-
message, error_data[:param],
|
764
|
+
error_data[:message], error_data[:param],
|
789
765
|
**opts
|
790
766
|
)
|
791
767
|
end
|
792
768
|
when 401
|
793
|
-
AuthenticationError.new(message, **opts)
|
769
|
+
AuthenticationError.new(error_data[:message], **opts)
|
794
770
|
when 402
|
795
771
|
CardError.new(
|
796
|
-
message, error_data[:param],
|
772
|
+
error_data[:message], error_data[:param],
|
797
773
|
**opts
|
798
774
|
)
|
799
775
|
when 403
|
800
|
-
PermissionError.new(message, **opts)
|
776
|
+
PermissionError.new(error_data[:message], **opts)
|
801
777
|
when 429
|
802
|
-
RateLimitError.new(message, **opts)
|
778
|
+
RateLimitError.new(error_data[:message], **opts)
|
803
779
|
else
|
804
|
-
APIError.new(message, **opts)
|
780
|
+
APIError.new(error_data[:message], **opts)
|
805
781
|
end
|
806
782
|
end
|
807
783
|
|
@@ -869,20 +845,16 @@ module Stripe
|
|
869
845
|
message + "\n\n(Network error: #{error.message})"
|
870
846
|
end
|
871
847
|
|
872
|
-
private def request_headers(api_key, method
|
848
|
+
private def request_headers(api_key, method)
|
873
849
|
user_agent = "Stripe/v1 RubyBindings/#{Stripe::VERSION}"
|
874
850
|
user_agent += " " + format_app_info(Stripe.app_info) unless Stripe.app_info.nil?
|
875
851
|
|
876
852
|
headers = {
|
877
853
|
"User-Agent" => user_agent,
|
878
854
|
"Authorization" => "Bearer #{api_key}",
|
855
|
+
"Content-Type" => "application/x-www-form-urlencoded",
|
879
856
|
}
|
880
857
|
|
881
|
-
if api_mode != :preview
|
882
|
-
# TODO: (major) don't set Content-Type if method is not post
|
883
|
-
headers["Content-Type"] = "application/x-www-form-urlencoded"
|
884
|
-
end
|
885
|
-
|
886
858
|
if config.enable_telemetry? && !@last_request_metrics.nil?
|
887
859
|
headers["X-Stripe-Client-Telemetry"] = JSON.generate(
|
888
860
|
last_request_metrics: @last_request_metrics.payload
|
@@ -895,12 +867,7 @@ module Stripe
|
|
895
867
|
headers["Idempotency-Key"] ||= SecureRandom.uuid
|
896
868
|
end
|
897
869
|
|
898
|
-
|
899
|
-
headers["Stripe-Version"] = ApiVersion::PREVIEW
|
900
|
-
elsif config.api_version
|
901
|
-
headers["Stripe-Version"] = config.api_version
|
902
|
-
end
|
903
|
-
|
870
|
+
headers["Stripe-Version"] = config.api_version if config.api_version
|
904
871
|
headers["Stripe-Account"] = config.stripe_account if config.stripe_account
|
905
872
|
|
906
873
|
user_agent = @system_profiler.user_agent
|
@@ -983,8 +950,7 @@ module Stripe
|
|
983
950
|
# that we can log certain information. It's useful because it means that we
|
984
951
|
# don't have to pass around as many parameters.
|
985
952
|
class RequestLogContext
|
986
|
-
attr_accessor :body, :account, :api_key, :
|
987
|
-
:request_id
|
953
|
+
attr_accessor :body, :account, :api_key, :api_version, :idempotency_key, :method, :path, :query, :request_id
|
988
954
|
|
989
955
|
# The idea with this method is that we might want to update some of
|
990
956
|
# context information because a response that we've received from the API
|
@@ -25,7 +25,7 @@ module Stripe
|
|
25
25
|
# If `.logger` is set, the value of `.log_level` is ignored. The decision on
|
26
26
|
# what levels to print is entirely deferred to the logger.
|
27
27
|
class StripeConfiguration
|
28
|
-
attr_accessor :api_key, :api_version, :
|
28
|
+
attr_accessor :api_key, :api_version, :client_id, :enable_telemetry, :logger, :stripe_account
|
29
29
|
|
30
30
|
attr_reader :api_base, :uploads_base, :connect_base, :ca_bundle_path, :log_level, :initial_network_retry_delay,
|
31
31
|
# rubocop:todo Layout/LineLength
|
@@ -50,7 +50,6 @@ module Stripe
|
|
50
50
|
|
51
51
|
def initialize
|
52
52
|
@api_version = ApiVersion::CURRENT
|
53
|
-
|
54
53
|
@ca_bundle_path = Stripe::DEFAULT_CA_BUNDLE_PATH
|
55
54
|
@enable_telemetry = true
|
56
55
|
@verify_ssl_certs = true
|
data/lib/stripe/util.rb
CHANGED
@@ -7,7 +7,6 @@ module Stripe
|
|
7
7
|
# Options that a user is allowed to specify.
|
8
8
|
OPTS_USER_SPECIFIED = Set[
|
9
9
|
:api_key,
|
10
|
-
:authenticator,
|
11
10
|
:idempotency_key,
|
12
11
|
:stripe_account,
|
13
12
|
:stripe_version
|
@@ -280,13 +279,7 @@ module Stripe
|
|
280
279
|
when String
|
281
280
|
{ api_key: opts }
|
282
281
|
when Hash
|
283
|
-
|
284
|
-
# no need to check the api_key per request.
|
285
|
-
if !(opts.key?(:client) &&
|
286
|
-
opts.fetch(:client).config.authenticator) &&
|
287
|
-
opts.key?(:api_key)
|
288
|
-
check_api_key!(opts.fetch(:api_key))
|
289
|
-
end
|
282
|
+
check_api_key!(opts.fetch(:api_key)) if opts.key?(:api_key)
|
290
283
|
# Explicitly use dup here instead of clone to avoid preserving freeze
|
291
284
|
# state on input params.
|
292
285
|
opts.dup
|
data/lib/stripe/version.rb
CHANGED