paypal_permissions 0.0.5.1 → 0.0.5.2
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.
- data/lib/generators/paypal_permissions/install_generator.rb +0 -1
- data/lib/paypal_permissions.rb +1 -0
- data/lib/paypal_permissions/parsers.rb +5 -0
- data/lib/paypal_permissions/parsers/common.rb +67 -0
- data/lib/paypal_permissions/parsers/get_access_token.rb +42 -0
- data/lib/paypal_permissions/parsers/get_advanced_personal_data.rb +26 -0
- data/lib/paypal_permissions/parsers/get_basic_personal_data.rb +25 -0
- data/lib/paypal_permissions/parsers/personal_data.rb +46 -0
- data/lib/paypal_permissions/parsers/request_permissions.rb +40 -0
- data/lib/paypal_permissions/paypal_permissions_gateway.rb +10 -277
- data/lib/paypal_permissions/version.rb +1 -1
- data/lib/paypal_permissions/x_pp_authorization.rb +5 -5
- metadata +23 -16
data/lib/paypal_permissions.rb
CHANGED
@@ -0,0 +1,5 @@
|
|
1
|
+
require 'paypal_permissions/parsers/common'
|
2
|
+
require 'paypal_permissions/parsers/request_permissions'
|
3
|
+
require 'paypal_permissions/parsers/get_access_token'
|
4
|
+
require 'paypal_permissions/parsers/get_basic_personal_data'
|
5
|
+
require 'paypal_permissions/parsers/get_advanced_personal_data'
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module ActiveMerchant
|
2
|
+
module Billing
|
3
|
+
module PaypalPermissions
|
4
|
+
module Parsers
|
5
|
+
class CommonNVParser
|
6
|
+
class << self
|
7
|
+
def parse nvp_response
|
8
|
+
@response = {
|
9
|
+
:raw_response => nvp_response,
|
10
|
+
:errors => [
|
11
|
+
],
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
def process_envelope_pair n, v
|
16
|
+
case n
|
17
|
+
when "responseEnvelope.timestamp"
|
18
|
+
@response[:timestamp] = v
|
19
|
+
when "responseEnvelope.ack"
|
20
|
+
@response[:ack] = v
|
21
|
+
when "responseEnvelope.correlationId"
|
22
|
+
@response[:correlation_id] = v
|
23
|
+
when "responseEnvelope.build"
|
24
|
+
# do nothing
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def process_error_idx error_idx
|
29
|
+
if @response[:errors].length <= error_idx
|
30
|
+
@response[:errors] << { :parameters => [] }
|
31
|
+
raise if @response[:errors].length <= error_idx
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def process_error_pair n, v
|
36
|
+
n =~ /^error\((\d+)\)/
|
37
|
+
error_idx = $1
|
38
|
+
process_error_idx error_idx
|
39
|
+
|
40
|
+
case n
|
41
|
+
when /^error\(\d+\)\.errorId$/
|
42
|
+
@response[:errors][error_idx][:error_id] = v
|
43
|
+
when /^error\(\d+\)\.domain$/
|
44
|
+
@response[:errors][error_idx][:domain] = v
|
45
|
+
when /^error\(\d+\)\.subdomain$/
|
46
|
+
@response[:errors][error_idx][:subdomain] = v
|
47
|
+
when /^error\(\d+\)\.severity$/
|
48
|
+
@response[:errors][error_idx][:severity] = v
|
49
|
+
when /^error\(\d+\)\.category$/
|
50
|
+
@response[:errors][error_idx][:category] = v
|
51
|
+
when /^error\(\d+\)\.message$/
|
52
|
+
@response[:errors][error_idx][:message] = v
|
53
|
+
when /^error\(\d+\)\.parameter\((\d+)\)$/
|
54
|
+
parameter_idx = $1.to_i
|
55
|
+
if @response[:errors][error_idx][:parameters].length <= parameter_idx
|
56
|
+
@response[:errors][error_idx][:parameters] << {}
|
57
|
+
raise if @response[:errors][error_idx][:parameters].length <= parameter_idx
|
58
|
+
end
|
59
|
+
@response[:errors][error_idx][:parameters][parameter_idx] = v
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
module PaypalPermissions
|
4
|
+
module Parsers
|
5
|
+
class GetAccessTokenNVParser < CommonNVParser
|
6
|
+
class << self
|
7
|
+
def parse nvp_response
|
8
|
+
super
|
9
|
+
|
10
|
+
pairs = nvp_response.split "&"
|
11
|
+
pairs.each do |pair|
|
12
|
+
n,v = pair.split "="
|
13
|
+
n = CGI.unescape n
|
14
|
+
v = CGI.unescape v
|
15
|
+
|
16
|
+
case n
|
17
|
+
|
18
|
+
# envelope
|
19
|
+
when /^responseEnvelope/
|
20
|
+
process_envelope_pair n, v
|
21
|
+
|
22
|
+
# successful token response
|
23
|
+
when "token"
|
24
|
+
@response[:token] = v
|
25
|
+
when "tokenSecret"
|
26
|
+
@response[:token_secret] = v
|
27
|
+
|
28
|
+
# error with index
|
29
|
+
when /^error\((\d+)\)/
|
30
|
+
process_error_pair n, v
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
@response
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'paypal_permissions/parsers/personal_data'
|
2
|
+
|
3
|
+
module ActiveMerchant #:nodoc:
|
4
|
+
module Billing #:nodoc:
|
5
|
+
module PaypalPermissions
|
6
|
+
module Parsers
|
7
|
+
class GetAdvancedPersonalDataNVParser < PersonalDataNVParser
|
8
|
+
class << self
|
9
|
+
def personal_data_mappings
|
10
|
+
{
|
11
|
+
"http://axschema.org/birthDate" => :birthdate,
|
12
|
+
"http://schema.openid.net/contact/street1" => :street1,
|
13
|
+
"http://schema.openid.net/contact/street2" => :street2,
|
14
|
+
"http://axschema.org/contact/city/home" => :city,
|
15
|
+
"http://axschema.org/contact/state/home" => :state,
|
16
|
+
"http://axschema.org/contact/postalCode/home" => :postal_code,
|
17
|
+
"http://axschema.org/contact/phone/default" => :phone,
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'paypal_permissions/parsers/personal_data'
|
2
|
+
|
3
|
+
module ActiveMerchant #:nodoc:
|
4
|
+
module Billing #:nodoc:
|
5
|
+
module PaypalPermissions
|
6
|
+
module Parsers
|
7
|
+
class GetBasicPersonalDataNVParser < PersonalDataNVParser
|
8
|
+
class << self
|
9
|
+
def personal_data_mappings
|
10
|
+
{
|
11
|
+
"http://axschema.org/contact/country/home" => :country,
|
12
|
+
"http://axschema.org/contact/email" => :email,
|
13
|
+
"http://axschema.org/namePerson/first" => :first_name,
|
14
|
+
"http://axschema.org/namePerson/last" => :last_name,
|
15
|
+
"http://schema.openid.net/contact/fullname" => :full_name,
|
16
|
+
"https://www.paypal.com/webapps/auth/schema/payerID" => :payer_id,
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
module PaypalPermissions
|
4
|
+
module Parsers
|
5
|
+
class PersonalDataNVParser < CommonNVParser
|
6
|
+
class << self
|
7
|
+
def parse nvp_response
|
8
|
+
super
|
9
|
+
|
10
|
+
@response[:personal_data] = {}
|
11
|
+
|
12
|
+
pairs = nvp_response.split "&"
|
13
|
+
pairs.each do |pair|
|
14
|
+
n,v = pair.split "="
|
15
|
+
n = CGI.unescape n
|
16
|
+
v = CGI.unescape v
|
17
|
+
|
18
|
+
case n
|
19
|
+
|
20
|
+
# envelope
|
21
|
+
when /^responseEnvelope/
|
22
|
+
process_envelope_pair n, v
|
23
|
+
|
24
|
+
# successful personal data response
|
25
|
+
when /response\.personalData\((\d+)\)\.personalDataKey/
|
26
|
+
key_idx = $1.to_i
|
27
|
+
key = personal_data_mappings[v]
|
28
|
+
|
29
|
+
when /response\.personalData\((\d+)\)\.personalDataValue/
|
30
|
+
val_idx = $1.to_i
|
31
|
+
raise unless key && val_idx != key_idx
|
32
|
+
@response[:personal_data][key] = v
|
33
|
+
|
34
|
+
# error with index
|
35
|
+
when /^error\((\d+)\)/
|
36
|
+
process_error_pair n, v
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
module PaypalPermissions
|
4
|
+
module Parsers
|
5
|
+
class RequestPermissionsNVParser < CommonNVParser
|
6
|
+
class << self
|
7
|
+
def parse nvp_response
|
8
|
+
super
|
9
|
+
|
10
|
+
pairs = nvp_response.split "&"
|
11
|
+
pairs.each do |pair|
|
12
|
+
n,v = pair.split "="
|
13
|
+
n = CGI.unescape n
|
14
|
+
v = CGI.unescape v
|
15
|
+
|
16
|
+
case n
|
17
|
+
|
18
|
+
# envelope
|
19
|
+
when /^responseEnvelope/
|
20
|
+
process_envelope_pair n, v
|
21
|
+
|
22
|
+
# successful token response
|
23
|
+
when "token"
|
24
|
+
@response[:token] = v
|
25
|
+
|
26
|
+
# error with index
|
27
|
+
when /^error\((\d+)\)/
|
28
|
+
process_error_pair n, v
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
@response
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'active_merchant'
|
2
2
|
require 'active_merchant/billing'
|
3
3
|
require 'active_merchant/billing/gateway'
|
4
|
+
require 'paypal_permissions/parsers'
|
4
5
|
require 'paypal_permissions/x_pp_authorization'
|
5
6
|
require 'uri'
|
6
7
|
require 'cgi'
|
@@ -10,6 +11,7 @@ module ActiveMerchant #:nodoc:
|
|
10
11
|
module Billing #:nodoc:
|
11
12
|
class PaypalPermissionsGateway < ActiveMerchant::Billing::Gateway # :nodoc
|
12
13
|
include XPPAuthorization
|
14
|
+
include PaypalPermissions::Parsers
|
13
15
|
|
14
16
|
public
|
15
17
|
def self.setup
|
@@ -40,7 +42,7 @@ module ActiveMerchant #:nodoc:
|
|
40
42
|
'X-PAYPAL-APPLICATION-ID' => @app_id,
|
41
43
|
'X-PAYPAL-REQUEST-DATA-FORMAT' => 'NV',
|
42
44
|
'X-PAYPAL-RESPONSE-DATA-FORMAT' => 'NV',
|
43
|
-
}.update(x_pp_authorization_header(get_basic_personal_data_url, access_token, access_token_verifier))
|
45
|
+
}.update(x_pp_authorization_header(get_basic_personal_data_url, @login, @password, access_token, access_token_verifier))
|
44
46
|
}
|
45
47
|
get_advanced_personal_data_headers = lambda { |access_token, access_token_verifier|
|
46
48
|
{
|
@@ -50,7 +52,7 @@ module ActiveMerchant #:nodoc:
|
|
50
52
|
'X-PAYPAL-APPLICATION-ID' => @app_id,
|
51
53
|
'X-PAYPAL-REQUEST-DATA-FORMAT' => 'NV',
|
52
54
|
'X-PAYPAL-RESPONSE-DATA-FORMAT' => 'NV',
|
53
|
-
}.update(x_pp_authorization_header(get_advanced_personal_data_url, access_token, access_token_verifier))
|
55
|
+
}.update(x_pp_authorization_header(get_advanced_personal_data_url, @login, @password, access_token, access_token_verifier))
|
54
56
|
}
|
55
57
|
@options = {
|
56
58
|
:request_permissions_headers => request_permissions_headers,
|
@@ -69,7 +71,7 @@ module ActiveMerchant #:nodoc:
|
|
69
71
|
# puts "request: #{request_permissions_url}?#{query_string}\n"
|
70
72
|
# puts "nvp_response: #{nvp_response}\n"
|
71
73
|
end
|
72
|
-
response =
|
74
|
+
response = RequestPermissionsNVParser.parse nvp_response
|
73
75
|
end
|
74
76
|
|
75
77
|
public
|
@@ -85,7 +87,7 @@ module ActiveMerchant #:nodoc:
|
|
85
87
|
# puts "request: #{get_access_token_url}?#{query_string}\n"
|
86
88
|
# puts "nvp_response: #{nvp_response}\n"
|
87
89
|
end
|
88
|
-
response =
|
90
|
+
response = GetAccessTokenNVParser.parse nvp_response
|
89
91
|
end
|
90
92
|
|
91
93
|
public
|
@@ -94,51 +96,28 @@ module ActiveMerchant #:nodoc:
|
|
94
96
|
template % token
|
95
97
|
end
|
96
98
|
|
97
|
-
def basic_personal_data_mappings
|
98
|
-
{
|
99
|
-
"http://axschema.org/contact/country/home" => :country,
|
100
|
-
"http://axschema.org/contact/email" => :email,
|
101
|
-
"http://axschema.org/namePerson/first" => :first_name,
|
102
|
-
"http://axschema.org/namePerson/last" => :last_name,
|
103
|
-
"http://schema.openid.net/contact/fullname" => :full_name,
|
104
|
-
"https://www.paypal.com/webapps/auth/schema/payerID" => :payer_id,
|
105
|
-
}
|
106
|
-
end
|
107
|
-
|
108
|
-
def advanced_personal_data_mappings
|
109
|
-
{
|
110
|
-
"http://axschema.org/birthDate" => :birthdate,
|
111
|
-
"http://schema.openid.net/contact/street1" => :street1,
|
112
|
-
"http://schema.openid.net/contact/street2" => :street2,
|
113
|
-
"http://axschema.org/contact/city/home" => :city,
|
114
|
-
"http://axschema.org/contact/state/home" => :state,
|
115
|
-
"http://axschema.org/contact/postalCode/home" => :postal_code,
|
116
|
-
"http://axschema.org/contact/phone/default" => :phone,
|
117
|
-
}
|
118
|
-
end
|
119
|
-
|
120
99
|
public
|
121
100
|
def get_basic_personal_data(access_token, access_token_verifier)
|
122
|
-
body = personal_data_post_body(
|
101
|
+
body = personal_data_post_body(GetBasicPersonalDataNVParser.personal_data_mappings)
|
123
102
|
opts = @options[:get_basic_personal_data_headers].call(access_token, access_token_verifier)
|
124
103
|
nvp_response = ssl_post(get_basic_personal_data_url, body, opts)
|
125
104
|
if nvp_response =~ /error\(\d+\)/
|
126
105
|
# puts "request: #{get_basic_personal_data_url} post_body:#{body}\n"
|
127
106
|
# puts "nvp_response: #{nvp_response}\n"
|
128
107
|
end
|
129
|
-
response =
|
108
|
+
response = GetBasicPersonalDataNVParser.parse nvp_response
|
130
109
|
end
|
131
110
|
|
132
111
|
public
|
133
112
|
def get_advanced_personal_data(access_token, access_token_verifier)
|
134
|
-
body = personal_data_post_body(
|
113
|
+
body = personal_data_post_body(GetAdvancedPersonalDataNVParser.personal_data_mappings)
|
135
114
|
opts = @options[:get_advanced_personal_data_headers].call(access_token, access_token_verifier)
|
136
115
|
nvp_response = ssl_post(get_advanced_personal_data_url, body, opts)
|
137
116
|
if nvp_response =~ /error\(\d+\)/
|
138
117
|
# puts "request: #{get_advanced_personal_data_url} post_body:#{body}\n"
|
139
118
|
# puts "nvp_response: #{nvp_response}\n"
|
140
119
|
end
|
141
|
-
response =
|
120
|
+
response = GetAdvancedPersonalDataNVParser.parse nvp_response
|
142
121
|
end
|
143
122
|
|
144
123
|
public
|
@@ -213,252 +192,6 @@ module ActiveMerchant #:nodoc:
|
|
213
192
|
body += "requestEnvelope.errorLanguage=en_US"
|
214
193
|
end
|
215
194
|
|
216
|
-
private
|
217
|
-
def parse_request_permissions_nvp(nvp)
|
218
|
-
response = {
|
219
|
-
:errors => [
|
220
|
-
],
|
221
|
-
}
|
222
|
-
pairs = nvp.split "&"
|
223
|
-
pairs.each do |pair|
|
224
|
-
n,v = pair.split "="
|
225
|
-
n = CGI.unescape n
|
226
|
-
v = CGI.unescape v
|
227
|
-
case n
|
228
|
-
when "responseEnvelope.timestamp"
|
229
|
-
response[:timestamp] = v
|
230
|
-
when "responseEnvelope.ack"
|
231
|
-
response[:ack] = v
|
232
|
-
=begin
|
233
|
-
# Client should implement these with logging...
|
234
|
-
case v
|
235
|
-
when "Success"
|
236
|
-
when "Failure"
|
237
|
-
when "Warning"
|
238
|
-
when "SuccessWithWarning"
|
239
|
-
when "FailureWithWarning"
|
240
|
-
end
|
241
|
-
=end
|
242
|
-
when "responseEnvelope.correlationId"
|
243
|
-
response[:correlation_id] = v
|
244
|
-
when "responseEnvelope.build"
|
245
|
-
# do nothing
|
246
|
-
when "token"
|
247
|
-
response[:token] = v
|
248
|
-
when /^error\((\d+)\)/
|
249
|
-
error_idx = $1.to_i
|
250
|
-
if response[:errors].length <= error_idx
|
251
|
-
response[:errors] << { :parameters => [] }
|
252
|
-
raise if response[:errors].length <= error_idx
|
253
|
-
end
|
254
|
-
case n
|
255
|
-
when /^error\(\d+\)\.errorId$/
|
256
|
-
response[:errors][error_idx][:error_id] = v
|
257
|
-
=begin
|
258
|
-
# Client should implement these with logging. PayPal doesn't distinguish
|
259
|
-
# between errors which can be corrected by the user and errors which need
|
260
|
-
# to be corrected by a developer or merchant, say, in configuration.
|
261
|
-
# case v
|
262
|
-
# when "520002"
|
263
|
-
# when
|
264
|
-
=end
|
265
|
-
when /^error\(\d+\)\.domain$/
|
266
|
-
response[:errors][error_idx][:domain] = v
|
267
|
-
when /^error\(\d+\)\.subdomain$/
|
268
|
-
response[:errors][error_idx][:subdomain] = v
|
269
|
-
when /^error\(\d+\)\.severity$/
|
270
|
-
response[:errors][error_idx][:severity] = v
|
271
|
-
when /^error\(\d+\)\.category$/
|
272
|
-
response[:errors][error_idx][:category] = v
|
273
|
-
when /^error\(\d+\)\.message$/
|
274
|
-
response[:errors][error_idx][:message] = v
|
275
|
-
when /^error\(\d+\)\.parameter\((\d+)\)$/
|
276
|
-
parameter_idx = $1.to_i
|
277
|
-
if response[:errors][error_idx][:parameters].length <= parameter_idx
|
278
|
-
response[:errors][error_idx][:parameters] << {}
|
279
|
-
raise if response[:errors][error_idx][:parameters].length <= parameter_idx
|
280
|
-
end
|
281
|
-
response[:errors][error_idx][:parameters][parameter_idx] = v
|
282
|
-
end
|
283
|
-
end
|
284
|
-
end
|
285
|
-
response
|
286
|
-
end
|
287
|
-
|
288
|
-
private
|
289
|
-
def parse_get_access_token_nvp(nvp)
|
290
|
-
response = {
|
291
|
-
:errors => [
|
292
|
-
],
|
293
|
-
}
|
294
|
-
pairs = nvp.split "&"
|
295
|
-
pairs.each do |pair|
|
296
|
-
n,v = pair.split "="
|
297
|
-
n = CGI.unescape n
|
298
|
-
v = CGI.unescape v
|
299
|
-
case n
|
300
|
-
when "responseEnvelope.timestamp"
|
301
|
-
response[:timestamp] = v
|
302
|
-
when "responseEnvelope.ack"
|
303
|
-
response[:ack] = v
|
304
|
-
=begin
|
305
|
-
# Client should implement these with logging...
|
306
|
-
case v
|
307
|
-
when "Success"
|
308
|
-
when "Failure"
|
309
|
-
when "Warning"
|
310
|
-
when "SuccessWithWarning"
|
311
|
-
when "FailureWithWarning"
|
312
|
-
end
|
313
|
-
=end
|
314
|
-
when "responseEnvelope.correlationId"
|
315
|
-
response[:correlation_id] = v
|
316
|
-
when "responseEnvelope.build"
|
317
|
-
# do nothing
|
318
|
-
when "token"
|
319
|
-
response[:token] = v
|
320
|
-
when "tokenSecret"
|
321
|
-
response[:tokenSecret] = v
|
322
|
-
when /^error\((\d+)\)/
|
323
|
-
error_idx = $1.to_i
|
324
|
-
if response[:errors].length <= error_idx
|
325
|
-
response[:errors] << { :parameters => [] }
|
326
|
-
raise if response[:errors].length <= error_idx
|
327
|
-
end
|
328
|
-
case n
|
329
|
-
when /^error\(\d+\)\.errorId$/
|
330
|
-
response[:errors][error_idx][:error_id] = v
|
331
|
-
=begin
|
332
|
-
# Client should implement these with logging. PayPal doesn't distinguish
|
333
|
-
# between errors which can be corrected by the user and errors which need
|
334
|
-
# to be corrected by a developer or merchant, say, in configuration.
|
335
|
-
# case v
|
336
|
-
# when "520002"
|
337
|
-
# when
|
338
|
-
=end
|
339
|
-
when /^error\(\d+\)\.domain$/
|
340
|
-
response[:errors][error_idx][:domain] = v
|
341
|
-
when /^error\(\d+\)\.subdomain$/
|
342
|
-
response[:errors][error_idx][:subdomain] = v
|
343
|
-
when /^error\(\d+\)\.severity$/
|
344
|
-
response[:errors][error_idx][:severity] = v
|
345
|
-
when /^error\(\d+\)\.category$/
|
346
|
-
response[:errors][error_idx][:category] = v
|
347
|
-
when /^error\(\d+\)\.message$/
|
348
|
-
response[:errors][error_idx][:message] = v
|
349
|
-
when /^error\(\d+\)\.parameter\((\d+)\)$/
|
350
|
-
parameter_idx = $1.to_i
|
351
|
-
if response[:errors][error_idx][:parameters].length <= parameter_idx
|
352
|
-
response[:errors][error_idx][:parameters] << {}
|
353
|
-
raise if response[:errors][error_idx][:parameters].length <= parameter_idx
|
354
|
-
end
|
355
|
-
response[:errors][error_idx][:parameters][parameter_idx] = v
|
356
|
-
end
|
357
|
-
end
|
358
|
-
end
|
359
|
-
response
|
360
|
-
end
|
361
|
-
|
362
|
-
private
|
363
|
-
def parse_personal_data_nvp(nvp, personal_data_mappings)
|
364
|
-
response = {
|
365
|
-
:raw_response => nvp,
|
366
|
-
:errors => [
|
367
|
-
],
|
368
|
-
:personal_data => {
|
369
|
-
}
|
370
|
-
}
|
371
|
-
begin
|
372
|
-
key = nil
|
373
|
-
key_idx = nil
|
374
|
-
pairs = nvp.split "&"
|
375
|
-
pairs.each do |pair|
|
376
|
-
n,v = pair.split "="
|
377
|
-
v = "" if v.nil?
|
378
|
-
n = CGI.unescape n
|
379
|
-
v = CGI.unescape v
|
380
|
-
case n
|
381
|
-
when "responseEnvelope.timestamp"
|
382
|
-
response[:timestamp] = v
|
383
|
-
when "responseEnvelope.ack"
|
384
|
-
response[:ack] = v
|
385
|
-
when "responseEnvelope.correlationId"
|
386
|
-
response[:correlation_id] = v
|
387
|
-
when "responseEnvelope.build"
|
388
|
-
# do nothing
|
389
|
-
|
390
|
-
when /response\.personalData\((\d+)\)\.personalDataKey/
|
391
|
-
key_idx = $1.to_i
|
392
|
-
key = personal_data_mappings[v]
|
393
|
-
=begin
|
394
|
-
case v
|
395
|
-
when "http://axschema.org/contact/country/home"
|
396
|
-
key = :country
|
397
|
-
when "http://axschema.org/contact/email"
|
398
|
-
key = :email
|
399
|
-
when "http://axschema.org/namePerson/first"
|
400
|
-
key = :first_name
|
401
|
-
when "http://axschema.org/namePerson/last"
|
402
|
-
key = :last_name
|
403
|
-
when "http://schema.openid.net/contact/fullname"
|
404
|
-
key = :full_name
|
405
|
-
when "https://www.paypal.com/webapps/auth/schema/payerID"
|
406
|
-
key = :payer_id
|
407
|
-
end
|
408
|
-
=end
|
409
|
-
|
410
|
-
when /response\.personalData\((\d+)\)\.personalDataValue/
|
411
|
-
val_idx = $1.to_i
|
412
|
-
if !key
|
413
|
-
# puts "key:#{key} is nil for v:#{v}"
|
414
|
-
elsif val_idx != key_idx
|
415
|
-
# puts "key_idx:#{key_idx} is out of sync with val_idx:#{val_idx} for key:#{key}"
|
416
|
-
else
|
417
|
-
response[:personal_data][key] = v
|
418
|
-
end
|
419
|
-
|
420
|
-
when /^error\((\d+)\)/
|
421
|
-
error_idx = $1.to_i
|
422
|
-
if response[:errors].length <= error_idx
|
423
|
-
response[:errors] << { :parameters => [] }
|
424
|
-
raise if response[:errors].length <= error_idx
|
425
|
-
end
|
426
|
-
case n
|
427
|
-
when /^error\(\d+\)\.errorId$/
|
428
|
-
response[:errors][error_idx][:error_id] = v
|
429
|
-
=begin
|
430
|
-
# Client should implement these with logging. PayPal doesn't distinguish
|
431
|
-
# between errors which can be corrected by the user and errors which need
|
432
|
-
# to be corrected by a developer or merchant, say, in configuration.
|
433
|
-
# case v
|
434
|
-
# when "520002"
|
435
|
-
# when
|
436
|
-
=end
|
437
|
-
when /^error\(\d+\)\.domain$/
|
438
|
-
response[:errors][error_idx][:domain] = v
|
439
|
-
when /^error\(\d+\)\.subdomain$/
|
440
|
-
response[:errors][error_idx][:subdomain] = v
|
441
|
-
when /^error\(\d+\)\.severity$/
|
442
|
-
response[:errors][error_idx][:severity] = v
|
443
|
-
when /^error\(\d+\)\.category$/
|
444
|
-
response[:errors][error_idx][:category] = v
|
445
|
-
when /^error\(\d+\)\.message$/
|
446
|
-
response[:errors][error_idx][:message] = v
|
447
|
-
when /^error\(\d+\)\.parameter\((\d+)\)$/
|
448
|
-
parameter_idx = $1.to_i
|
449
|
-
if response[:errors][error_idx][:parameters].length <= parameter_idx
|
450
|
-
response[:errors][error_idx][:parameters] << {}
|
451
|
-
raise if response[:errors][error_idx][:parameters].length <= parameter_idx
|
452
|
-
end
|
453
|
-
response[:errors][error_idx][:parameters][parameter_idx] = v
|
454
|
-
end
|
455
|
-
end
|
456
|
-
end
|
457
|
-
rescue
|
458
|
-
response[:errors][:unknown_error] << nvp.inspect
|
459
|
-
end
|
460
|
-
response
|
461
|
-
end
|
462
195
|
|
463
196
|
=begin
|
464
197
|
private
|
@@ -5,23 +5,23 @@ module ActiveMerchant #:nodoc:
|
|
5
5
|
module Billing #:nodoc:
|
6
6
|
module XPPAuthorization
|
7
7
|
public
|
8
|
-
def x_pp_authorization_header url, access_token, access_token_verifier
|
8
|
+
def x_pp_authorization_header url, api_user_id, api_password, access_token, access_token_verifier
|
9
9
|
timestamp = Time.now.to_i.to_s
|
10
|
-
signature = x_pp_authorization_signature url, timestamp, access_token, access_token_verifier
|
10
|
+
signature = x_pp_authorization_signature url, api_user_id, api_password, timestamp, access_token, access_token_verifier
|
11
11
|
{ 'X-PP-AUTHORIZATION' => "token=#{access_token},signature=#{signature},timestamp=#{timestamp}" }
|
12
12
|
end
|
13
13
|
|
14
14
|
public
|
15
|
-
def x_pp_authorization_signature url, timestamp, access_token, access_token_verifier
|
15
|
+
def x_pp_authorization_signature url, api_user_id, api_password, timestamp, access_token, access_token_verifier
|
16
16
|
# no query params, but if there were, this is where they'd go
|
17
17
|
query_params = {}
|
18
18
|
key = [
|
19
|
-
URI.encode(
|
19
|
+
URI.encode(api_password),
|
20
20
|
URI.encode(access_token_verifier),
|
21
21
|
].join("&")
|
22
22
|
|
23
23
|
params = query_params.dup.merge({
|
24
|
-
"oauth_consumer_key" =>
|
24
|
+
"oauth_consumer_key" => api_user_id,
|
25
25
|
"oauth_version" => "1.0",
|
26
26
|
"oauth_signature_method" => "HMAC-SHA1",
|
27
27
|
"oauth_token" => access_token,
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paypal_permissions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.5.
|
4
|
+
version: 0.0.5.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-04-
|
12
|
+
date: 2012-04-18 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &2156381840 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2156381840
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: vcr
|
27
|
-
requirement: &
|
27
|
+
requirement: &2156319520 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '1.11'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2156319520
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: railties
|
38
|
-
requirement: &
|
38
|
+
requirement: &2156308800 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '3.0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2156308800
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: activesupport
|
49
|
-
requirement: &
|
49
|
+
requirement: &2156304120 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '3.0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2156304120
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: activemerchant
|
60
|
-
requirement: &
|
60
|
+
requirement: &2156301480 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2156301480
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
|
-
requirement: &
|
71
|
+
requirement: &2156299260 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '2.6'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2156299260
|
80
80
|
description: ! '"A gem to support PayPal Permissions API for Rails applications using
|
81
81
|
ActiveMerchant."'
|
82
82
|
email:
|
@@ -160,6 +160,13 @@ files:
|
|
160
160
|
- lib/generators/templates/README.rdoc
|
161
161
|
- lib/generators/templates/paypal_permissions.rb
|
162
162
|
- lib/paypal_permissions.rb
|
163
|
+
- lib/paypal_permissions/parsers.rb
|
164
|
+
- lib/paypal_permissions/parsers/common.rb
|
165
|
+
- lib/paypal_permissions/parsers/get_access_token.rb
|
166
|
+
- lib/paypal_permissions/parsers/get_advanced_personal_data.rb
|
167
|
+
- lib/paypal_permissions/parsers/get_basic_personal_data.rb
|
168
|
+
- lib/paypal_permissions/parsers/personal_data.rb
|
169
|
+
- lib/paypal_permissions/parsers/request_permissions.rb
|
163
170
|
- lib/paypal_permissions/paypal_permissions_gateway.rb
|
164
171
|
- lib/paypal_permissions/version.rb
|
165
172
|
- lib/paypal_permissions/x_pp_authorization.rb
|
@@ -181,7 +188,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
181
188
|
version: '0'
|
182
189
|
segments:
|
183
190
|
- 0
|
184
|
-
hash:
|
191
|
+
hash: 4118521118431286841
|
185
192
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
186
193
|
none: false
|
187
194
|
requirements:
|
@@ -190,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
190
197
|
version: '0'
|
191
198
|
segments:
|
192
199
|
- 0
|
193
|
-
hash:
|
200
|
+
hash: 4118521118431286841
|
194
201
|
requirements: []
|
195
202
|
rubyforge_project: paypal_permissions
|
196
203
|
rubygems_version: 1.8.10
|