amazon_flex_pay 0.9.14 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +0 -1
- data/lib/amazon_flex_pay.rb +32 -11
- data/lib/amazon_flex_pay/api.rb +49 -22
- data/lib/amazon_flex_pay/api/base_request.rb +18 -40
- data/lib/amazon_flex_pay/pipelines.rb +17 -11
- data/lib/amazon_flex_pay/pipelines/base.rb +15 -12
- data/lib/amazon_flex_pay/signature.rb +24 -0
- data/lib/amazon_flex_pay/{signing.rb → util.rb} +4 -16
- data/test/amazon_flex_pay/api/base_request_test.rb +67 -0
- data/test/amazon_flex_pay/api_test.rb +418 -0
- data/test/{data_types_test.rb → amazon_flex_pay/data_types_test.rb} +3 -3
- data/test/amazon_flex_pay/pipelines/base_test.rb +35 -0
- data/test/amazon_flex_pay/pipelines_test.rb +55 -0
- data/test/amazon_flex_pay/signature_test.rb +11 -0
- data/test/amazon_flex_pay/util_test.rb +15 -0
- data/test/test_helper.rb +2 -4
- metadata +47 -20
- data/test/amazon_flex_pay_test.rb +0 -179
- data/test/api_test.rb +0 -303
- data/test/pipelines_test.rb +0 -48
data/Rakefile
CHANGED
data/lib/amazon_flex_pay.rb
CHANGED
@@ -9,19 +9,35 @@ require 'active_support' # camelcase, underscore
|
|
9
9
|
require 'active_support/inflector'
|
10
10
|
require 'active_support/notifications'
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
require_relative 'amazon_flex_pay/util'
|
13
|
+
require_relative 'amazon_flex_pay/signature'
|
14
|
+
require_relative 'amazon_flex_pay/model'
|
15
|
+
require_relative 'amazon_flex_pay/enumerations'
|
16
|
+
require_relative 'amazon_flex_pay/data_types'
|
16
17
|
|
17
|
-
|
18
|
-
|
18
|
+
require_relative 'amazon_flex_pay/api'
|
19
|
+
require_relative 'amazon_flex_pay/pipelines'
|
19
20
|
|
20
21
|
module AmazonFlexPay
|
21
|
-
VERSION = '0.
|
22
|
+
VERSION = '0.10.0'
|
22
23
|
API_VERSION = '2011-09-20'
|
23
24
|
PIPELINE_VERSION = '2009-01-09'
|
24
25
|
|
26
|
+
ENDPOINTS = {
|
27
|
+
:sandbox => {
|
28
|
+
:api => 'https://fps.sandbox.amazonaws.com/',
|
29
|
+
:cbui => 'https://authorize.payments-sandbox.amazon.com/cobranded-ui/actions/start'
|
30
|
+
}.freeze,
|
31
|
+
:live => {
|
32
|
+
:api => 'https://fps.amazonaws.com/',
|
33
|
+
:cbui => 'https://authorize.payments.amazon.com/cobranded-ui/actions/start'
|
34
|
+
}.freeze
|
35
|
+
}
|
36
|
+
|
37
|
+
extend Util
|
38
|
+
extend AmazonFlexPay::API
|
39
|
+
extend AmazonFlexPay::Pipelines
|
40
|
+
|
25
41
|
class << self
|
26
42
|
attr_accessor :access_key
|
27
43
|
attr_accessor :secret_key
|
@@ -30,7 +46,7 @@ module AmazonFlexPay
|
|
30
46
|
#
|
31
47
|
# Defaults to the sandbox unless you set it explicitly or call <tt>go_live!</tt>.
|
32
48
|
def api_endpoint
|
33
|
-
@api_endpoint ||=
|
49
|
+
@api_endpoint ||= ENDPOINTS[:sandbox][:api]
|
34
50
|
end
|
35
51
|
attr_writer :api_endpoint
|
36
52
|
|
@@ -38,7 +54,7 @@ module AmazonFlexPay
|
|
38
54
|
#
|
39
55
|
# Defaults to the sandbox unless you set it explicitly or call <tt>go_live!</tt>.
|
40
56
|
def pipeline_endpoint
|
41
|
-
@pipeline_endpoint ||=
|
57
|
+
@pipeline_endpoint ||= ENDPOINTS[:sandbox][:cbui]
|
42
58
|
end
|
43
59
|
attr_writer :pipeline_endpoint
|
44
60
|
|
@@ -46,9 +62,14 @@ module AmazonFlexPay
|
|
46
62
|
#
|
47
63
|
# Call <tt>AmazonFlexPay.go_live!</tt> to enable live transactions and real money in this environment.
|
48
64
|
def go_live!
|
49
|
-
self.api_endpoint =
|
50
|
-
self.pipeline_endpoint =
|
65
|
+
self.api_endpoint = ENDPOINTS[:live][:api]
|
66
|
+
self.pipeline_endpoint = ENDPOINTS[:live][:cbui]
|
51
67
|
end
|
68
|
+
|
69
|
+
def sign(endpoint, params)
|
70
|
+
Signature.new(secret_key, endpoint, params).generate
|
71
|
+
end
|
72
|
+
|
52
73
|
end
|
53
74
|
|
54
75
|
end
|
data/lib/amazon_flex_pay/api.rb
CHANGED
@@ -1,21 +1,20 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
Dir[File.dirname(__FILE__) + '/api/*'].each do |p| require "amazon_flex_pay/api/#{File.basename(p)}" end
|
1
|
+
require_relative 'api/base_request'
|
2
|
+
Dir[File.dirname(__FILE__) + '/api/*'].each do |p| require_relative "api/#{File.basename(p)}" end
|
4
3
|
|
5
4
|
module AmazonFlexPay
|
6
|
-
|
5
|
+
module API
|
7
6
|
# Cancels a transaction.
|
8
7
|
#
|
9
8
|
# See http://docs.amazonwebservices.com/AmazonFPS/latest/FPSAdvancedGuide/Cancel.html
|
10
9
|
def cancel(transaction_id, options = {})
|
11
|
-
|
10
|
+
submit Cancel.new(options.merge(:transaction_id => transaction_id))
|
12
11
|
end
|
13
12
|
|
14
13
|
# Cancels a token.
|
15
14
|
#
|
16
15
|
# See http://docs.amazonwebservices.com/AmazonFPS/latest/FPSAdvancedGuide/CancelToken.html
|
17
16
|
def cancel_token(token_id, options = {})
|
18
|
-
|
17
|
+
submit CancelToken.new(options.merge(:token_id => token_id))
|
19
18
|
end
|
20
19
|
|
21
20
|
# Searches through transactions on your account. Helpful if you want to compare vs your own records,
|
@@ -23,21 +22,21 @@ module AmazonFlexPay
|
|
23
22
|
#
|
24
23
|
# See http://docs.amazonwebservices.com/AmazonFPS/latest/FPSAccountManagementGuide/GetAccountActivity.html
|
25
24
|
def get_account_activity(start_date, end_date, options = {})
|
26
|
-
|
25
|
+
submit GetAccountActivity.new(options.merge(:start_date => start_date, :end_date => end_date))
|
27
26
|
end
|
28
27
|
|
29
28
|
# Gets your Amazon Payments account balance.
|
30
29
|
#
|
31
30
|
# See http://docs.amazonwebservices.com/AmazonFPS/latest/FPSAccountManagementGuide/GetAccountBalance.html
|
32
31
|
def get_account_balance
|
33
|
-
|
32
|
+
submit GetAccountBalance.new
|
34
33
|
end
|
35
34
|
|
36
35
|
# Returns the status of a recipient's Amazon account.
|
37
36
|
#
|
38
37
|
# See http://docs.amazonwebservices.com/AmazonFPS/latest/FPSAdvancedGuide/GetRecipientVerificationStatus.html
|
39
38
|
def get_recipient_verification_status(recipient_token_id)
|
40
|
-
|
39
|
+
submit GetRecipientVerificationStatus.new(:recipient_token_id => recipient_token_id)
|
41
40
|
end
|
42
41
|
|
43
42
|
# Returns information about a token's state from a caller reference.
|
@@ -48,21 +47,21 @@ module AmazonFlexPay
|
|
48
47
|
#
|
49
48
|
# See http://docs.amazonwebservices.com/AmazonFPS/latest/FPSAdvancedGuide/GetTokensByCaller.html
|
50
49
|
def get_token_by_caller_reference(ref)
|
51
|
-
|
50
|
+
submit GetTokenByCaller.new(:caller_reference => ref)
|
52
51
|
end
|
53
52
|
|
54
53
|
# Returns information about a token's state from a token id.
|
55
54
|
#
|
56
55
|
# See http://docs.amazonwebservices.com/AmazonFPS/latest/FPSAdvancedGuide/GetTokensByCaller.html
|
57
56
|
def get_token_by_id(id)
|
58
|
-
|
57
|
+
submit GetTokenByCaller.new(:token_id => id)
|
59
58
|
end
|
60
59
|
|
61
60
|
# Returns information about how much of the token has been used, and what remains.
|
62
61
|
#
|
63
62
|
# See http://docs.amazonwebservices.com/AmazonFPS/latest/FPSAccountManagementGuide/GetTokenUsage.html
|
64
63
|
def get_token_usage(id)
|
65
|
-
|
64
|
+
submit GetTokenUsage.new(:token_id => id)
|
66
65
|
end
|
67
66
|
|
68
67
|
# Returns all of your tokens. Note that when you send someone through a recipient pipeline, that registers
|
@@ -74,7 +73,7 @@ module AmazonFlexPay
|
|
74
73
|
#
|
75
74
|
# See http://docs.amazonwebservices.com/AmazonFPS/latest/FPSAccountManagementGuide/GetTokens.html
|
76
75
|
def get_tokens(options = {})
|
77
|
-
|
76
|
+
submit GetTokens.new(options)
|
78
77
|
end
|
79
78
|
|
80
79
|
# Returns all of Amazon's details about a transaction, such as its status and when it began and finished
|
@@ -82,7 +81,7 @@ module AmazonFlexPay
|
|
82
81
|
#
|
83
82
|
# See http://docs.amazonwebservices.com/AmazonFPS/latest/FPSAccountManagementGuide/GetTransaction.html
|
84
83
|
def get_transaction(id)
|
85
|
-
|
84
|
+
submit GetTransaction.new(:transaction_id => id)
|
86
85
|
end
|
87
86
|
|
88
87
|
# Returns the current status of the transaction. Note that this information is also available from
|
@@ -90,7 +89,7 @@ module AmazonFlexPay
|
|
90
89
|
#
|
91
90
|
# See http://docs.amazonwebservices.com/AmazonFPS/latest/FPSAccountManagementGuide/GetTransactionStatus.html
|
92
91
|
def get_transaction_status(id)
|
93
|
-
|
92
|
+
submit GetTransactionStatus.new(:transaction_id => id)
|
94
93
|
end
|
95
94
|
|
96
95
|
# Begins a Pay request for a sender token. If you are not also the recipient (this is a three-party marketplace
|
@@ -100,11 +99,11 @@ module AmazonFlexPay
|
|
100
99
|
#
|
101
100
|
# See http://docs.amazonwebservices.com/AmazonFPS/latest/FPSAdvancedGuide/Pay.html
|
102
101
|
def pay(value, currency, sender_token_id, caller_reference, options = {})
|
103
|
-
|
102
|
+
submit Pay.new(options.merge(
|
104
103
|
:transaction_amount => {:value => value, :currency_code => currency},
|
105
104
|
:sender_token_id => sender_token_id,
|
106
105
|
:caller_reference => caller_reference
|
107
|
-
))
|
106
|
+
))
|
108
107
|
end
|
109
108
|
|
110
109
|
# Begins a Reserve request for the sender token. Very similar to <tt>pay</tt>.
|
@@ -113,11 +112,11 @@ module AmazonFlexPay
|
|
113
112
|
#
|
114
113
|
# See http://docs.amazonwebservices.com/AmazonFPS/latest/FPSAdvancedGuide/Reserve.html
|
115
114
|
def reserve(value, currency, sender_token_id, caller_reference, options = {})
|
116
|
-
|
115
|
+
submit Reserve.new(options.merge(
|
117
116
|
:transaction_amount => {:value => value, :currency_code => currency},
|
118
117
|
:sender_token_id => sender_token_id,
|
119
118
|
:caller_reference => caller_reference
|
120
|
-
))
|
119
|
+
))
|
121
120
|
end
|
122
121
|
|
123
122
|
# Refunds a transaction. By default it will refund the entire transaction, but you can
|
@@ -127,7 +126,7 @@ module AmazonFlexPay
|
|
127
126
|
#
|
128
127
|
# See http://docs.amazonwebservices.com/AmazonFPS/latest/FPSAdvancedGuide/Refund.html
|
129
128
|
def refund(transaction_id, caller_reference, options = {})
|
130
|
-
|
129
|
+
submit Refund.new(options.merge(:transaction_id => transaction_id, :caller_reference => caller_reference))
|
131
130
|
end
|
132
131
|
|
133
132
|
# If you have a Reserve transaction, use this to Settle (capture) it.
|
@@ -136,7 +135,7 @@ module AmazonFlexPay
|
|
136
135
|
#
|
137
136
|
# See http://docs.amazonwebservices.com/AmazonFPS/latest/FPSAdvancedGuide/Settle.html
|
138
137
|
def settle(transaction_id, options = {})
|
139
|
-
|
138
|
+
submit Settle.new(options.merge(:reserve_transaction_id => transaction_id))
|
140
139
|
end
|
141
140
|
|
142
141
|
# This is how you verify IPNs and pipeline responses.
|
@@ -154,7 +153,35 @@ module AmazonFlexPay
|
|
154
153
|
#
|
155
154
|
# Please use <tt>verify_request</tt> instead to make sure the URL and params remain properly formatted.
|
156
155
|
def verify_signature(url, params)
|
157
|
-
|
156
|
+
submit VerifySignature.new(:url_end_point => url, :http_parameters => params)
|
157
|
+
end
|
158
|
+
|
159
|
+
protected
|
160
|
+
|
161
|
+
# This compiles an API request object into a URL, sends it to Amazon, and processes
|
162
|
+
# the response.
|
163
|
+
def submit(request)
|
164
|
+
url = request.to_url
|
165
|
+
ActiveSupport::Notifications.instrument("amazon_flex_pay.api", :action => request.action_name, :request => url) do |payload|
|
166
|
+
begin
|
167
|
+
http = RestClient.get(url)
|
168
|
+
|
169
|
+
payload[:response] = http.body
|
170
|
+
payload[:code] = http.code
|
171
|
+
|
172
|
+
response = request.class::Response.from_xml(http.body)
|
173
|
+
response.request = request
|
174
|
+
response
|
175
|
+
|
176
|
+
rescue RestClient::BadRequest, RestClient::Unauthorized, RestClient::Forbidden => e
|
177
|
+
payload[:response] = e.http_body
|
178
|
+
payload[:code] = e.http_code
|
179
|
+
|
180
|
+
er = AmazonFlexPay::API::BaseRequest::ErrorResponse.from_xml(e.response.body)
|
181
|
+
klass = AmazonFlexPay::API.const_get(er.errors.first.code)
|
182
|
+
raise klass.new(er.errors.first.code, er.errors.first.message, er.request_id, request)
|
183
|
+
end
|
184
|
+
end
|
158
185
|
end
|
159
186
|
end
|
160
187
|
end
|
@@ -1,45 +1,30 @@
|
|
1
1
|
module AmazonFlexPay::API #:nodoc:
|
2
2
|
class BaseRequest < AmazonFlexPay::Model
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
url = AmazonFlexPay.api_endpoint + '?' + AmazonFlexPay.query_string(self.to_params)
|
7
|
-
ActiveSupport::Notifications.instrument("amazon_flex_pay.api", :action => action_name, :request => url) do |payload|
|
8
|
-
begin
|
9
|
-
http = RestClient.get(url)
|
10
|
-
|
11
|
-
payload[:response] = http.body
|
12
|
-
payload[:code] = http.code
|
13
|
-
|
14
|
-
response = self.class::Response.from_xml(http.body)
|
15
|
-
response.request = self
|
16
|
-
response
|
17
|
-
|
18
|
-
rescue RestClient::BadRequest, RestClient::Unauthorized, RestClient::Forbidden => e
|
19
|
-
payload[:response] = e.http_body
|
20
|
-
payload[:code] = e.http_code
|
3
|
+
def to_url
|
4
|
+
AmazonFlexPay.api_endpoint + '?' + self.to_param
|
5
|
+
end
|
21
6
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
7
|
+
def to_param
|
8
|
+
params = to_hash.merge(
|
9
|
+
'AWSAccessKeyId' => AmazonFlexPay.access_key,
|
10
|
+
'Timestamp' => format_value(Time.now),
|
11
|
+
'SignatureVersion' => 2,
|
12
|
+
'SignatureMethod' => 'HmacSHA256'
|
13
|
+
)
|
14
|
+
params['Signature'] = AmazonFlexPay.sign(AmazonFlexPay.api_endpoint, params)
|
15
|
+
AmazonFlexPay::Util.query_string(params)
|
27
16
|
end
|
28
17
|
|
29
18
|
# Converts the API request object into parameters and signs them.
|
30
|
-
def
|
31
|
-
|
19
|
+
def to_hash
|
20
|
+
super.merge(
|
32
21
|
'Action' => action_name,
|
33
|
-
'
|
34
|
-
'Version' => AmazonFlexPay::API_VERSION,
|
35
|
-
'Timestamp' => format_value(Time.now)
|
22
|
+
'Version' => AmazonFlexPay::API_VERSION
|
36
23
|
)
|
24
|
+
end
|
37
25
|
|
38
|
-
|
39
|
-
|
40
|
-
params['Signature'] = AmazonFlexPay.signature(AmazonFlexPay.api_endpoint, params)
|
41
|
-
|
42
|
-
params
|
26
|
+
def action_name #:nodoc:
|
27
|
+
self.class.to_s.split('::').last
|
43
28
|
end
|
44
29
|
|
45
30
|
class BaseResponse < AmazonFlexPay::Model
|
@@ -77,12 +62,5 @@ module AmazonFlexPay::API #:nodoc:
|
|
77
62
|
attribute :message
|
78
63
|
end
|
79
64
|
end
|
80
|
-
|
81
|
-
|
82
|
-
protected
|
83
|
-
|
84
|
-
def action_name #:nodoc:
|
85
|
-
self.class.to_s.split('::').last
|
86
|
-
end
|
87
65
|
end
|
88
66
|
end
|
@@ -1,15 +1,15 @@
|
|
1
|
-
|
2
|
-
Dir[File.dirname(__FILE__) + '/pipelines/*'].each do |p|
|
1
|
+
require_relative 'pipelines/base'
|
2
|
+
Dir[File.dirname(__FILE__) + '/pipelines/*'].each do |p| require_relative "pipelines/#{File.basename(p)}" end
|
3
3
|
|
4
4
|
module AmazonFlexPay
|
5
|
-
|
5
|
+
module Pipelines
|
6
6
|
# Creates a pipeline that may be used to change the payment method of a token.
|
7
7
|
#
|
8
8
|
# Note that this does not allow changing a token's limits or recipients or really anything but the method.
|
9
9
|
#
|
10
10
|
# See http://docs.amazonwebservices.com/AmazonFPS/latest/FPSAdvancedGuide/EditTokenPipeline.html
|
11
|
-
def edit_token_pipeline(caller_reference, options = {})
|
12
|
-
|
11
|
+
def edit_token_pipeline(caller_reference, return_url, options = {})
|
12
|
+
cbui EditToken.new(options.merge(:caller_reference => caller_reference, :return_url => return_url))
|
13
13
|
end
|
14
14
|
|
15
15
|
# Creates a pipeline that will authorize you to send money _from_ the user multiple times.
|
@@ -18,15 +18,15 @@ module AmazonFlexPay
|
|
18
18
|
# you only plan to collect from the token once.
|
19
19
|
#
|
20
20
|
# See http://docs.amazonwebservices.com/AmazonFPS/latest/FPSAdvancedGuide/MultiUsePipeline.html
|
21
|
-
def multi_use_pipeline(caller_reference, options = {})
|
22
|
-
|
21
|
+
def multi_use_pipeline(caller_reference, return_url, options = {})
|
22
|
+
cbui MultiUse.new(options.merge(:caller_reference => caller_reference, :return_url => return_url))
|
23
23
|
end
|
24
24
|
|
25
25
|
# Creates a pipeline that will authorize you to send money _to_ the user.
|
26
26
|
#
|
27
27
|
# See http://docs.amazonwebservices.com/AmazonFPS/latest/FPSAdvancedGuide/CBUIapiMerchant.html
|
28
|
-
def recipient_pipeline(caller_reference, options = {})
|
29
|
-
|
28
|
+
def recipient_pipeline(caller_reference, return_url, options = {})
|
29
|
+
cbui Recipient.new(options.merge(:caller_reference => caller_reference, :return_url => return_url))
|
30
30
|
end
|
31
31
|
|
32
32
|
# Creates a pipeline that will authorize you to send money _from_ the user one time.
|
@@ -34,8 +34,14 @@ module AmazonFlexPay
|
|
34
34
|
# Note that if this payment fails, you must create another pipeline to get another token.
|
35
35
|
#
|
36
36
|
# See http://docs.amazonwebservices.com/AmazonFPS/2010-08-28/FPSBasicGuide/SingleUsePipeline.html
|
37
|
-
def single_use_pipeline(caller_reference, options = {})
|
38
|
-
|
37
|
+
def single_use_pipeline(caller_reference, return_url, options = {})
|
38
|
+
cbui SingleUse.new(options.merge(:caller_reference => caller_reference, :return_url => return_url))
|
39
|
+
end
|
40
|
+
|
41
|
+
protected
|
42
|
+
|
43
|
+
def cbui(pipeline)
|
44
|
+
pipeline.to_url
|
39
45
|
end
|
40
46
|
end
|
41
47
|
end
|
@@ -1,29 +1,32 @@
|
|
1
1
|
module AmazonFlexPay::Pipelines #:nodoc:
|
2
2
|
class Base < AmazonFlexPay::Model
|
3
|
+
attribute :'returnURL' # required
|
3
4
|
attribute :caller_reference # required
|
4
5
|
attribute :cobranding_style
|
5
6
|
attribute :cobranding_url
|
6
7
|
attribute :website_description
|
7
8
|
|
8
9
|
# Returns a full redirectable URL for this pipeline.
|
9
|
-
def
|
10
|
-
AmazonFlexPay.pipeline_endpoint + '?' +
|
10
|
+
def to_url
|
11
|
+
AmazonFlexPay.pipeline_endpoint + '?' + self.to_param
|
11
12
|
end
|
12
13
|
|
13
14
|
# Converts the Pipeline object into parameters and signs them.
|
14
|
-
def
|
15
|
-
params =
|
16
|
-
'pipelineName' => pipeline_name,
|
15
|
+
def to_param
|
16
|
+
params = to_hash.merge(
|
17
17
|
'callerKey' => AmazonFlexPay.access_key,
|
18
|
-
'
|
19
|
-
'
|
18
|
+
'signatureVersion' => 2,
|
19
|
+
'signatureMethod' => 'HmacSHA256'
|
20
20
|
)
|
21
|
+
params['signature'] = AmazonFlexPay.sign(AmazonFlexPay.pipeline_endpoint, params)
|
22
|
+
AmazonFlexPay::Util.query_string(params)
|
23
|
+
end
|
21
24
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
25
|
+
def to_hash
|
26
|
+
super().merge(
|
27
|
+
'pipelineName' => pipeline_name,
|
28
|
+
'version' => AmazonFlexPay::PIPELINE_VERSION
|
29
|
+
)
|
27
30
|
end
|
28
31
|
|
29
32
|
protected
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module AmazonFlexPay
|
2
|
+
# Generates a signature for the given URL and parameters.
|
3
|
+
class Signature
|
4
|
+
def initialize(secret_key, endpoint, params)
|
5
|
+
@secret_key, @endpoint, @params = secret_key, endpoint, params
|
6
|
+
end
|
7
|
+
|
8
|
+
def generate
|
9
|
+
Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::SHA256.new, @secret_key, signable)).strip
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def signable
|
15
|
+
uri = URI.parse(@endpoint)
|
16
|
+
[
|
17
|
+
'GET',
|
18
|
+
uri.host,
|
19
|
+
uri.path,
|
20
|
+
AmazonFlexPay::Util.query_string(@params)
|
21
|
+
].join("\n")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|