tylerhunt-remit 0.0.1 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/LICENSE +1 -1
  2. data/README.markdown +91 -0
  3. data/lib/remit.rb +51 -41
  4. data/lib/remit/common.rb +16 -16
  5. data/lib/remit/data_types.rb +59 -2
  6. data/lib/remit/error_codes.rb +118 -0
  7. data/lib/remit/get_pipeline.rb +65 -7
  8. data/lib/remit/ipn_request.rb +49 -0
  9. data/lib/remit/{cancel_token.rb → operations/cancel_token.rb} +1 -1
  10. data/lib/remit/{discard_results.rb → operations/discard_results.rb} +1 -1
  11. data/lib/remit/{fund_prepaid.rb → operations/fund_prepaid.rb} +6 -6
  12. data/lib/remit/{get_account_activity.rb → operations/get_account_activity.rb} +1 -1
  13. data/lib/remit/{get_account_balance.rb → operations/get_account_balance.rb} +0 -0
  14. data/lib/remit/{get_all_credit_instruments.rb → operations/get_all_credit_instruments.rb} +0 -0
  15. data/lib/remit/{get_all_prepaid_instruments.rb → operations/get_all_prepaid_instruments.rb} +0 -0
  16. data/lib/remit/{get_debt_balance.rb → operations/get_debt_balance.rb} +1 -1
  17. data/lib/remit/{get_outstanding_debt_balance.rb → operations/get_outstanding_debt_balance.rb} +0 -0
  18. data/lib/remit/{get_payment_instruction.rb → operations/get_payment_instruction.rb} +1 -1
  19. data/lib/remit/{get_prepaid_balance.rb → operations/get_prepaid_balance.rb} +1 -1
  20. data/lib/remit/{get_results.rb → operations/get_results.rb} +4 -3
  21. data/lib/remit/{get_token_by_caller.rb → operations/get_token_by_caller.rb} +0 -0
  22. data/lib/remit/{get_token_usage.rb → operations/get_token_usage.rb} +1 -1
  23. data/lib/remit/{get_tokens.rb → operations/get_tokens.rb} +0 -0
  24. data/lib/remit/{get_total_prepaid_liability.rb → operations/get_total_prepaid_liability.rb} +0 -0
  25. data/lib/remit/{get_transaction.rb → operations/get_transaction.rb} +1 -1
  26. data/lib/remit/{install_payment_instruction.rb → operations/install_payment_instruction.rb} +3 -3
  27. data/lib/remit/operations/pay.rb +35 -0
  28. data/lib/remit/{refund.rb → operations/refund.rb} +6 -8
  29. data/lib/remit/{reserve.rb → operations/reserve.rb} +6 -6
  30. data/lib/remit/{retry_transaction.rb → operations/retry_transaction.rb} +1 -1
  31. data/lib/remit/{settle.rb → operations/settle.rb} +2 -2
  32. data/lib/remit/{settle_debt.rb → operations/settle_debt.rb} +6 -6
  33. data/lib/remit/{subscribe_for_caller_notification.rb → operations/subscribe_for_caller_notification.rb} +2 -2
  34. data/lib/remit/{unsubscribe_for_caller_notification.rb → operations/unsubscribe_for_caller_notification.rb} +1 -1
  35. data/lib/remit/{write_off_debt.rb → operations/write_off_debt.rb} +4 -4
  36. data/lib/remit/pipeline_response.rb +52 -0
  37. data/spec/{get_account_activity_spec.rb → integrations/get_account_activity_spec.rb} +4 -4
  38. data/spec/{get_tokens_spec.rb → integrations/get_tokens_spec.rb} +3 -3
  39. data/spec/integrations/integrations_helper.rb +8 -0
  40. data/spec/spec_helper.rb +20 -10
  41. data/spec/{get_pipeline_spec.rb → units/get_pipeline_spec.rb} +83 -24
  42. data/spec/units/get_results_spec.rb +49 -0
  43. data/spec/units/ipn_request_spec.rb +32 -0
  44. data/spec/units/pay_spec.rb +133 -0
  45. data/spec/units/units_helper.rb +4 -0
  46. metadata +49 -45
  47. data/README +0 -38
  48. data/lib/remit/pay.rb +0 -34
@@ -33,12 +33,12 @@ module Remit
33
33
  attr_reader :api
34
34
 
35
35
  parameter :pipeline_name
36
- parameter :return_URL
36
+ parameter :return_url
37
37
  parameter :caller_key
38
+ parameter :version
38
39
 
39
- def initialize(api, pipeline, options)
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(@pipeline)
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.pipeline, @api.secret_key, query).to_s
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, @pipeline, {
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
@@ -4,7 +4,7 @@ module Remit
4
4
  module CancelToken
5
5
  class Request < Remit::Request
6
6
  action :CancelToken
7
- parameter :token_id
7
+ parameter :token_id, :required => true
8
8
  parameter :reason_text
9
9
  end
10
10
 
@@ -4,7 +4,7 @@ module Remit
4
4
  module DiscardResults
5
5
  class Request < Remit::Request
6
6
  action :DiscardResults
7
- parameter :transaction_ids
7
+ parameter :transaction_ids, :required => true
8
8
  end
9
9
 
10
10
  class Response < Remit::Response
@@ -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
 
@@ -4,7 +4,7 @@ module Remit
4
4
  module GetAccountActivity
5
5
  class Request < Remit::Request
6
6
  action :GetAccountActivity
7
- parameter :start_date
7
+ parameter :start_date, :required => true
8
8
  parameter :end_date
9
9
  parameter :max_batch_size
10
10
  parameter :sort_order_by_date
@@ -4,7 +4,7 @@ module Remit
4
4
  module GetDebtBalance
5
5
  class Request < Remit::Request
6
6
  action :GetDebtBalance
7
- parameter :credit_instrument_id
7
+ parameter :credit_instrument_id, :required => true
8
8
  end
9
9
 
10
10
  class Response < Remit::Response
@@ -4,7 +4,7 @@ module Remit
4
4
  module GetPaymentInstruction
5
5
  class Request < Remit::Request
6
6
  action :GetPaymentInstruction
7
- parameter :token_id
7
+ parameter :token_id, :required => true
8
8
  end
9
9
 
10
10
  class Response < Remit::Response
@@ -4,7 +4,7 @@ module Remit
4
4
  module GetPrepaidBalance
5
5
  class Request < Remit::Request
6
6
  action :GetPrepaidBalance
7
- parameter :prepaid_instrument_id
7
+ parameter :prepaid_instrument_id, :required => true
8
8
  end
9
9
 
10
10
  class Response < Remit::Response
@@ -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, :type => TransactionResults
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)
@@ -4,7 +4,7 @@ module Remit
4
4
  module GetTokenUsage
5
5
  class Request < Remit::Request
6
6
  action :GetTokenUsage
7
- parameter :token_id
7
+ parameter :token_id, :required => true
8
8
  end
9
9
 
10
10
  class Response < Remit::Response
@@ -4,7 +4,7 @@ module Remit
4
4
  module GetTransaction
5
5
  class Request < Remit::Request
6
6
  action :GetTransaction
7
- parameter :transaction_id
7
+ parameter :transaction_id, :required => true
8
8
  end
9
9
 
10
10
  class Response < Remit::Response
@@ -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,7 +4,7 @@ module Remit
4
4
  module RetryTransaction
5
5
  class Request < Remit::Request
6
6
  action :RetryTransaction
7
- parameter :original_transaction_id
7
+ parameter :original_transaction_id, :required => true
8
8
  end
9
9
 
10
10
  class Response < Remit::Response
@@ -4,8 +4,8 @@ module Remit
4
4
  module Settle
5
5
  class Request < Remit::Request
6
6
  action :Settle
7
- parameter :settlement_amount
8
- parameter :transaction_id
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