NewMonarch-remit 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +20 -0
- data/README +79 -0
- data/lib/remit.rb +133 -0
- data/lib/remit/cancel_token.rb +18 -0
- data/lib/remit/common.rb +87 -0
- data/lib/remit/data_types.rb +164 -0
- data/lib/remit/discard_results.rb +18 -0
- data/lib/remit/error_codes.rb +116 -0
- data/lib/remit/fund_prepaid.rb +31 -0
- data/lib/remit/get_account_activity.rb +60 -0
- data/lib/remit/get_account_balance.rb +29 -0
- data/lib/remit/get_all_credit_instruments.rb +18 -0
- data/lib/remit/get_all_prepaid_instruments.rb +18 -0
- data/lib/remit/get_debt_balance.rb +23 -0
- data/lib/remit/get_outstanding_debt_balance.rb +22 -0
- data/lib/remit/get_payment_instruction.rb +21 -0
- data/lib/remit/get_pipeline.rb +181 -0
- data/lib/remit/get_prepaid_balance.rb +23 -0
- data/lib/remit/get_results.rb +27 -0
- data/lib/remit/get_token_by_caller.rb +19 -0
- data/lib/remit/get_token_usage.rb +18 -0
- data/lib/remit/get_tokens.rb +20 -0
- data/lib/remit/get_total_prepaid_liability.rb +22 -0
- data/lib/remit/get_transaction.rb +42 -0
- data/lib/remit/install_payment_instruction.rb +22 -0
- data/lib/remit/ipn_request.rb +56 -0
- data/lib/remit/pay.rb +35 -0
- data/lib/remit/pipeline_response.rb +62 -0
- data/lib/remit/refund.rb +38 -0
- data/lib/remit/reserve.rb +30 -0
- data/lib/remit/retry_transaction.rb +18 -0
- data/lib/remit/settle.rb +20 -0
- data/lib/remit/settle_debt.rb +30 -0
- data/lib/remit/subscribe_for_caller_notification.rb +18 -0
- data/lib/remit/unsubscribe_for_caller_notification.rb +17 -0
- data/lib/remit/write_off_debt.rb +28 -0
- data/spec/integrations/get_account_activity_spec.rb +36 -0
- data/spec/integrations/get_tokens_spec.rb +38 -0
- data/spec/integrations/integrations_helper.rb +8 -0
- data/spec/spec_helper.rb +40 -0
- data/spec/units/get_pipeline_spec.rb +165 -0
- data/spec/units/get_results_spec.rb +47 -0
- data/spec/units/ipn_request_spec.rb +34 -0
- data/spec/units/pay_spec.rb +70 -0
- data/spec/units/units_helper.rb +4 -0
- metadata +115 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'remit/common'
|
2
|
+
|
3
|
+
module Remit
|
4
|
+
module GetPrepaidBalance
|
5
|
+
class Request < Remit::Request
|
6
|
+
action :GetPrepaidBalance
|
7
|
+
parameter :prepaid_instrument_id
|
8
|
+
end
|
9
|
+
|
10
|
+
class Response < Remit::Response
|
11
|
+
class PrepaidBalance < Remit::BaseResponse
|
12
|
+
parameter :available_balance, :type => Amount
|
13
|
+
parameter :pending_in_balance, :type => Amount
|
14
|
+
end
|
15
|
+
|
16
|
+
parameter :prepaid_balance, :type => PrepaidBalance
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_prepaid_balance(request = Request.new)
|
20
|
+
call(request, Response)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'remit/common'
|
2
|
+
|
3
|
+
module Remit
|
4
|
+
module GetResults
|
5
|
+
class Request < Remit::Request
|
6
|
+
action :GetResults
|
7
|
+
parameter :operation
|
8
|
+
parameter :max_results_count
|
9
|
+
end
|
10
|
+
|
11
|
+
class Response < Remit::Response
|
12
|
+
class TransactionResults < Remit::BaseResponse
|
13
|
+
parameter :transaction_id
|
14
|
+
parameter :operation_type, :element => :operation
|
15
|
+
parameter :caller_reference
|
16
|
+
parameter :transaction_status, :element => :status
|
17
|
+
end
|
18
|
+
|
19
|
+
parameter :transaction_results, :collection => TransactionResults
|
20
|
+
parameter :number_pending, :type => :integer
|
21
|
+
end
|
22
|
+
|
23
|
+
def get_results(request = Request.new)
|
24
|
+
call(request, Response)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'remit/common'
|
2
|
+
|
3
|
+
module Remit
|
4
|
+
module GetTokenByCaller
|
5
|
+
class Request < Remit::Request
|
6
|
+
action :GetTokenByCaller
|
7
|
+
parameter :caller_reference
|
8
|
+
parameter :token_id
|
9
|
+
end
|
10
|
+
|
11
|
+
class Response < Remit::Response
|
12
|
+
parameter :token, :type => Token
|
13
|
+
end
|
14
|
+
|
15
|
+
def get_token_by_caller(request = Request.new)
|
16
|
+
call(request, Response)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'remit/common'
|
2
|
+
|
3
|
+
module Remit
|
4
|
+
module GetTokenUsage
|
5
|
+
class Request < Remit::Request
|
6
|
+
action :GetTokenUsage
|
7
|
+
parameter :token_id
|
8
|
+
end
|
9
|
+
|
10
|
+
class Response < Remit::Response
|
11
|
+
parameter :token_usage_limits, :type => TokenUsageLimit
|
12
|
+
end
|
13
|
+
|
14
|
+
def get_token_usage(request = Request.new)
|
15
|
+
call(request, Response)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'remit/common'
|
2
|
+
|
3
|
+
module Remit
|
4
|
+
module GetTokens
|
5
|
+
class Request < Remit::Request
|
6
|
+
action :GetTokens
|
7
|
+
parameter :caller_reference
|
8
|
+
parameter :token_friendly_name
|
9
|
+
parameter :token_status
|
10
|
+
end
|
11
|
+
|
12
|
+
class Response < Remit::Response
|
13
|
+
parameter :tokens, :collection => Token
|
14
|
+
end
|
15
|
+
|
16
|
+
def get_tokens(request = Request.new)
|
17
|
+
call(request, Response)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'remit/common'
|
2
|
+
|
3
|
+
module Remit
|
4
|
+
module GetTotalPrepaidLiability
|
5
|
+
class Request < Remit::Request
|
6
|
+
action :GetTotalPrepaidLiability
|
7
|
+
end
|
8
|
+
|
9
|
+
class Response < Remit::Response
|
10
|
+
class OutstandingPrepaidLiability < Remit::BaseResponse
|
11
|
+
parameter :outstanding_balance, :type => Amount
|
12
|
+
parameter :panding_in_balance, :type => Amount
|
13
|
+
end
|
14
|
+
|
15
|
+
parameter :outstanding_prepaid_liability, :type => OutstandingPrepaidLiability
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_total_prepaid_liability(request = Request.new)
|
19
|
+
call(request, Response)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'remit/common'
|
2
|
+
|
3
|
+
module Remit
|
4
|
+
module GetTransaction
|
5
|
+
class Request < Remit::Request
|
6
|
+
action :GetTransaction
|
7
|
+
parameter :transaction_id
|
8
|
+
end
|
9
|
+
|
10
|
+
class Response < Remit::Response
|
11
|
+
class TransactionDetail < Remit::BaseResponse
|
12
|
+
parameter :caller_name
|
13
|
+
parameter :caller_token_id
|
14
|
+
parameter :caller_transaction_date, :type => :time
|
15
|
+
parameter :date_completed, :type => :time
|
16
|
+
parameter :date_received, :type => :time
|
17
|
+
parameter :error_code
|
18
|
+
parameter :error_message
|
19
|
+
parameter :fees, :type => Amount
|
20
|
+
parameter :meta_data
|
21
|
+
parameter :operation
|
22
|
+
parameter :payment_method
|
23
|
+
parameter :recipient_name
|
24
|
+
parameter :recipient_token_id
|
25
|
+
parameter :related_transactions
|
26
|
+
parameter :sender_name
|
27
|
+
parameter :sender_token_id
|
28
|
+
parameter :status
|
29
|
+
parameter :status_history
|
30
|
+
parameter :transaction_amount, :type => Amount
|
31
|
+
parameter :transaction_id
|
32
|
+
parameter :transaction_parts
|
33
|
+
end
|
34
|
+
|
35
|
+
parameter :transaction, :type => TransactionDetail
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_transaction(request = Request.new)
|
39
|
+
call(request, Response)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'remit/common'
|
2
|
+
|
3
|
+
module Remit
|
4
|
+
module InstallPaymentInstruction
|
5
|
+
class Request < Remit::Request
|
6
|
+
action :InstallPaymentInstruction
|
7
|
+
parameter :payment_instruction
|
8
|
+
parameter :caller_reference
|
9
|
+
parameter :token_friendly_name
|
10
|
+
parameter :token_type
|
11
|
+
parameter :payment_reason
|
12
|
+
end
|
13
|
+
|
14
|
+
class Response < Remit::Response
|
15
|
+
parameter :token_id
|
16
|
+
end
|
17
|
+
|
18
|
+
def install_payment_instruction(request)
|
19
|
+
call(request, Response)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'base64'
|
2
|
+
require 'openssl/digest'
|
3
|
+
|
4
|
+
module Remit
|
5
|
+
|
6
|
+
##
|
7
|
+
# Encapsulates the logic for IPN request validation and attribute retrieval.
|
8
|
+
#
|
9
|
+
class IpnRequest
|
10
|
+
|
11
|
+
# Signature key name used by AmazonFPS IPNs
|
12
|
+
SIGNATURE_KEY = 'signature'
|
13
|
+
|
14
|
+
##
|
15
|
+
# +params+ should be your controllers request parameters.
|
16
|
+
#
|
17
|
+
def initialize(params, secret_key)
|
18
|
+
raise ArgumentError, "Expected the request params hash, received: #{params.inspect}" unless params.kind_of?(Hash)
|
19
|
+
@params = strip_keys_from(params, 'action', 'controller')
|
20
|
+
@supplied_signature = @params.delete(SIGNATURE_KEY)
|
21
|
+
@secret_key = secret_key
|
22
|
+
end
|
23
|
+
|
24
|
+
def valid?
|
25
|
+
return false unless @supplied_signature
|
26
|
+
generate_signature_for(@params) == @supplied_signature
|
27
|
+
end
|
28
|
+
|
29
|
+
def method_missing(method, *args) #:nodoc:
|
30
|
+
if @params.has_key?(method.to_s)
|
31
|
+
@params[method.to_s]
|
32
|
+
else
|
33
|
+
super(method, *args)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
|
41
|
+
def generate_signature_for(params)
|
42
|
+
query = params.sort_by { |k,v| k.downcase }
|
43
|
+
digest = OpenSSL::Digest::Digest.new('sha1')
|
44
|
+
hmac = OpenSSL::HMAC.digest(digest, @secret_key, query.to_s)
|
45
|
+
encoded = Base64.encode64(hmac).chomp
|
46
|
+
end
|
47
|
+
|
48
|
+
def strip_keys_from(params, *ignore_keys)
|
49
|
+
parsed = params.dup
|
50
|
+
ignore_keys.each { |key| parsed.delete(key) }
|
51
|
+
parsed
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
data/lib/remit/pay.rb
ADDED
@@ -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
|
9
|
+
parameter :caller_token_id
|
10
|
+
parameter :charge_fee_to
|
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
|
18
|
+
parameter :sender_description
|
19
|
+
parameter :sender_reference
|
20
|
+
parameter :sender_token_id
|
21
|
+
parameter :temporary_decline_policy, :type => Remit::RequestTypes::TemporaryDeclinePolicy
|
22
|
+
parameter :transaction_amount, :type => Remit::RequestTypes::Amount
|
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
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Remit
|
2
|
+
|
3
|
+
class PipelineResponse
|
4
|
+
|
5
|
+
def initialize(uri, secret_key)
|
6
|
+
@uri = URI.parse(uri)
|
7
|
+
@secret_key = secret_key
|
8
|
+
end
|
9
|
+
|
10
|
+
##
|
11
|
+
# Returns +true+ if the response is correctly signed (awsSignature).
|
12
|
+
#
|
13
|
+
#--
|
14
|
+
# The unescape_value method is used here because the awsSignature value
|
15
|
+
# pulled from the request is filtered through the same method.
|
16
|
+
#++
|
17
|
+
#
|
18
|
+
def valid?
|
19
|
+
return false unless given_signature
|
20
|
+
Relax::Query.unescape_value(correct_signature) == given_signature
|
21
|
+
end
|
22
|
+
|
23
|
+
##
|
24
|
+
# Returns +true+ if the response returns a successful state.
|
25
|
+
#
|
26
|
+
def successful?
|
27
|
+
[
|
28
|
+
Remit::PipelineStatusCode::SUCCESS_ABT,
|
29
|
+
Remit::PipelineStatusCode::SUCCESS_ACH,
|
30
|
+
Remit::PipelineStatusCode::SUCCESS_CC,
|
31
|
+
Remit::PipelineStatusCode::SUCCESS_RECIPIENT_TOKEN_INSTALLED
|
32
|
+
].include?(request_query[:status])
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
def method_missing(method, *args) #:nodoc:
|
37
|
+
if request_query.has_key?(method.to_sym)
|
38
|
+
request_query[method.to_sym]
|
39
|
+
else
|
40
|
+
super
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
|
48
|
+
def request_query(reload = false)
|
49
|
+
@query ||= Remit::SignedQuery.parse(@uri, @secret_key, @uri.query || '')
|
50
|
+
end
|
51
|
+
|
52
|
+
def given_signature
|
53
|
+
request_query[:awsSignature]
|
54
|
+
end
|
55
|
+
|
56
|
+
def correct_signature
|
57
|
+
Remit::SignedQuery.new(@uri.path, @secret_key, request_query).sign
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
data/lib/remit/refund.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'remit/common'
|
2
|
+
|
3
|
+
module Remit
|
4
|
+
module Refund
|
5
|
+
class Request < Remit::Request
|
6
|
+
action :Refund
|
7
|
+
parameter :caller_description
|
8
|
+
parameter :caller_reference
|
9
|
+
parameter :caller_token_id
|
10
|
+
parameter :charge_fee_to
|
11
|
+
parameter :meta_data
|
12
|
+
parameter :refund_amount, :type => Remit::RequestTypes::Amount
|
13
|
+
parameter :refund_recipient_description
|
14
|
+
parameter :refund_recipient_reference
|
15
|
+
parameter :refund_sender_description
|
16
|
+
parameter :refund_sender_reference
|
17
|
+
parameter :refund_sender_token_id
|
18
|
+
parameter :transaction_date
|
19
|
+
parameter :transaction_id
|
20
|
+
|
21
|
+
|
22
|
+
# The RefundAmount parameter has multiple components. It is specified on the query string like
|
23
|
+
# so: RefundAmount.Amount=XXX&RefundAmount.CurrencyCode=YYY
|
24
|
+
def convert_complex_key(key, parameter)
|
25
|
+
"#{convert_key(key).to_s}.#{convert_key(parameter).to_s}"
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
class Response < Remit::Response
|
31
|
+
parameter :transaction_response, :type => TransactionResponse
|
32
|
+
end
|
33
|
+
|
34
|
+
def refund(request = Request.new)
|
35
|
+
call(request, Response)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'remit/common'
|
2
|
+
|
3
|
+
module Remit
|
4
|
+
module Reserve
|
5
|
+
class Request < Remit::Request
|
6
|
+
action :Reserve
|
7
|
+
parameter :recipient_token_id
|
8
|
+
parameter :sender_token_id
|
9
|
+
parameter :caller_token_id
|
10
|
+
parameter :sender_reference
|
11
|
+
parameter :recipient_reference
|
12
|
+
parameter :caller_reference
|
13
|
+
parameter :transaction_date
|
14
|
+
parameter :transaction_amount
|
15
|
+
parameter :charge_fee_to
|
16
|
+
parameter :sender_description
|
17
|
+
parameter :recipient_description
|
18
|
+
parameter :caller_description
|
19
|
+
parameter :meta_data
|
20
|
+
end
|
21
|
+
|
22
|
+
class Response < Remit::Response
|
23
|
+
parameter :transaction_response, :type => TransactionResponse
|
24
|
+
end
|
25
|
+
|
26
|
+
def reserve(request = Request.new)
|
27
|
+
call(request, Response)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'remit/common'
|
2
|
+
|
3
|
+
module Remit
|
4
|
+
module RetryTransaction
|
5
|
+
class Request < Remit::Request
|
6
|
+
action :RetryTransaction
|
7
|
+
parameter :original_transaction_id
|
8
|
+
end
|
9
|
+
|
10
|
+
class Response < Remit::Response
|
11
|
+
parameter :transaction_response, :type => TransactionResponse
|
12
|
+
end
|
13
|
+
|
14
|
+
def retry_transaction(request = Request.new)
|
15
|
+
call(request, Response)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|