paypal-sdk-core 0.1.5 → 0.2.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 +15 -0
- data/{spec/config/cacert.pem → data/paypal.crt} +0 -0
- data/lib/generators/paypal/sdk/templates/paypal.yml +16 -19
- data/lib/paypal-sdk-core.rb +7 -4
- data/lib/paypal-sdk/core/api/base.rb +71 -87
- data/lib/paypal-sdk/core/api/data_types/base.rb +18 -6
- data/lib/paypal-sdk/core/api/ipn.rb +8 -18
- data/lib/paypal-sdk/core/api/merchant.rb +36 -16
- data/lib/paypal-sdk/core/api/platform.rb +21 -14
- data/lib/paypal-sdk/core/api/rest.rb +139 -0
- data/lib/paypal-sdk/core/authentication.rb +6 -19
- data/lib/paypal-sdk/core/config.rb +77 -7
- data/lib/paypal-sdk/core/exceptions.rb +87 -0
- data/lib/paypal-sdk/core/logging.rb +2 -2
- data/lib/paypal-sdk/core/util/http_helper.rb +146 -0
- data/lib/paypal-sdk/core/version.rb +1 -1
- data/spec/config/paypal.yml +5 -3
- data/spec/core/api/data_type_spec.rb +12 -0
- data/spec/core/api/ipn_spec.rb +11 -4
- data/spec/core/api/merchant_spec.rb +58 -20
- data/spec/core/api/platform_spec.rb +58 -7
- data/spec/core/api/rest_spec.rb +141 -0
- data/spec/core/config_spec.rb +76 -2
- data/spec/log/rest_http.log +104 -0
- data/spec/log/test.log +69 -1381
- data/spec/spec_helper.rb +3 -0
- metadata +13 -19
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZWMwM2MzM2I5ZDkwMDY1ZWE1NDFkODJhMzQxMmEwZDM4NzhlMzk0YQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ZTA1MGNhNjE3MzdmZTBmNjY2M2IxNjU2YzNkM2FlMmVhYmMyNjBjNg==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NDFmMzU2ZGNiM2JhOWM0ZDQ5NTI5MTUyNjY1MDU2MzA0ZTlmMDVmNWY2Yzc3
|
10
|
+
ZjE4ODBkMWViNjQ4Y2NhNGY4NjIzOThkOTBiMzI4ZDE3NmNkNmYzMzVjYzky
|
11
|
+
MjBiYTc0ZWFhZjBiZTliYWUxODM3NWFhZWExZGU2MWYyNDMzMjQ=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
YWE5YjYwNjYzYWIxOGFhMDMzNGIwY2UyODcwZjg4OGIxZjliMzllNTJjOGFi
|
14
|
+
Y2MwMWFlZTNlOWEzNGYyZWY1YjA2ZTI5Njc2NjY2YTg2NmE2OTE1Y2ZlM2Qw
|
15
|
+
YzdkMzI5MjY0NTY0YjFiNDIwMTJiM2IzYWU4NzlkMWE2MWY5ZDQ=
|
File without changes
|
@@ -1,32 +1,29 @@
|
|
1
1
|
test: &default
|
2
|
+
|
3
|
+
# Credentials for New APIs
|
4
|
+
client_id: EBWKjlELKMYqRNQ6sYvFo64FtaRLRR5BdHEESmha49TM
|
5
|
+
client_secret: EO422dn3gQLgDbuwqTjzrFgFtaRLRR5BdHEESmha49TM
|
6
|
+
|
7
|
+
# Mode can be 'live' or 'sandbox'
|
8
|
+
mode: sandbox
|
9
|
+
|
10
|
+
# Credentials for Classic APIs
|
2
11
|
username: jb-us-seller_api1.paypal.com
|
3
12
|
password: WX4WTU3S8MY44S7F
|
4
13
|
signature: AFcWxV21C7fd0v3bYYYRCpSSRl31A7yDhhsPUU2XhtMoZXsWHFxu-RWy
|
5
14
|
app_id: APP-80W284485P519543T
|
6
|
-
|
7
|
-
|
15
|
+
# # With Certificate
|
16
|
+
# cert_path: "config/cert_key.pem"
|
8
17
|
sandbox_email_address: Platform.sdk.seller@gmail.com
|
9
18
|
|
19
|
+
# # IP Address
|
20
|
+
# ip_address: 127.0.0.1
|
21
|
+
# # HTTP Proxy
|
22
|
+
# http_proxy: http://proxy-ipaddress:3129/
|
23
|
+
|
10
24
|
development:
|
11
25
|
<<: *default
|
12
26
|
|
13
27
|
production:
|
14
28
|
<<: *default
|
15
29
|
mode: live
|
16
|
-
|
17
|
-
# with_certificate:
|
18
|
-
# <<: *default
|
19
|
-
# username: platfo_1255170694_biz_api1.gmail.com
|
20
|
-
# password: 2DPPKUPKB7DQLXNR
|
21
|
-
# signature:
|
22
|
-
# cert_path: "config/cert_key.pem"
|
23
|
-
# app_id: APP-80W284485P519543T
|
24
|
-
#
|
25
|
-
# with_oauth_token:
|
26
|
-
# <<: *default
|
27
|
-
# token: ESTy2hio5WJQo1iixkH29I53RJxaS0Gvno1A6.YQXZgktxbY4I2Tdg
|
28
|
-
# token_secret: ZKPhUYuwJwYsfWdzorozWO2U9pI
|
29
|
-
#
|
30
|
-
# with_proxy:
|
31
|
-
# <<: *default
|
32
|
-
# http_proxy: http://proxy-ipaddress:3129/
|
data/lib/paypal-sdk-core.rb
CHANGED
@@ -1,17 +1,19 @@
|
|
1
|
-
require "paypal-sdk/core/version"
|
2
|
-
require "paypal-sdk/core/config"
|
3
|
-
require "paypal-sdk/core/logging"
|
4
|
-
|
5
1
|
module PayPal
|
6
2
|
module SDK
|
7
3
|
module Core
|
8
4
|
|
5
|
+
autoload :VERSION, "paypal-sdk/core/version"
|
6
|
+
autoload :Config, "paypal-sdk/core/config"
|
7
|
+
autoload :Configuration, "paypal-sdk/core/config"
|
8
|
+
autoload :Logging, "paypal-sdk/core/logging"
|
9
9
|
autoload :Authentication, "paypal-sdk/core/authentication"
|
10
|
+
autoload :Exceptions, "paypal-sdk/core/exceptions"
|
10
11
|
|
11
12
|
module API
|
12
13
|
autoload :Base, "paypal-sdk/core/api/base"
|
13
14
|
autoload :Merchant, "paypal-sdk/core/api/merchant"
|
14
15
|
autoload :Platform, "paypal-sdk/core/api/platform"
|
16
|
+
autoload :REST, "paypal-sdk/core/api/rest"
|
15
17
|
autoload :IPN, "paypal-sdk/core/api/ipn"
|
16
18
|
|
17
19
|
module DataTypes
|
@@ -25,6 +27,7 @@ module PayPal
|
|
25
27
|
module Util
|
26
28
|
autoload :OauthSignature, "paypal-sdk/core/util/oauth_signature"
|
27
29
|
autoload :OrderedHash, "paypal-sdk/core/util/ordered_hash"
|
30
|
+
autoload :HTTPHelper, "paypal-sdk/core/util/http_helper"
|
28
31
|
end
|
29
32
|
|
30
33
|
module Credential
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'net/https'
|
2
|
-
|
3
1
|
module PayPal::SDK::Core
|
4
2
|
|
5
3
|
module API
|
@@ -9,35 +7,12 @@ module PayPal::SDK::Core
|
|
9
7
|
# response = api.request("GetPaymentOptions", "")
|
10
8
|
class Base
|
11
9
|
|
12
|
-
include
|
13
|
-
include Logging
|
14
|
-
include Authentication
|
10
|
+
include Util::HTTPHelper
|
15
11
|
|
16
12
|
attr_accessor :http, :uri, :service_name
|
17
13
|
|
18
|
-
|
19
|
-
|
20
|
-
:platform => { # NVP EndPoint
|
21
|
-
:three_token => "https://svcs.sandbox.paypal.com/",
|
22
|
-
:certificate => "https://svcs.sandbox.paypal.com/"
|
23
|
-
},
|
24
|
-
:merchant => { # SOAP EndPoint
|
25
|
-
:three_token => "https://api-3t.sandbox.paypal.com/2.0",
|
26
|
-
:certificate => "https://api.sandbox.paypal.com/2.0"
|
27
|
-
}
|
28
|
-
},
|
29
|
-
:live => {
|
30
|
-
:platform => { # NVP EndPoint
|
31
|
-
:three_token => "https://svcs.paypal.com/",
|
32
|
-
:certificate => "https://svcs.paypal.com/"
|
33
|
-
},
|
34
|
-
:merchant => { # SOAP EndPoint
|
35
|
-
:three_token => "https://api-3t.paypal.com/2.0",
|
36
|
-
:certificate => "https://api.paypal.com/2.0"
|
37
|
-
}
|
38
|
-
}
|
39
|
-
}
|
40
|
-
DEFAULT_HTTP_HEADER = {}
|
14
|
+
DEFAULT_API_MODE = :sandbox
|
15
|
+
API_MODES = [ :live, :sandbox ]
|
41
16
|
|
42
17
|
# Initialize API object
|
43
18
|
# === Argument
|
@@ -56,89 +31,89 @@ module PayPal::SDK::Core
|
|
56
31
|
set_config(environment, options)
|
57
32
|
end
|
58
33
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
34
|
+
def uri
|
35
|
+
@uri ||=
|
36
|
+
begin
|
37
|
+
uri = URI.parse("#{service_endpoint}/#{service_name}")
|
38
|
+
uri.path = uri.path.gsub(/\/+/, "/")
|
39
|
+
uri
|
40
|
+
end
|
63
41
|
end
|
64
42
|
|
65
|
-
|
66
|
-
|
67
|
-
service_path = "#{service_endpoint}/#{service_name}"
|
68
|
-
@uri = URI.parse(service_path)
|
69
|
-
if config.http_proxy
|
70
|
-
proxy = URI.parse(config.http_proxy)
|
71
|
-
@http = Net::HTTP.new(@uri.host, @uri.port, proxy.host, proxy.port, proxy.user, proxy.password)
|
72
|
-
else
|
73
|
-
@http = Net::HTTP.new(@uri.host, @uri.port)
|
74
|
-
end
|
75
|
-
@uri.path = @uri.path.gsub(/\/+/, "/")
|
76
|
-
configure_http_connection
|
43
|
+
def http
|
44
|
+
@http ||= create_http_connection(uri)
|
77
45
|
end
|
78
46
|
|
79
|
-
#
|
80
|
-
def
|
81
|
-
|
82
|
-
|
83
|
-
if config.ca_file
|
84
|
-
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
85
|
-
http.ca_file = config.ca_file
|
86
|
-
end
|
87
|
-
end
|
88
|
-
if config.http_timeout
|
89
|
-
http.open_timeout = config.http_timeout
|
90
|
-
http.read_timeout = config.http_timeout
|
91
|
-
end
|
92
|
-
add_certificate(http)
|
47
|
+
# Override set_config method to create http connection on changing the configuration.
|
48
|
+
def set_config(*args)
|
49
|
+
@http = @uri = nil
|
50
|
+
super
|
93
51
|
end
|
94
52
|
|
95
53
|
# Get configured API mode( sandbox or live)
|
96
54
|
def api_mode
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
# Get default endpoint for the given service name
|
103
|
-
# === Argument
|
104
|
-
# * <tt>name</tt> -- Service name ( platform or merchant)
|
105
|
-
# === Returns
|
106
|
-
# Return service end point based on the configured API mode.
|
107
|
-
def default_end_point(name)
|
108
|
-
default_end_point = DEFAULT_END_POINTS[api_mode][name]
|
109
|
-
if default_end_point
|
110
|
-
config.cert_path ? default_end_point[:certificate] : default_end_point[:three_token]
|
55
|
+
if config.mode and API_MODES.include? config.mode.to_sym
|
56
|
+
config.mode.to_sym
|
57
|
+
else
|
58
|
+
DEFAULT_API_MODE
|
111
59
|
end
|
112
60
|
end
|
113
61
|
|
114
62
|
# Get service end point
|
115
63
|
def service_endpoint
|
116
|
-
config.
|
64
|
+
config.endpoint
|
117
65
|
end
|
118
66
|
|
119
67
|
# Default Http header
|
120
68
|
def default_http_header
|
121
|
-
|
69
|
+
{ "User-Agent" => self.class.user_agent }
|
122
70
|
end
|
123
71
|
|
124
72
|
# Generate HTTP request for given action and parameters
|
125
73
|
# === Arguments
|
74
|
+
# * <tt>http_method</tt> -- HTTP method(get/put/post/delete/patch)
|
126
75
|
# * <tt>action</tt> -- Action to perform
|
127
76
|
# * <tt>params</tt> -- (Optional) Parameters for the action
|
128
77
|
# * <tt>initheader</tt> -- (Optional) HTTP header
|
129
|
-
def
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
78
|
+
def api_call(payload)
|
79
|
+
payload[:header] = default_http_header.merge(payload[:header])
|
80
|
+
payload[:uri] ||= uri.dup
|
81
|
+
payload[:http] ||= http.dup
|
82
|
+
payload[:uri].query = encode_www_form(payload[:query]) if payload[:query] and payload[:query].any?
|
83
|
+
format_request(payload)
|
84
|
+
payload[:response] = http_call(payload)
|
85
|
+
format_response(payload)
|
86
|
+
payload[:data]
|
138
87
|
rescue Net::HTTPBadGateway, Errno::ECONNRESET, Errno::ECONNABORTED, SocketError => error
|
139
88
|
format_error(error, error.message)
|
140
89
|
end
|
141
90
|
|
91
|
+
# Generate HTTP request for given action and parameters
|
92
|
+
# === Arguments
|
93
|
+
# * <tt>action</tt> -- Action to perform
|
94
|
+
# * <tt>params</tt> -- (Optional) Parameters for the action
|
95
|
+
# * <tt>initheader</tt> -- (Optional) HTTP header
|
96
|
+
def post(action, params = {}, header = {})
|
97
|
+
api_call(:method => :post, :action => action, :params => params, :header => header)
|
98
|
+
end
|
99
|
+
alias_method :request, :post
|
100
|
+
|
101
|
+
def get(action, params = {}, header = {})
|
102
|
+
api_call(:method => :get, :action => action, :query => params, :params => nil, :header => header)
|
103
|
+
end
|
104
|
+
|
105
|
+
def patch(action, params = {}, header = {})
|
106
|
+
api_call(:method => :patch, :action => action, :params => params, :header => header)
|
107
|
+
end
|
108
|
+
|
109
|
+
def put(action, params = {}, header = {})
|
110
|
+
api_call(:method => :put, :action => action, :params => params, :header => header)
|
111
|
+
end
|
112
|
+
|
113
|
+
def delete(action, params = {}, header = {})
|
114
|
+
api_call(:method => :delete, :action => action, :params => params, :header => header)
|
115
|
+
end
|
116
|
+
|
142
117
|
# Format Request data. It will be override by child class
|
143
118
|
# == Arguments
|
144
119
|
# * <tt>action</tt> -- Request action
|
@@ -147,16 +122,19 @@ module PayPal::SDK::Core
|
|
147
122
|
# * <tt>path</tt> -- Formated request uri object
|
148
123
|
# * <tt>params</tt> -- Formated request Parameters
|
149
124
|
# * <tt>header</tt> -- HTTP Header
|
150
|
-
def format_request(
|
151
|
-
[
|
125
|
+
def format_request(payload)
|
126
|
+
payload[:uri].path = url_join(payload[:uri].path, payload[:action])
|
127
|
+
payload[:body] = payload[:params].to_s
|
128
|
+
payload
|
152
129
|
end
|
153
130
|
|
154
131
|
# Format Response object. It will be override by child class
|
155
132
|
# == Argument
|
156
133
|
# * <tt>action</tt> -- Request action
|
157
134
|
# * <tt>response</tt> -- HTTP response object
|
158
|
-
def format_response(
|
159
|
-
response
|
135
|
+
def format_response(payload)
|
136
|
+
payload[:data] = payload[:response].body
|
137
|
+
payload
|
160
138
|
end
|
161
139
|
|
162
140
|
# Format Error object. It will be override by child class.
|
@@ -166,6 +144,12 @@ module PayPal::SDK::Core
|
|
166
144
|
def format_error(exception, message)
|
167
145
|
raise exception
|
168
146
|
end
|
147
|
+
|
148
|
+
class << self
|
149
|
+
def user_agent
|
150
|
+
@user_agent ||= "paypal-sdk-core/#{VERSION} #{RUBY_DESCRIPTION}"
|
151
|
+
end
|
152
|
+
end
|
169
153
|
end
|
170
154
|
end
|
171
155
|
end
|
@@ -110,20 +110,32 @@ module PayPal::SDK::Core
|
|
110
110
|
|
111
111
|
# Initialize options.
|
112
112
|
def initialize(options = {}, &block)
|
113
|
+
merge!(options, &block)
|
114
|
+
end
|
115
|
+
|
116
|
+
# Merge values
|
117
|
+
def merge!(options, &block)
|
113
118
|
if options.is_a? Hash
|
114
119
|
options.each do |key, value|
|
115
|
-
|
116
|
-
send("#{key}=", value)
|
117
|
-
rescue TypeError, ArgumentError => error
|
118
|
-
raise TypeError, "#{error.message}(#{value.inspect}) for #{self.class.name}.#{key} member"
|
119
|
-
end
|
120
|
+
set(key, value)
|
120
121
|
end
|
121
122
|
elsif members[ContentKey]
|
122
|
-
|
123
|
+
set(ContentKey, options)
|
123
124
|
else
|
124
125
|
raise ArgumentError, "invalid data(#{options.inspect}) for #{self.class.name} class"
|
125
126
|
end
|
126
127
|
self.instance_eval(&block) if block
|
128
|
+
self
|
129
|
+
end
|
130
|
+
|
131
|
+
# Set value for given member
|
132
|
+
# === Arguments
|
133
|
+
# * <tt>key</tt> -- member name
|
134
|
+
# * <tt>value</tt> -- value for member
|
135
|
+
def set(key, value)
|
136
|
+
send("#{key}=", value)
|
137
|
+
rescue TypeError, ArgumentError => error
|
138
|
+
raise TypeError, "#{error.message}(#{value.inspect}) for #{self.class.name}.#{key} member"
|
127
139
|
end
|
128
140
|
|
129
141
|
# Create array of objects.
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'net/https'
|
2
|
-
|
3
1
|
module PayPal
|
4
2
|
module SDK
|
5
3
|
module Core
|
@@ -14,7 +12,7 @@ module PayPal
|
|
14
12
|
INVALID = "INVALID"
|
15
13
|
|
16
14
|
class Message
|
17
|
-
include
|
15
|
+
include Util::HTTPHelper
|
18
16
|
|
19
17
|
attr_accessor :message
|
20
18
|
|
@@ -24,31 +22,23 @@ module PayPal
|
|
24
22
|
end
|
25
23
|
|
26
24
|
# Fetch end point
|
27
|
-
def
|
28
|
-
config.
|
25
|
+
def ipn_endpoint
|
26
|
+
config.ipn_endpoint || default_ipn_endpoint
|
29
27
|
end
|
30
28
|
|
31
29
|
# Default IPN end point
|
32
|
-
def
|
33
|
-
|
34
|
-
|
30
|
+
def default_ipn_endpoint
|
31
|
+
endpoint = END_POINTS[(config.mode || :sandbox).to_sym] rescue nil
|
32
|
+
endpoint || END_POINTS[:sandbox]
|
35
33
|
end
|
36
34
|
|
37
35
|
# Request IPN service for validating the content
|
38
36
|
# === Return
|
39
37
|
# return http response object
|
40
38
|
def request
|
41
|
-
uri = URI(
|
42
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
43
|
-
if uri.scheme == "https"
|
44
|
-
http.use_ssl = true
|
45
|
-
if config.ca_file
|
46
|
-
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
47
|
-
http.ca_file = config.ca_file
|
48
|
-
end
|
49
|
-
end
|
39
|
+
uri = URI(ipn_endpoint)
|
50
40
|
query_string = "cmd=_notify-validate&#{message}"
|
51
|
-
|
41
|
+
http_call(:method => :post, :uri => uri, :body => query_string)
|
52
42
|
end
|
53
43
|
|
54
44
|
# Validate the given content
|
@@ -35,10 +35,20 @@ module PayPal::SDK::Core
|
|
35
35
|
:signature => "ebl:Signature",
|
36
36
|
:subject => "ebl:Subject"
|
37
37
|
}
|
38
|
+
DEFAULT_END_POINTS = {
|
39
|
+
:sandbox => {
|
40
|
+
:three_token => "https://api-3t.sandbox.paypal.com/2.0/",
|
41
|
+
:certificate => "https://api.sandbox.paypal.com/2.0/"
|
42
|
+
},
|
43
|
+
:live => {
|
44
|
+
:three_token => "https://api-3t.paypal.com/2.0/",
|
45
|
+
:certificate => "https://api.paypal.com/2.0/"
|
46
|
+
}
|
47
|
+
}
|
38
48
|
|
39
|
-
# Get
|
49
|
+
# Get services end point
|
40
50
|
def service_endpoint
|
41
|
-
config.
|
51
|
+
config.merchant_endpoint || config.endpoint || DEFAULT_END_POINTS[api_mode][base_credential_type]
|
42
52
|
end
|
43
53
|
|
44
54
|
# Format the HTTP request content
|
@@ -48,22 +58,24 @@ module PayPal::SDK::Core
|
|
48
58
|
# === Return
|
49
59
|
# * <tt>request_path</tt> -- Soap request path. DEFAULT("/")
|
50
60
|
# * <tt>request_content</tt> -- Request content in SOAP format.
|
51
|
-
def format_request(
|
61
|
+
def format_request(payload)
|
52
62
|
credential_properties = credential(uri.to_s).properties
|
53
63
|
user_auth_header = map_header_value(SOAP_AUTH_HEADER, credential_properties)
|
54
|
-
content_key = params.keys.first.is_a?(Symbol) ? ContentKey.to_sym : ContentKey.to_s
|
64
|
+
content_key = payload[:params].keys.first.is_a?(Symbol) ? ContentKey.to_sym : ContentKey.to_s
|
55
65
|
xml_out_options = XML_OUT_OPTIONS.merge( 'ContentKey' => content_key )
|
56
66
|
request_content = XmlSimple.xml_out({
|
57
67
|
"soapenv:Envelope" => {
|
58
68
|
content_key => (
|
59
|
-
XmlSimple.xml_out({"soapenv:Header"
|
69
|
+
XmlSimple.xml_out({"soapenv:Header" => { "ns:RequesterCredentials" => {
|
60
70
|
"ebl:Credentials" => user_auth_header
|
61
71
|
}}}, xml_out_options) +
|
62
|
-
XmlSimple.xml_out({"soapenv:Body"
|
72
|
+
XmlSimple.xml_out({"soapenv:Body" => request_body(payload[:action], payload[:params])}, xml_out_options))
|
63
73
|
}.merge(Namespaces)
|
64
74
|
}, xml_out_options.merge('noescape' => true))
|
65
75
|
header = map_header_value(SOAP_HTTP_AUTH_HEADER, credential_properties)
|
66
|
-
[
|
76
|
+
payload[:header] = header.merge(header)
|
77
|
+
payload[:body] = request_content
|
78
|
+
payload
|
67
79
|
end
|
68
80
|
|
69
81
|
# Format Response object
|
@@ -72,14 +84,22 @@ module PayPal::SDK::Core
|
|
72
84
|
# * <tt>response</tt> -- Response object
|
73
85
|
# === Return
|
74
86
|
# Parse the SOAP response content and return Hash object
|
75
|
-
def format_response(
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
87
|
+
def format_response(payload)
|
88
|
+
payload[:data] =
|
89
|
+
if payload[:response].code == "200"
|
90
|
+
hash = XmlSimple.xml_in(payload[:response].body, XML_IN_OPTIONS)
|
91
|
+
hash = skip_attributes(hash)
|
92
|
+
hash["Body"].find{|key_val| key_val[0] =~ /^[^@]/ }[1] || {}
|
93
|
+
else
|
94
|
+
format_error(payload[:response], payload[:response].message)
|
95
|
+
end
|
96
|
+
payload
|
97
|
+
end
|
98
|
+
|
99
|
+
# Log additional information
|
100
|
+
def log_http_call(payload)
|
101
|
+
logger.info "Action: #{payload[:action]}" if payload[:action]
|
102
|
+
super
|
83
103
|
end
|
84
104
|
|
85
105
|
private
|
@@ -88,7 +108,7 @@ module PayPal::SDK::Core
|
|
88
108
|
# == Arguments
|
89
109
|
# * <tt>action</tt> -- Request Action name
|
90
110
|
# * <tt>params</tt> -- Parameters for the action.
|
91
|
-
def
|
111
|
+
def request_body(action, params = {})
|
92
112
|
{ "ns:#{action}Req" => { "ns:#{action}Request" => DEFAULT_PARAMS.merge(params) } }
|
93
113
|
end
|
94
114
|
|