tylerhunt-remit 0.0.1 → 0.0.4
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/LICENSE +1 -1
- data/README.markdown +91 -0
- data/lib/remit.rb +51 -41
- data/lib/remit/common.rb +16 -16
- data/lib/remit/data_types.rb +59 -2
- data/lib/remit/error_codes.rb +118 -0
- data/lib/remit/get_pipeline.rb +65 -7
- data/lib/remit/ipn_request.rb +49 -0
- data/lib/remit/{cancel_token.rb → operations/cancel_token.rb} +1 -1
- data/lib/remit/{discard_results.rb → operations/discard_results.rb} +1 -1
- data/lib/remit/{fund_prepaid.rb → operations/fund_prepaid.rb} +6 -6
- data/lib/remit/{get_account_activity.rb → operations/get_account_activity.rb} +1 -1
- data/lib/remit/{get_account_balance.rb → operations/get_account_balance.rb} +0 -0
- data/lib/remit/{get_all_credit_instruments.rb → operations/get_all_credit_instruments.rb} +0 -0
- data/lib/remit/{get_all_prepaid_instruments.rb → operations/get_all_prepaid_instruments.rb} +0 -0
- data/lib/remit/{get_debt_balance.rb → operations/get_debt_balance.rb} +1 -1
- data/lib/remit/{get_outstanding_debt_balance.rb → operations/get_outstanding_debt_balance.rb} +0 -0
- data/lib/remit/{get_payment_instruction.rb → operations/get_payment_instruction.rb} +1 -1
- data/lib/remit/{get_prepaid_balance.rb → operations/get_prepaid_balance.rb} +1 -1
- data/lib/remit/{get_results.rb → operations/get_results.rb} +4 -3
- data/lib/remit/{get_token_by_caller.rb → operations/get_token_by_caller.rb} +0 -0
- data/lib/remit/{get_token_usage.rb → operations/get_token_usage.rb} +1 -1
- data/lib/remit/{get_tokens.rb → operations/get_tokens.rb} +0 -0
- data/lib/remit/{get_total_prepaid_liability.rb → operations/get_total_prepaid_liability.rb} +0 -0
- data/lib/remit/{get_transaction.rb → operations/get_transaction.rb} +1 -1
- data/lib/remit/{install_payment_instruction.rb → operations/install_payment_instruction.rb} +3 -3
- data/lib/remit/operations/pay.rb +35 -0
- data/lib/remit/{refund.rb → operations/refund.rb} +6 -8
- data/lib/remit/{reserve.rb → operations/reserve.rb} +6 -6
- data/lib/remit/{retry_transaction.rb → operations/retry_transaction.rb} +1 -1
- data/lib/remit/{settle.rb → operations/settle.rb} +2 -2
- data/lib/remit/{settle_debt.rb → operations/settle_debt.rb} +6 -6
- data/lib/remit/{subscribe_for_caller_notification.rb → operations/subscribe_for_caller_notification.rb} +2 -2
- data/lib/remit/{unsubscribe_for_caller_notification.rb → operations/unsubscribe_for_caller_notification.rb} +1 -1
- data/lib/remit/{write_off_debt.rb → operations/write_off_debt.rb} +4 -4
- data/lib/remit/pipeline_response.rb +52 -0
- data/spec/{get_account_activity_spec.rb → integrations/get_account_activity_spec.rb} +4 -4
- data/spec/{get_tokens_spec.rb → integrations/get_tokens_spec.rb} +3 -3
- data/spec/integrations/integrations_helper.rb +8 -0
- data/spec/spec_helper.rb +20 -10
- data/spec/{get_pipeline_spec.rb → units/get_pipeline_spec.rb} +83 -24
- data/spec/units/get_results_spec.rb +49 -0
- data/spec/units/ipn_request_spec.rb +32 -0
- data/spec/units/pay_spec.rb +133 -0
- data/spec/units/units_helper.rb +4 -0
- metadata +49 -45
- data/README +0 -38
- data/lib/remit/pay.rb +0 -34
data/lib/remit/get_pipeline.rb
CHANGED
@@ -33,12 +33,12 @@ module Remit
|
|
33
33
|
attr_reader :api
|
34
34
|
|
35
35
|
parameter :pipeline_name
|
36
|
-
parameter :
|
36
|
+
parameter :return_url
|
37
37
|
parameter :caller_key
|
38
|
+
parameter :version
|
38
39
|
|
39
|
-
def initialize(api,
|
40
|
+
def initialize(api, options)
|
40
41
|
@api = api
|
41
|
-
@pipeline = pipeline
|
42
42
|
|
43
43
|
options.each do |k,v|
|
44
44
|
self.send("#{k}=", v)
|
@@ -46,7 +46,7 @@ module Remit
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def url
|
49
|
-
uri = URI.parse(@
|
49
|
+
uri = URI.parse(@api.pipeline_url)
|
50
50
|
|
51
51
|
query = {}
|
52
52
|
self.class.parameters.each do |p|
|
@@ -61,7 +61,7 @@ module Remit
|
|
61
61
|
# Remove any unused optional parameters
|
62
62
|
query.reject! { |key, value| value.nil? }
|
63
63
|
|
64
|
-
uri.query = SignedQuery.new(@api.
|
64
|
+
uri.query = SignedQuery.new(@api.pipeline_url, @api.secret_key, query).to_s
|
65
65
|
uri.to_s
|
66
66
|
end
|
67
67
|
end
|
@@ -72,6 +72,48 @@ module Remit
|
|
72
72
|
parameter :payment_method
|
73
73
|
parameter :transaction_amount
|
74
74
|
parameter :recipient_token
|
75
|
+
|
76
|
+
def pipeline_name
|
77
|
+
Remit::PipelineName::SINGLE_USE
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
class MultiUsePipeline < Pipeline
|
82
|
+
parameter :caller_reference
|
83
|
+
parameter :payment_reason
|
84
|
+
parameter :recipient_token_list
|
85
|
+
parameter :amount_type
|
86
|
+
parameter :transaction_amount
|
87
|
+
parameter :validity_start
|
88
|
+
parameter :validity_expiry
|
89
|
+
parameter :payment_method
|
90
|
+
parameter :global_amount_limit
|
91
|
+
parameter :usage_limit_type_1
|
92
|
+
parameter :usage_limit_period_1
|
93
|
+
parameter :usage_limit_value_1
|
94
|
+
parameter :usage_limit_type_2
|
95
|
+
parameter :usage_limit_period_2
|
96
|
+
parameter :usage_limit_value_2
|
97
|
+
parameter :is_recipient_cobranding
|
98
|
+
|
99
|
+
def pipeline_name
|
100
|
+
Remit::PipelineName::MULTI_USE
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
class RecipientPipeline < Pipeline
|
105
|
+
parameter :caller_reference
|
106
|
+
parameter :validity_start # Time or seconds from Epoch
|
107
|
+
parameter :validity_expiry # Time or seconds from Epoch
|
108
|
+
parameter :payment_method
|
109
|
+
parameter :recipient_pays_fee
|
110
|
+
parameter :caller_reference_refund
|
111
|
+
parameter :max_variable_fee
|
112
|
+
parameter :max_fixed_fee
|
113
|
+
|
114
|
+
def pipeline_name
|
115
|
+
Remit::PipelineName::RECIPIENT
|
116
|
+
end
|
75
117
|
end
|
76
118
|
|
77
119
|
class RecurringUsePipeline < Pipeline
|
@@ -82,7 +124,11 @@ module Remit
|
|
82
124
|
parameter :validity_start # Time or seconds from Epoch
|
83
125
|
parameter :validity_expiry # Time or seconds from Epoch
|
84
126
|
parameter :payment_method
|
85
|
-
parameter :recurring_period
|
127
|
+
parameter :recurring_period
|
128
|
+
|
129
|
+
def pipeline_name
|
130
|
+
Remit::PipelineName::RECURRING
|
131
|
+
end
|
86
132
|
end
|
87
133
|
|
88
134
|
class PostpaidPipeline < Pipeline
|
@@ -100,11 +146,23 @@ module Remit
|
|
100
146
|
parameter :usage_limit_type2
|
101
147
|
parameter :usage_limit_period2
|
102
148
|
parameter :usage_limit_value2
|
149
|
+
|
150
|
+
def pipeline_name
|
151
|
+
Remit::PipelineName::SETUP_POSTPAID
|
152
|
+
end
|
103
153
|
end
|
104
154
|
|
105
155
|
def get_single_use_pipeline(options)
|
106
156
|
self.get_pipeline(SingleUsePipeline, options)
|
107
157
|
end
|
158
|
+
|
159
|
+
def get_multi_use_pipeline(options)
|
160
|
+
self.get_pipeline(MultiUsePipeline, options)
|
161
|
+
end
|
162
|
+
|
163
|
+
def get_recipient_pipeline(options)
|
164
|
+
self.get_pipeline(RecipientPipeline, options)
|
165
|
+
end
|
108
166
|
|
109
167
|
def get_recurring_use_pipeline(options)
|
110
168
|
self.get_pipeline(RecurringUsePipeline, options)
|
@@ -115,7 +173,7 @@ module Remit
|
|
115
173
|
end
|
116
174
|
|
117
175
|
def get_pipeline(pipeline_subclass, options)
|
118
|
-
pipeline = pipeline_subclass.new(self,
|
176
|
+
pipeline = pipeline_subclass.new(self, {
|
119
177
|
:caller_key => @access_key
|
120
178
|
}.merge(options))
|
121
179
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'base64'
|
2
|
+
require 'openssl/digest'
|
3
|
+
|
4
|
+
module Remit
|
5
|
+
# Encapsulates the logic for IPN request validation and attribute retrieval.
|
6
|
+
#
|
7
|
+
# Note: if your responses from Amazon are not validating, please pass the
|
8
|
+
# :version parameter to your original CBUI request.
|
9
|
+
class IpnRequest
|
10
|
+
# Signature key name used by AmazonFPS IPNs
|
11
|
+
SIGNATURE_KEY = 'signature'
|
12
|
+
|
13
|
+
# +params+ should be your controllers request parameters.
|
14
|
+
def initialize(params, secret_key)
|
15
|
+
raise ArgumentError, "Expected the request params hash, received: #{params.inspect}" unless params.kind_of?(Hash)
|
16
|
+
@params = strip_keys_from(params, 'action', 'controller')
|
17
|
+
@supplied_signature = @params.delete(SIGNATURE_KEY)
|
18
|
+
@secret_key = secret_key
|
19
|
+
end
|
20
|
+
|
21
|
+
def valid?
|
22
|
+
return false unless @supplied_signature
|
23
|
+
generate_signature_for(@params) == @supplied_signature
|
24
|
+
end
|
25
|
+
|
26
|
+
def method_missing(method, *args) #:nodoc:
|
27
|
+
if @params.has_key?(method.to_s)
|
28
|
+
@params[method.to_s]
|
29
|
+
else
|
30
|
+
super(method, *args)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def generate_signature_for(params)
|
35
|
+
query = params.sort_by { |k,v| k.downcase }
|
36
|
+
digest = OpenSSL::Digest::Digest.new('sha1')
|
37
|
+
hmac = OpenSSL::HMAC.digest(digest, @secret_key, query.to_s)
|
38
|
+
encoded = Base64.encode64(hmac).chomp
|
39
|
+
end
|
40
|
+
private :generate_signature_for
|
41
|
+
|
42
|
+
def strip_keys_from(params, *ignore_keys)
|
43
|
+
parsed = params.dup
|
44
|
+
ignore_keys.each { |key| parsed.delete(key) }
|
45
|
+
parsed
|
46
|
+
end
|
47
|
+
private :strip_keys_from
|
48
|
+
end
|
49
|
+
end
|
@@ -6,17 +6,17 @@ module Remit
|
|
6
6
|
action :FundPrepaid
|
7
7
|
parameter :transaction_ids
|
8
8
|
parameter :caller_description
|
9
|
-
parameter :caller_reference
|
10
|
-
parameter :caller_token_id
|
11
|
-
parameter :charge_fee_to
|
12
|
-
parameter :funding_amount
|
9
|
+
parameter :caller_reference, :required => true
|
10
|
+
parameter :caller_token_id, :required => true
|
11
|
+
parameter :charge_fee_to, :required => true
|
12
|
+
parameter :funding_amount, :type => Remit::RequestTypes::Amount, :required => true
|
13
13
|
parameter :meta_data
|
14
|
-
parameter :prepaid_instrument_id
|
14
|
+
parameter :prepaid_instrument_id, :required => true
|
15
15
|
parameter :recipient_description
|
16
16
|
parameter :recipient_reference
|
17
17
|
parameter :sender_description
|
18
18
|
parameter :sender_reference
|
19
|
-
parameter :sender_token_id
|
19
|
+
parameter :sender_token_id, :required => true
|
20
20
|
parameter :transaction_date
|
21
21
|
end
|
22
22
|
|
File without changes
|
File without changes
|
File without changes
|
data/lib/remit/{get_outstanding_debt_balance.rb → operations/get_outstanding_debt_balance.rb}
RENAMED
File without changes
|
@@ -11,12 +11,13 @@ module Remit
|
|
11
11
|
class Response < Remit::Response
|
12
12
|
class TransactionResults < Remit::BaseResponse
|
13
13
|
parameter :transaction_id
|
14
|
-
parameter :operation_type
|
14
|
+
parameter :operation_type, :element => :operation
|
15
15
|
parameter :caller_reference
|
16
|
-
parameter :transaction_status
|
16
|
+
parameter :transaction_status, :element => :status
|
17
17
|
end
|
18
18
|
|
19
|
-
parameter :transaction_results, :
|
19
|
+
parameter :transaction_results, :collection => TransactionResults
|
20
|
+
parameter :number_pending, :type => :integer
|
20
21
|
end
|
21
22
|
|
22
23
|
def get_results(request = Request.new)
|
File without changes
|
File without changes
|
File without changes
|
@@ -4,10 +4,10 @@ module Remit
|
|
4
4
|
module InstallPaymentInstruction
|
5
5
|
class Request < Remit::Request
|
6
6
|
action :InstallPaymentInstruction
|
7
|
-
parameter :payment_instruction
|
8
|
-
parameter :caller_reference
|
7
|
+
parameter :payment_instruction, :required => true
|
8
|
+
parameter :caller_reference, :required => true
|
9
9
|
parameter :token_friendly_name
|
10
|
-
parameter :token_type
|
10
|
+
parameter :token_type, :required => true
|
11
11
|
parameter :payment_reason
|
12
12
|
end
|
13
13
|
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'remit/common'
|
2
|
+
|
3
|
+
module Remit
|
4
|
+
module Pay
|
5
|
+
class Request < Remit::Request
|
6
|
+
action :Pay
|
7
|
+
parameter :caller_description
|
8
|
+
parameter :caller_reference, :required => true
|
9
|
+
parameter :caller_token_id, :required => true
|
10
|
+
parameter :charge_fee_to, :required => true
|
11
|
+
parameter :descriptor_policy, :type => Remit::RequestTypes::DescriptorPolicy
|
12
|
+
parameter :marketplace_fixed_fee, :type => Remit::RequestTypes::Amount
|
13
|
+
parameter :marketplace_variable_fee
|
14
|
+
parameter :meta_data
|
15
|
+
parameter :recipient_description
|
16
|
+
parameter :recipient_reference
|
17
|
+
parameter :recipient_token_id, :required => true
|
18
|
+
parameter :sender_description
|
19
|
+
parameter :sender_reference
|
20
|
+
parameter :sender_token_id, :required => true
|
21
|
+
parameter :temporary_decline_policy, :type => Remit::RequestTypes::TemporaryDeclinePolicy
|
22
|
+
parameter :transaction_amount, :type => Remit::RequestTypes::Amount, :required => true
|
23
|
+
parameter :transaction_date
|
24
|
+
end
|
25
|
+
|
26
|
+
class Response < Remit::Response
|
27
|
+
parser :rexml
|
28
|
+
parameter :transaction_response, :namespace => 'ns3', :type => TransactionResponse
|
29
|
+
end
|
30
|
+
|
31
|
+
def pay(request = Request.new)
|
32
|
+
call(request, Response)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -5,26 +5,24 @@ module Remit
|
|
5
5
|
class Request < Remit::Request
|
6
6
|
action :Refund
|
7
7
|
parameter :caller_description
|
8
|
-
parameter :caller_reference
|
9
|
-
parameter :caller_token_id
|
10
|
-
parameter :charge_fee_to
|
8
|
+
parameter :caller_reference, :required => true
|
9
|
+
parameter :caller_token_id, :required => true
|
10
|
+
parameter :charge_fee_to, :required => true
|
11
11
|
parameter :meta_data
|
12
12
|
parameter :refund_amount, :type => Remit::RequestTypes::Amount
|
13
13
|
parameter :refund_recipient_description
|
14
14
|
parameter :refund_recipient_reference
|
15
15
|
parameter :refund_sender_description
|
16
16
|
parameter :refund_sender_reference
|
17
|
-
parameter :refund_sender_token_id
|
17
|
+
parameter :refund_sender_token_id, :required => true
|
18
18
|
parameter :transaction_date
|
19
|
-
parameter :transaction_id
|
20
|
-
|
21
|
-
|
19
|
+
parameter :transaction_id, :required => true
|
20
|
+
|
22
21
|
# The RefundAmount parameter has multiple components. It is specified on the query string like
|
23
22
|
# so: RefundAmount.Amount=XXX&RefundAmount.CurrencyCode=YYY
|
24
23
|
def convert_complex_key(key, parameter)
|
25
24
|
"#{convert_key(key).to_s}.#{convert_key(parameter).to_s}"
|
26
25
|
end
|
27
|
-
|
28
26
|
end
|
29
27
|
|
30
28
|
class Response < Remit::Response
|
@@ -4,15 +4,15 @@ module Remit
|
|
4
4
|
module Reserve
|
5
5
|
class Request < Remit::Request
|
6
6
|
action :Reserve
|
7
|
-
parameter :recipient_token_id
|
8
|
-
parameter :sender_token_id
|
9
|
-
parameter :caller_token_id
|
7
|
+
parameter :recipient_token_id, :required => true
|
8
|
+
parameter :sender_token_id, :required => true
|
9
|
+
parameter :caller_token_id, :required => true
|
10
10
|
parameter :sender_reference
|
11
11
|
parameter :recipient_reference
|
12
|
-
parameter :caller_reference
|
12
|
+
parameter :caller_reference, :required => true
|
13
13
|
parameter :transaction_date
|
14
|
-
parameter :transaction_amount
|
15
|
-
parameter :charge_fee_to
|
14
|
+
parameter :transaction_amount, :type => Remit::RequestTypes::Amount, :required => true
|
15
|
+
parameter :charge_fee_to, :required => true
|
16
16
|
parameter :sender_description
|
17
17
|
parameter :recipient_description
|
18
18
|
parameter :caller_description
|
@@ -4,8 +4,8 @@ module Remit
|
|
4
4
|
module Settle
|
5
5
|
class Request < Remit::Request
|
6
6
|
action :Settle
|
7
|
-
parameter :
|
8
|
-
parameter :
|
7
|
+
parameter :reserve_transaction_id, :required => true
|
8
|
+
parameter :transaction_amount, :type => Remit::RequestTypes::Amount
|
9
9
|
parameter :transaction_date
|
10
10
|
end
|
11
11
|
|