NewMonarch-remit 0.0.1
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 +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
|