paypal-rest-api 0.3.1 → 0.5.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/README.md +97 -16
- data/VERSION +1 -1
- data/lib/paypal-api/api_collections/authentication.rb +1 -1
- data/lib/paypal-api/api_collections/authorized_payments.rb +1 -1
- data/lib/paypal-api/api_collections/captured_payments.rb +1 -1
- data/lib/paypal-api/api_collections/catalog_products.rb +1 -1
- data/lib/paypal-api/api_collections/disputes.rb +1 -1
- data/lib/paypal-api/api_collections/invoice_templates.rb +1 -1
- data/lib/paypal-api/api_collections/invoices.rb +1 -1
- data/lib/paypal-api/api_collections/orders.rb +1 -1
- data/lib/paypal-api/api_collections/partner_referrals.rb +48 -0
- data/lib/paypal-api/api_collections/payment_experience_web_profiles.rb +94 -0
- data/lib/paypal-api/api_collections/payment_tokens.rb +70 -0
- data/lib/paypal-api/api_collections/payout_items.rb +1 -1
- data/lib/paypal-api/api_collections/payouts.rb +1 -1
- data/lib/paypal-api/api_collections/referenced_payout_items.rb +2 -2
- data/lib/paypal-api/api_collections/referenced_payouts.rb +1 -1
- data/lib/paypal-api/api_collections/refunds.rb +1 -1
- data/lib/paypal-api/api_collections/setup_tokens.rb +47 -0
- data/lib/paypal-api/api_collections/shipment_tracking.rb +1 -1
- data/lib/paypal-api/api_collections/subscription_plans.rb +1 -1
- data/lib/paypal-api/api_collections/subscriptions.rb +1 -1
- data/lib/paypal-api/api_collections/transaction_search.rb +46 -0
- data/lib/paypal-api/api_collections/user_info.rb +1 -1
- data/lib/paypal-api/api_collections/users.rb +2 -2
- data/lib/paypal-api/api_collections/webhook_events.rb +1 -1
- data/lib/paypal-api/api_collections/webhook_lookups.rb +1 -1
- data/lib/paypal-api/api_collections/webhooks.rb +1 -1
- data/lib/paypal-api/client/access_token_methods.rb +36 -0
- data/lib/paypal-api/client/api_methods.rb +140 -0
- data/lib/paypal-api/client/environment_methods.rb +34 -0
- data/lib/paypal-api/client/http_methods.rb +70 -0
- data/lib/paypal-api/client.rb +5 -215
- data/lib/paypal-api/error.rb +3 -1
- data/lib/paypal-api/request.rb +47 -22
- data/lib/paypal-api/request_executor.rb +32 -15
- data/lib/paypal-api/response.rb +68 -0
- data/lib/paypal-api.rb +27 -3
- metadata +12 -3
@@ -4,11 +4,11 @@ module PaypalAPI
|
|
4
4
|
#
|
5
5
|
# Managing users APIs
|
6
6
|
#
|
7
|
-
# https://developer.paypal.com/docs/api/identity/v2/
|
7
|
+
# @see https://developer.paypal.com/docs/api/identity/v2/
|
8
8
|
#
|
9
9
|
class Users < APICollection
|
10
10
|
#
|
11
|
-
# Common class and instance
|
11
|
+
# Common methods for PaypalAPI::Users class and client.users instance
|
12
12
|
#
|
13
13
|
module APIs
|
14
14
|
# @!macro [new] request
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PaypalAPI
|
4
|
+
class Client
|
5
|
+
#
|
6
|
+
# Client methods to get access token
|
7
|
+
#
|
8
|
+
module AccessTokenMethods
|
9
|
+
#
|
10
|
+
# Checks cached access token is expired and returns it or generates new one
|
11
|
+
#
|
12
|
+
# @return [AccessToken] AccessToken object
|
13
|
+
#
|
14
|
+
def access_token
|
15
|
+
(@access_token.nil? || @access_token.expired?) ? refresh_access_token : @access_token
|
16
|
+
end
|
17
|
+
|
18
|
+
#
|
19
|
+
# Generates and caches new AccessToken
|
20
|
+
#
|
21
|
+
# @return [AccessToken] new AccessToken object
|
22
|
+
#
|
23
|
+
def refresh_access_token
|
24
|
+
requested_at = Time.now
|
25
|
+
response = authentication.generate_access_token
|
26
|
+
|
27
|
+
@access_token = AccessToken.new(
|
28
|
+
requested_at: requested_at,
|
29
|
+
expires_in: response.fetch(:expires_in),
|
30
|
+
access_token: response.fetch(:access_token),
|
31
|
+
token_type: response.fetch(:token_type)
|
32
|
+
)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,140 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PaypalAPI
|
4
|
+
class Client
|
5
|
+
#
|
6
|
+
# Methods to access API collections
|
7
|
+
#
|
8
|
+
module APIMethods
|
9
|
+
# @return [AuthorizedPayments] AuthorizedPayments APIs collection
|
10
|
+
def authorized_payments
|
11
|
+
AuthorizedPayments.new(self)
|
12
|
+
end
|
13
|
+
|
14
|
+
# @return [CapturedPayments] CapturedPayments APIs collection
|
15
|
+
def captured_payments
|
16
|
+
CapturedPayments.new(self)
|
17
|
+
end
|
18
|
+
|
19
|
+
# @return [Authentication] Authentication APIs collection
|
20
|
+
def authentication
|
21
|
+
Authentication.new(self)
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [CatalogProducts] Catalog Products APIs collection
|
25
|
+
def catalog_products
|
26
|
+
CatalogProducts.new(self)
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [Disputes] Disputes APIs collection
|
30
|
+
def disputes
|
31
|
+
Disputes.new(self)
|
32
|
+
end
|
33
|
+
|
34
|
+
# @return [InvoiceTemplates] InvoiceTemplates APIs collection
|
35
|
+
def invoice_templates
|
36
|
+
InvoiceTemplates.new(self)
|
37
|
+
end
|
38
|
+
|
39
|
+
# @return [Invoices] Invoices APIs collection
|
40
|
+
def invoices
|
41
|
+
Invoices.new(self)
|
42
|
+
end
|
43
|
+
|
44
|
+
# @return [Orders] Orders APIs collection
|
45
|
+
def orders
|
46
|
+
Orders.new(self)
|
47
|
+
end
|
48
|
+
|
49
|
+
# @return [PartnerReferrals] PartnerReferrals APIs collection
|
50
|
+
def partner_referrals
|
51
|
+
PartnerReferrals.new(self)
|
52
|
+
end
|
53
|
+
|
54
|
+
# @return [PaymentExperienceWebProfiles] PaymentExperienceWebProfiles APIs collection
|
55
|
+
def payment_experience_web_profiles
|
56
|
+
PaymentExperienceWebProfiles.new(self)
|
57
|
+
end
|
58
|
+
|
59
|
+
# @return [PaymentTokens] PaymentTokens APIs collection
|
60
|
+
def payment_tokens
|
61
|
+
PaymentTokens.new(self)
|
62
|
+
end
|
63
|
+
|
64
|
+
# @return [PayoutItems] PayoutItems APIs collection
|
65
|
+
def payout_items
|
66
|
+
PayoutItems.new(self)
|
67
|
+
end
|
68
|
+
|
69
|
+
# @return [Payouts] Payouts APIs collection
|
70
|
+
def payouts
|
71
|
+
Payouts.new(self)
|
72
|
+
end
|
73
|
+
|
74
|
+
# @return [Refunds] Refunds APIs collection
|
75
|
+
def refunds
|
76
|
+
Refunds.new(self)
|
77
|
+
end
|
78
|
+
|
79
|
+
# @return [ReferencedPayoutItems] ReferencedPayoutItems APIs collection
|
80
|
+
def referenced_payout_items
|
81
|
+
ReferencedPayoutItems.new(self)
|
82
|
+
end
|
83
|
+
|
84
|
+
# @return [ReferencedPayouts] ReferencedPayouts APIs collection
|
85
|
+
def referenced_payouts
|
86
|
+
ReferencedPayouts.new(self)
|
87
|
+
end
|
88
|
+
|
89
|
+
# @return [SetupTokens] SetupTokens APIs collection
|
90
|
+
def setup_tokens
|
91
|
+
SetupTokens.new(self)
|
92
|
+
end
|
93
|
+
|
94
|
+
# @return [ShipmentTracking] Shipment Tracking APIs collection
|
95
|
+
def shipment_tracking
|
96
|
+
ShipmentTracking.new(self)
|
97
|
+
end
|
98
|
+
|
99
|
+
# @return [Subscriptions] Subscriptions APIs collection
|
100
|
+
def subscriptions
|
101
|
+
Subscriptions.new(self)
|
102
|
+
end
|
103
|
+
|
104
|
+
# @return [SubscriptionPlans] Subscription Plans APIs collection
|
105
|
+
def subscription_plans
|
106
|
+
SubscriptionPlans.new(self)
|
107
|
+
end
|
108
|
+
|
109
|
+
# @return [TransactionSearch] TransactionSearch APIs collection
|
110
|
+
def transaction_search
|
111
|
+
TransactionSearch.new(self)
|
112
|
+
end
|
113
|
+
|
114
|
+
# @return [UserInfo] User Info APIs collection
|
115
|
+
def user_info
|
116
|
+
UserInfo.new(self)
|
117
|
+
end
|
118
|
+
|
119
|
+
# @return [Users] Users Management APIs collection
|
120
|
+
def users
|
121
|
+
Users.new(self)
|
122
|
+
end
|
123
|
+
|
124
|
+
# @return [Webhooks] Webhooks APIs collection
|
125
|
+
def webhooks
|
126
|
+
Webhooks.new(self)
|
127
|
+
end
|
128
|
+
|
129
|
+
# @return [WebhookEvents] Webhook Events APIs collection
|
130
|
+
def webhook_lookups
|
131
|
+
WebhookLookups.new(self)
|
132
|
+
end
|
133
|
+
|
134
|
+
# @return [WebhookEvents] Webhook Lookups APIs collection
|
135
|
+
def webhook_events
|
136
|
+
WebhookEvents.new(self)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PaypalAPI
|
4
|
+
class Client
|
5
|
+
#
|
6
|
+
# Client environment specific methods
|
7
|
+
#
|
8
|
+
module EnvironmentMethods
|
9
|
+
# Checks if PayPal LIVE environment enabled
|
10
|
+
# @return [Boolean] Checks if PayPal LIVE environment enabled
|
11
|
+
def live?
|
12
|
+
env.live?
|
13
|
+
end
|
14
|
+
|
15
|
+
# Checks if PayPal SANDBOX environment enabled
|
16
|
+
# @return [Boolean] Checks if PayPal SANDBOX environment enabled
|
17
|
+
def sandbox?
|
18
|
+
env.sandbox?
|
19
|
+
end
|
20
|
+
|
21
|
+
# Base API URL
|
22
|
+
# @return [String] Base API URL
|
23
|
+
def api_url
|
24
|
+
env.api_url
|
25
|
+
end
|
26
|
+
|
27
|
+
# Base WEB URL
|
28
|
+
# @return [String] Base WEB URL
|
29
|
+
def web_url
|
30
|
+
env.web_url
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PaypalAPI
|
4
|
+
class Client
|
5
|
+
#
|
6
|
+
# Client HTTP methods
|
7
|
+
#
|
8
|
+
module HTTPMethods
|
9
|
+
# @!macro [new] request
|
10
|
+
# @param path [String] Request path
|
11
|
+
# @param query [Hash, nil] Request query parameters
|
12
|
+
# @param body [Hash, nil] Request body parameters
|
13
|
+
# @param headers [Hash, nil] Request headers
|
14
|
+
#
|
15
|
+
# @return [Response] Response object
|
16
|
+
|
17
|
+
#
|
18
|
+
# Executes POST http request
|
19
|
+
#
|
20
|
+
# @macro request
|
21
|
+
#
|
22
|
+
def post(path, query: nil, body: nil, headers: nil)
|
23
|
+
execute_request(Net::HTTP::Post, path, query: query, body: body, headers: headers)
|
24
|
+
end
|
25
|
+
|
26
|
+
#
|
27
|
+
# Executes GET http request
|
28
|
+
#
|
29
|
+
# @macro request
|
30
|
+
#
|
31
|
+
def get(path, query: nil, body: nil, headers: nil)
|
32
|
+
execute_request(Net::HTTP::Get, path, query: query, body: body, headers: headers)
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
# Executes PATCH http request
|
37
|
+
#
|
38
|
+
# @macro request
|
39
|
+
#
|
40
|
+
def patch(path, query: nil, body: nil, headers: nil)
|
41
|
+
execute_request(Net::HTTP::Patch, path, query: query, body: body, headers: headers)
|
42
|
+
end
|
43
|
+
|
44
|
+
#
|
45
|
+
# Executes PUT http request
|
46
|
+
#
|
47
|
+
# @macro request
|
48
|
+
#
|
49
|
+
def put(path, query: nil, body: nil, headers: nil)
|
50
|
+
execute_request(Net::HTTP::Put, path, query: query, body: body, headers: headers)
|
51
|
+
end
|
52
|
+
|
53
|
+
#
|
54
|
+
# Executes DELETE http request
|
55
|
+
#
|
56
|
+
# @macro request
|
57
|
+
#
|
58
|
+
def delete(path, query: nil, body: nil, headers: nil)
|
59
|
+
execute_request(Net::HTTP::Delete, path, query: query, body: body, headers: headers)
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def execute_request(http_method, path, query: nil, body: nil, headers: nil)
|
65
|
+
request = Request.new(self, http_method, path, query: query, body: body, headers: headers)
|
66
|
+
RequestExecutor.new(self, request).call
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/paypal-api/client.rb
CHANGED
@@ -5,6 +5,11 @@ module PaypalAPI
|
|
5
5
|
# PaypalAPI Client
|
6
6
|
#
|
7
7
|
class Client
|
8
|
+
include AccessTokenMethods
|
9
|
+
include APIMethods
|
10
|
+
include EnvironmentMethods
|
11
|
+
include HTTPMethods
|
12
|
+
|
8
13
|
# Paypal environment
|
9
14
|
attr_reader :env
|
10
15
|
|
@@ -43,30 +48,6 @@ module PaypalAPI
|
|
43
48
|
@access_token = nil
|
44
49
|
end
|
45
50
|
|
46
|
-
# Checks if PayPal LIVE environment enabled
|
47
|
-
# @return [Boolean] Checks if PayPal LIVE environment enabled
|
48
|
-
def live?
|
49
|
-
env.live?
|
50
|
-
end
|
51
|
-
|
52
|
-
# Checks if PayPal SANDBOX environment enabled
|
53
|
-
# @return [Boolean] Checks if PayPal SANDBOX environment enabled
|
54
|
-
def sandbox?
|
55
|
-
env.sandbox?
|
56
|
-
end
|
57
|
-
|
58
|
-
# Base API URL
|
59
|
-
# @return [String] Base API URL
|
60
|
-
def api_url
|
61
|
-
env.api_url
|
62
|
-
end
|
63
|
-
|
64
|
-
# Base WEB URL
|
65
|
-
# @return [String] Base WEB URL
|
66
|
-
def web_url
|
67
|
-
env.web_url
|
68
|
-
end
|
69
|
-
|
70
51
|
# Registers callback
|
71
52
|
#
|
72
53
|
# @param callback_name [Symbol] Callback name.
|
@@ -90,32 +71,6 @@ module PaypalAPI
|
|
90
71
|
callbacks.fetch(callback_name) << block
|
91
72
|
end
|
92
73
|
|
93
|
-
#
|
94
|
-
# Checks cached access token is expired and returns it or generates new one
|
95
|
-
#
|
96
|
-
# @return [AccessToken] AccessToken object
|
97
|
-
#
|
98
|
-
def access_token
|
99
|
-
(@access_token.nil? || @access_token.expired?) ? refresh_access_token : @access_token
|
100
|
-
end
|
101
|
-
|
102
|
-
#
|
103
|
-
# Generates and caches new AccessToken
|
104
|
-
#
|
105
|
-
# @return [AccessToken] new AccessToken object
|
106
|
-
#
|
107
|
-
def refresh_access_token
|
108
|
-
requested_at = Time.now
|
109
|
-
response = authentication.generate_access_token
|
110
|
-
|
111
|
-
@access_token = AccessToken.new(
|
112
|
-
requested_at: requested_at,
|
113
|
-
expires_in: response.fetch(:expires_in),
|
114
|
-
access_token: response.fetch(:access_token),
|
115
|
-
token_type: response.fetch(:token_type)
|
116
|
-
)
|
117
|
-
end
|
118
|
-
|
119
74
|
#
|
120
75
|
# Verifies Webhook
|
121
76
|
#
|
@@ -147,170 +102,5 @@ module PaypalAPI
|
|
147
102
|
def verify_webhook(webhook_id:, headers:, raw_body:)
|
148
103
|
WebhookVerifier.new(self).call(webhook_id: webhook_id, headers: headers, raw_body: raw_body)
|
149
104
|
end
|
150
|
-
|
151
|
-
# @!macro [new] request
|
152
|
-
# @param path [String] Request path
|
153
|
-
# @param query [Hash, nil] Request query parameters
|
154
|
-
# @param body [Hash, nil] Request body parameters
|
155
|
-
# @param headers [Hash, nil] Request headers
|
156
|
-
#
|
157
|
-
# @return [Response] Response object
|
158
|
-
|
159
|
-
#
|
160
|
-
# Executes POST http request
|
161
|
-
#
|
162
|
-
# @macro request
|
163
|
-
#
|
164
|
-
def post(path, query: nil, body: nil, headers: nil)
|
165
|
-
execute_request(Net::HTTP::Post, path, query: query, body: body, headers: headers)
|
166
|
-
end
|
167
|
-
|
168
|
-
#
|
169
|
-
# Executes GET http request
|
170
|
-
#
|
171
|
-
# @macro request
|
172
|
-
#
|
173
|
-
def get(path, query: nil, body: nil, headers: nil)
|
174
|
-
execute_request(Net::HTTP::Get, path, query: query, body: body, headers: headers)
|
175
|
-
end
|
176
|
-
|
177
|
-
#
|
178
|
-
# Executes PATCH http request
|
179
|
-
#
|
180
|
-
# @macro request
|
181
|
-
#
|
182
|
-
def patch(path, query: nil, body: nil, headers: nil)
|
183
|
-
execute_request(Net::HTTP::Patch, path, query: query, body: body, headers: headers)
|
184
|
-
end
|
185
|
-
|
186
|
-
#
|
187
|
-
# Executes PUT http request
|
188
|
-
#
|
189
|
-
# @macro request
|
190
|
-
#
|
191
|
-
def put(path, query: nil, body: nil, headers: nil)
|
192
|
-
execute_request(Net::HTTP::Put, path, query: query, body: body, headers: headers)
|
193
|
-
end
|
194
|
-
|
195
|
-
#
|
196
|
-
# Executes DELETE http request
|
197
|
-
#
|
198
|
-
# @macro request
|
199
|
-
#
|
200
|
-
def delete(path, query: nil, body: nil, headers: nil)
|
201
|
-
execute_request(Net::HTTP::Delete, path, query: query, body: body, headers: headers)
|
202
|
-
end
|
203
|
-
|
204
|
-
# @return [AuthorizedPayments] AuthorizedPayments APIs collection
|
205
|
-
def authorized_payments
|
206
|
-
AuthorizedPayments.new(self)
|
207
|
-
end
|
208
|
-
|
209
|
-
# @return [CapturedPayments] CapturedPayments APIs collection
|
210
|
-
def captured_payments
|
211
|
-
CapturedPayments.new(self)
|
212
|
-
end
|
213
|
-
|
214
|
-
# @return [Authentication] Authentication APIs collection
|
215
|
-
def authentication
|
216
|
-
Authentication.new(self)
|
217
|
-
end
|
218
|
-
|
219
|
-
# @return [CatalogProducts] Catalog Products APIs collection
|
220
|
-
def catalog_products
|
221
|
-
CatalogProducts.new(self)
|
222
|
-
end
|
223
|
-
|
224
|
-
# @return [Disputes] Disputes APIs collection
|
225
|
-
def disputes
|
226
|
-
Disputes.new(self)
|
227
|
-
end
|
228
|
-
|
229
|
-
# @return [InvoiceTemplates] InvoiceTemplates APIs collection
|
230
|
-
def invoice_templates
|
231
|
-
InvoiceTemplates.new(self)
|
232
|
-
end
|
233
|
-
|
234
|
-
# @return [Invoices] Invoices APIs collection
|
235
|
-
def invoices
|
236
|
-
Invoices.new(self)
|
237
|
-
end
|
238
|
-
|
239
|
-
# @return [Orders] Orders APIs collection
|
240
|
-
def orders
|
241
|
-
Orders.new(self)
|
242
|
-
end
|
243
|
-
|
244
|
-
# @return [PayoutItems] PayoutItems APIs collection
|
245
|
-
def payout_items
|
246
|
-
PayoutItems.new(self)
|
247
|
-
end
|
248
|
-
|
249
|
-
# @return [Payouts] Payouts APIs collection
|
250
|
-
def payouts
|
251
|
-
Payouts.new(self)
|
252
|
-
end
|
253
|
-
|
254
|
-
# @return [Redunds] Refunds APIs collection
|
255
|
-
def refunds
|
256
|
-
Refunds.new(self)
|
257
|
-
end
|
258
|
-
|
259
|
-
# @return [ReferencedPayoutItems] ReferencedPayoutItems APIs collection
|
260
|
-
def referenced_payout_items
|
261
|
-
ReferencedPayoutItems.new(self)
|
262
|
-
end
|
263
|
-
|
264
|
-
# @return [ReferencedPayouts] ReferencedPayouts APIs collection
|
265
|
-
def referenced_payouts
|
266
|
-
ReferencedPayouts.new(self)
|
267
|
-
end
|
268
|
-
|
269
|
-
# @return [ShipmentTracking] Shipment Tracking APIs collection
|
270
|
-
def shipment_tracking
|
271
|
-
ShipmentTracking.new(self)
|
272
|
-
end
|
273
|
-
|
274
|
-
# @return [Subscriptions] Subscriptions APIs collection
|
275
|
-
def subscriptions
|
276
|
-
Subscriptions.new(self)
|
277
|
-
end
|
278
|
-
|
279
|
-
# @return [SubscriptionPlans] Subscription Plans APIs collection
|
280
|
-
def subscription_plans
|
281
|
-
SubscriptionPlans.new(self)
|
282
|
-
end
|
283
|
-
|
284
|
-
# @return [UserInfo] User Info APIs collection
|
285
|
-
def user_info
|
286
|
-
UserInfo.new(self)
|
287
|
-
end
|
288
|
-
|
289
|
-
# @return [Users] Users Management APIs collection
|
290
|
-
def users
|
291
|
-
Users.new(self)
|
292
|
-
end
|
293
|
-
|
294
|
-
# @return [Webhooks] Webhooks APIs collection
|
295
|
-
def webhooks
|
296
|
-
Webhooks.new(self)
|
297
|
-
end
|
298
|
-
|
299
|
-
# @return [WebhookEvents] Webhook Events APIs collection
|
300
|
-
def webhook_lookups
|
301
|
-
WebhookLookups.new(self)
|
302
|
-
end
|
303
|
-
|
304
|
-
# @return [WebhookEvents] Webhook Lookups APIs collection
|
305
|
-
def webhook_events
|
306
|
-
WebhookEvents.new(self)
|
307
|
-
end
|
308
|
-
|
309
|
-
private
|
310
|
-
|
311
|
-
def execute_request(http_method, path, query: nil, body: nil, headers: nil)
|
312
|
-
request = Request.new(self, http_method, path, query: query, body: body, headers: headers)
|
313
|
-
RequestExecutor.new(self, request).call
|
314
|
-
end
|
315
105
|
end
|
316
106
|
end
|
data/lib/paypal-api/error.rb
CHANGED
@@ -37,7 +37,6 @@ module PaypalAPI
|
|
37
37
|
#
|
38
38
|
class FailedRequest < Error
|
39
39
|
def initialize(message = nil, request:, response:)
|
40
|
-
super(message)
|
41
40
|
@request = request
|
42
41
|
@response = response
|
43
42
|
|
@@ -48,6 +47,9 @@ module PaypalAPI
|
|
48
47
|
@error_debug_id = data[:debug_id]
|
49
48
|
@error_details = data[:details]
|
50
49
|
@paypal_request_id = request.http_request["paypal-request-id"]
|
50
|
+
|
51
|
+
message += "\n #{response.http_body}" unless data.empty?
|
52
|
+
super(message)
|
51
53
|
end
|
52
54
|
end
|
53
55
|
|
data/lib/paypal-api/request.rb
CHANGED
@@ -83,27 +83,9 @@ module PaypalAPI
|
|
83
83
|
def build_http_headers(http_request, body, headers)
|
84
84
|
headers = normalize_headers(headers)
|
85
85
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
#
|
91
|
-
# We should set json content type header to not get 415 UnsupportedMediaType
|
92
|
-
# error in various APIs
|
93
|
-
#
|
94
|
-
# PayPal requires "application/json" content type even for GET requests
|
95
|
-
# and for POST requests without body.
|
96
|
-
#
|
97
|
-
# Net::HTTP sets default content-type "application/x-www-form-urlencoded"
|
98
|
-
# if not provided
|
99
|
-
#
|
100
|
-
unless headers.key?("content-type")
|
101
|
-
http_request["content-type"] = "application/json"
|
102
|
-
end
|
103
|
-
|
104
|
-
unless headers.key?("paypal-request-id")
|
105
|
-
http_request["paypal-request-id"] = SecureRandom.uuid unless http_request.is_a?(Net::HTTP::Get)
|
106
|
-
end
|
86
|
+
add_authorization_header(http_request, headers)
|
87
|
+
add_content_type_header(http_request, headers)
|
88
|
+
add_paypal_request_id_header(http_request, headers)
|
107
89
|
|
108
90
|
headers.each { |key, value| http_request[key] = value }
|
109
91
|
end
|
@@ -117,12 +99,55 @@ module PaypalAPI
|
|
117
99
|
|
118
100
|
def build_http_uri(path, query)
|
119
101
|
uri = URI.join(client.env.api_url, path)
|
120
|
-
uri
|
102
|
+
add_query_params(uri, query)
|
103
|
+
|
121
104
|
uri
|
122
105
|
end
|
123
106
|
|
124
107
|
def normalize_headers(headers)
|
125
108
|
headers.empty? ? headers : headers.transform_keys { |key| key.to_s.downcase }
|
126
109
|
end
|
110
|
+
|
111
|
+
def add_authorization_header(http_request, headers)
|
112
|
+
unless headers.key?("authorization")
|
113
|
+
http_request["authorization"] = client.access_token.authorization_string
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def add_query_params(uri, query)
|
118
|
+
return if !query || query.empty?
|
119
|
+
|
120
|
+
# We should merge query params with uri query params to not temove them
|
121
|
+
uri_query_string = uri.query
|
122
|
+
|
123
|
+
if uri_query_string && !uri_query_string.empty?
|
124
|
+
old_query = URI.decode_www_form(uri_query_string).to_h
|
125
|
+
query = old_query.transform_keys!(&:to_sym).merge!(query.transform_keys(&:to_sym))
|
126
|
+
end
|
127
|
+
|
128
|
+
uri.query = URI.encode_www_form(query)
|
129
|
+
end
|
130
|
+
|
131
|
+
#
|
132
|
+
# We should set json content type header to not get 415 UnsupportedMediaType
|
133
|
+
# error in various APIs
|
134
|
+
#
|
135
|
+
# PayPal requires "application/json" content type even for GET requests
|
136
|
+
# and for POST requests without body.
|
137
|
+
#
|
138
|
+
# Net::HTTP sets default content-type "application/x-www-form-urlencoded"
|
139
|
+
# if not provided
|
140
|
+
#
|
141
|
+
def add_content_type_header(http_request, headers)
|
142
|
+
unless headers.key?("content-type")
|
143
|
+
http_request["content-type"] = "application/json"
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
def add_paypal_request_id_header(http_request, headers)
|
148
|
+
unless headers.key?("paypal-request-id")
|
149
|
+
http_request["paypal-request-id"] = SecureRandom.uuid unless http_request.is_a?(Net::HTTP::Get)
|
150
|
+
end
|
151
|
+
end
|
127
152
|
end
|
128
153
|
end
|