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/LICENSE
CHANGED
data/README.markdown
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
Remit
|
2
|
+
=====
|
3
|
+
|
4
|
+
This API provides access to the Amazon Flexible Payment Service (FPS). After
|
5
|
+
trying to get the SOAP version of the API written, I began working on this REST
|
6
|
+
version to provide a cohesive means of access to all of the functionality of
|
7
|
+
the FPS without having to get dirty dealing with SOAP requests.
|
8
|
+
|
9
|
+
I hope you enjoy using it as much as I've enjoyed writing it. I'm interested to
|
10
|
+
hear what sort of uses you find for it. If you find any bugs, let me know (or
|
11
|
+
better yet, submit a patch).
|
12
|
+
|
13
|
+
|
14
|
+
Sandbox
|
15
|
+
-------
|
16
|
+
|
17
|
+
Amazon provides a testing environment for the FPS called a sandbox. You may
|
18
|
+
(and should) use the sandbox while testing your application. It can be enabled
|
19
|
+
by passing a value of true to the last argument of the API constructor.
|
20
|
+
|
21
|
+
|
22
|
+
Getting Started
|
23
|
+
---------------
|
24
|
+
|
25
|
+
The following example shows how to load up the API, initialize the service, and
|
26
|
+
make a simple call to get the tokens stored on the account:
|
27
|
+
|
28
|
+
gem 'remit'
|
29
|
+
require 'remit'
|
30
|
+
|
31
|
+
ACCESS_KEY = '<your AWS access key>'
|
32
|
+
SECRET_KEY = '<your AWS secret key>'
|
33
|
+
|
34
|
+
# connect using the API's sandbox mode
|
35
|
+
remit = Remit::API.new(ACCESS_KEY, SECRET_KEY, true)
|
36
|
+
|
37
|
+
response = remit.get_tokens
|
38
|
+
puts response.tokens.first.token_id
|
39
|
+
|
40
|
+
|
41
|
+
Using with Rails
|
42
|
+
----------------
|
43
|
+
|
44
|
+
To use Remit in a Rails application, you must first specify a dependency on the
|
45
|
+
Remit gem in your config/environment.rb file:
|
46
|
+
|
47
|
+
config.gem 'remit', :version => '~> 0.0.1'
|
48
|
+
|
49
|
+
Then you should create an initializer to configure your Amazon keys. Create the
|
50
|
+
file config/initializers/remit.rb with the following contents:
|
51
|
+
|
52
|
+
config_file = File.join(Rails.root, 'config', 'amazon_fps.yml')
|
53
|
+
config = YAML.load_file(config_file)[RAILS_ENV].symbolize_keys
|
54
|
+
|
55
|
+
FPS_ACCESS_KEY = config[:access_key]
|
56
|
+
FPS_SECRET_KEY = config[:secret_key]
|
57
|
+
|
58
|
+
Then create the YAML file config/amazon_fps.yml:
|
59
|
+
|
60
|
+
development: &sandbox
|
61
|
+
access_key: <your sandbox access key>
|
62
|
+
secret_key: <your sandbox secret key>
|
63
|
+
|
64
|
+
test:
|
65
|
+
<<: *sandbox
|
66
|
+
|
67
|
+
production:
|
68
|
+
access_key: <your access key>
|
69
|
+
secret_key: <your secret key>
|
70
|
+
|
71
|
+
To instantiate and use the Remit API in your application, you could define a
|
72
|
+
method in your ApplicationController like this:
|
73
|
+
|
74
|
+
def remit
|
75
|
+
@remit ||= begin
|
76
|
+
sandbox = !Rails.env.production?
|
77
|
+
Remit::API.new(FPS_ACCESS_KEY, FPS_SECRET_KEY, sandbox)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
Sites Using Remit
|
83
|
+
-----------------
|
84
|
+
|
85
|
+
The following production sites are currently using Remit:
|
86
|
+
|
87
|
+
* http://www.storenvy.com/
|
88
|
+
* http://www.obsidianportal.com/
|
89
|
+
|
90
|
+
|
91
|
+
Copyright (c) 2007-2009 Tyler Hunt, released under the MIT license
|
data/lib/remit.rb
CHANGED
@@ -8,39 +8,44 @@ require 'base64'
|
|
8
8
|
require 'erb'
|
9
9
|
|
10
10
|
require 'rubygems'
|
11
|
+
|
12
|
+
gem 'relax', '0.0.7'
|
11
13
|
require 'relax'
|
12
14
|
|
13
15
|
require 'remit/common'
|
14
16
|
require 'remit/data_types'
|
15
|
-
|
16
|
-
require 'remit/
|
17
|
-
require 'remit/discard_results'
|
18
|
-
require 'remit/fund_prepaid'
|
19
|
-
require 'remit/get_account_activity'
|
20
|
-
require 'remit/get_account_balance'
|
21
|
-
require 'remit/get_all_credit_instruments'
|
22
|
-
require 'remit/get_all_prepaid_instruments'
|
23
|
-
require 'remit/get_debt_balance'
|
24
|
-
require 'remit/get_outstanding_debt_balance'
|
25
|
-
require 'remit/get_payment_instruction'
|
17
|
+
require 'remit/error_codes'
|
18
|
+
require 'remit/ipn_request'
|
26
19
|
require 'remit/get_pipeline'
|
27
|
-
require 'remit/
|
28
|
-
|
29
|
-
require 'remit/
|
30
|
-
require 'remit/
|
31
|
-
require 'remit/
|
32
|
-
require 'remit/
|
33
|
-
require 'remit/
|
34
|
-
require 'remit/
|
35
|
-
require 'remit/
|
36
|
-
require 'remit/
|
37
|
-
require 'remit/
|
38
|
-
require 'remit/
|
39
|
-
require 'remit/
|
40
|
-
require 'remit/
|
41
|
-
require 'remit/
|
42
|
-
require 'remit/
|
43
|
-
require 'remit/
|
20
|
+
require 'remit/pipeline_response'
|
21
|
+
|
22
|
+
require 'remit/operations/cancel_token'
|
23
|
+
require 'remit/operations/discard_results'
|
24
|
+
require 'remit/operations/fund_prepaid'
|
25
|
+
require 'remit/operations/get_account_activity'
|
26
|
+
require 'remit/operations/get_account_balance'
|
27
|
+
require 'remit/operations/get_all_credit_instruments'
|
28
|
+
require 'remit/operations/get_all_prepaid_instruments'
|
29
|
+
require 'remit/operations/get_debt_balance'
|
30
|
+
require 'remit/operations/get_outstanding_debt_balance'
|
31
|
+
require 'remit/operations/get_payment_instruction'
|
32
|
+
require 'remit/operations/get_prepaid_balance'
|
33
|
+
require 'remit/operations/get_results'
|
34
|
+
require 'remit/operations/get_token_by_caller'
|
35
|
+
require 'remit/operations/get_token_usage'
|
36
|
+
require 'remit/operations/get_tokens'
|
37
|
+
require 'remit/operations/get_total_prepaid_liability'
|
38
|
+
require 'remit/operations/get_transaction'
|
39
|
+
require 'remit/operations/install_payment_instruction'
|
40
|
+
require 'remit/operations/pay'
|
41
|
+
require 'remit/operations/refund'
|
42
|
+
require 'remit/operations/reserve'
|
43
|
+
require 'remit/operations/retry_transaction'
|
44
|
+
require 'remit/operations/settle'
|
45
|
+
require 'remit/operations/settle_debt'
|
46
|
+
require 'remit/operations/subscribe_for_caller_notification'
|
47
|
+
require 'remit/operations/unsubscribe_for_caller_notification'
|
48
|
+
require 'remit/operations/write_off_debt'
|
44
49
|
|
45
50
|
module Remit
|
46
51
|
class API < Relax::Service
|
@@ -73,29 +78,29 @@ module Remit
|
|
73
78
|
include UnsubscribeForCallerNotification
|
74
79
|
include WriteOffDebt
|
75
80
|
|
76
|
-
API_ENDPOINT = 'https://fps.amazonaws.com/'
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
API_VERSION = Date.new(2007, 1, 8).to_s
|
81
|
-
SIGNATURE_VERSION = 1
|
81
|
+
API_ENDPOINT = 'https://fps.amazonaws.com/'.freeze
|
82
|
+
API_SANDBOX_ENDPOINT = 'https://fps.sandbox.amazonaws.com/'.freeze
|
83
|
+
PIPELINE_URL = 'https://authorize.payments.amazon.com/cobranded-ui/actions/start'.freeze
|
84
|
+
PIPELINE_SANDBOX_URL = 'https://authorize.payments-sandbox.amazon.com/cobranded-ui/actions/start'.freeze
|
85
|
+
API_VERSION = Date.new(2007, 1, 8).to_s.freeze
|
86
|
+
SIGNATURE_VERSION = 1.freeze
|
82
87
|
|
83
|
-
attr_reader :pipeline
|
84
88
|
attr_reader :access_key
|
85
89
|
attr_reader :secret_key
|
90
|
+
attr_reader :pipeline_url
|
86
91
|
|
87
|
-
def initialize(access_key, secret_key, sandbox
|
88
|
-
super((not sandbox) ? API_ENDPOINT : API_SANDBOX)
|
89
|
-
@pipeline = ((not sandbox) ? PIPELINE_ENDPOINT : PIPELINE_SANDBOX)
|
92
|
+
def initialize(access_key, secret_key, sandbox=false)
|
90
93
|
@access_key = access_key
|
91
94
|
@secret_key = secret_key
|
92
|
-
|
95
|
+
@pipeline_url = sandbox ? PIPELINE_SANDBOX_URL : PIPELINE_URL
|
93
96
|
|
94
|
-
|
97
|
+
super(sandbox ? API_SANDBOX_ENDPOINT : API_ENDPOINT)
|
98
|
+
end
|
95
99
|
|
96
|
-
def new_query(query
|
100
|
+
def new_query(query={})
|
97
101
|
SignedQuery.new(@endpoint, @secret_key, query)
|
98
102
|
end
|
103
|
+
private :new_query
|
99
104
|
|
100
105
|
def default_query
|
101
106
|
new_query({
|
@@ -105,19 +110,24 @@ module Remit
|
|
105
110
|
:Timestamp => Time.now.utc.strftime('%Y-%m-%dT%H:%M:%SZ')
|
106
111
|
})
|
107
112
|
end
|
113
|
+
private :default_query
|
108
114
|
|
109
115
|
def query(request)
|
110
116
|
query = super
|
111
117
|
query[:Signature] = sign(query)
|
112
118
|
query
|
113
119
|
end
|
120
|
+
private :query
|
114
121
|
|
115
122
|
def sign(values)
|
116
123
|
keys = values.keys.sort { |a, b| a.to_s.downcase <=> b.to_s.downcase }
|
124
|
+
|
117
125
|
signature = keys.inject('') do |signature, key|
|
118
126
|
signature += key.to_s + values[key].to_s
|
119
127
|
end
|
128
|
+
|
120
129
|
Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::SHA1.new, @secret_key, signature)).strip
|
121
130
|
end
|
131
|
+
private :sign
|
122
132
|
end
|
123
133
|
end
|
data/lib/remit/common.rb
CHANGED
@@ -11,30 +11,28 @@ module Remit
|
|
11
11
|
parameter :action, :value => name
|
12
12
|
end
|
13
13
|
|
14
|
-
protected
|
15
|
-
|
16
14
|
def convert_key(key)
|
17
15
|
key.to_s.gsub(/(^|_)(.)/) { $2.upcase }.to_sym
|
18
16
|
end
|
17
|
+
protected :convert_key
|
19
18
|
end
|
20
19
|
|
21
20
|
class BaseResponse < Relax::Response
|
22
|
-
|
23
|
-
|
24
|
-
def node_name(name)
|
25
|
-
name.to_s.gsub(/(^|_)(.)/) { $2.upcase }
|
21
|
+
def node_name(name, namespace=nil)
|
22
|
+
super(name.to_s.gsub(/(^|_)(.)/) { $2.upcase }, namespace)
|
26
23
|
end
|
27
24
|
end
|
28
25
|
|
29
26
|
class Response < BaseResponse
|
30
27
|
parameter :request_id
|
28
|
+
|
31
29
|
attr_accessor :status
|
32
30
|
attr_accessor :errors
|
33
31
|
|
34
32
|
def initialize(xml)
|
35
33
|
super
|
36
34
|
|
37
|
-
if is?(:Response)
|
35
|
+
if is?(:Response) && has?(:Errors)
|
38
36
|
@errors = elements(:Errors).collect do |error|
|
39
37
|
Error.new(error)
|
40
38
|
end
|
@@ -42,7 +40,7 @@ module Remit
|
|
42
40
|
@status = text_value(element(:Status))
|
43
41
|
@errors = elements('errors/errors').collect do |error|
|
44
42
|
ServiceError.new(error)
|
45
|
-
end
|
43
|
+
end unless successful?
|
46
44
|
end
|
47
45
|
end
|
48
46
|
|
@@ -50,26 +48,26 @@ module Remit
|
|
50
48
|
@status == ResponseStatus::SUCCESS
|
51
49
|
end
|
52
50
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
51
|
+
def node_name(name, namespace=nil)
|
52
|
+
super(name.to_s.split('/').collect{ |tag|
|
53
|
+
tag.gsub(/(^|_)(.)/) { $2.upcase }
|
54
|
+
}.join('/'), namespace)
|
57
55
|
end
|
58
56
|
end
|
59
57
|
|
60
58
|
class SignedQuery < Relax::Query
|
61
|
-
def initialize(uri, secret_key, query
|
59
|
+
def initialize(uri, secret_key, query={})
|
62
60
|
super(query)
|
63
61
|
@uri = URI.parse(uri.to_s)
|
64
62
|
@secret_key = secret_key
|
65
63
|
end
|
66
64
|
|
67
65
|
def sign
|
68
|
-
|
66
|
+
delete(:awsSignature)
|
69
67
|
store(:awsSignature, Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::SHA1.new, @secret_key, "#{@uri.path}?#{to_s(false)}".gsub('%20', '+'))).strip)
|
70
68
|
end
|
71
69
|
|
72
|
-
def to_s(signed
|
70
|
+
def to_s(signed=true)
|
73
71
|
sign if signed
|
74
72
|
super()
|
75
73
|
end
|
@@ -77,10 +75,12 @@ module Remit
|
|
77
75
|
class << self
|
78
76
|
def parse(uri, secret_key, query_string)
|
79
77
|
query = self.new(uri, secret_key)
|
78
|
+
|
80
79
|
query_string.split('&').each do |parameter|
|
81
|
-
key, value = parameter.split('=')
|
80
|
+
key, value = parameter.split('=', 2)
|
82
81
|
query[key] = unescape_value(value)
|
83
82
|
end
|
83
|
+
|
84
84
|
query
|
85
85
|
end
|
86
86
|
end
|
data/lib/remit/data_types.rb
CHANGED
@@ -9,6 +9,16 @@ module Remit
|
|
9
9
|
parameter :amount, :type => :float
|
10
10
|
end
|
11
11
|
|
12
|
+
class TemporaryDeclinePolicy < BaseResponse
|
13
|
+
parameter :temporary_decline_policy_type
|
14
|
+
parameter :implicit_retry_timeout_in_mins
|
15
|
+
end
|
16
|
+
|
17
|
+
class DescriptorPolicy < BaseResponse
|
18
|
+
parameter :soft_descriptor_type
|
19
|
+
parameter :CS_number_of
|
20
|
+
end
|
21
|
+
|
12
22
|
class ChargeFeeTo
|
13
23
|
CALLER = 'Caller'
|
14
24
|
RECIPIENT = 'Recipient'
|
@@ -80,6 +90,21 @@ module Remit
|
|
80
90
|
parameter :status
|
81
91
|
parameter :status_detail
|
82
92
|
parameter :new_sender_token_usage, :type => TokenUsageLimit
|
93
|
+
|
94
|
+
%w(reserved success failure initiated reinitiated temporary_decline).each do |status_name|
|
95
|
+
define_method("#{status_name}?") do
|
96
|
+
self.status == Remit::TransactionStatus.const_get(status_name.sub('_', '').upcase)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
class TransactionStatus
|
102
|
+
RESERVED = 'Reserved'
|
103
|
+
SUCCESS = 'Success'
|
104
|
+
FAILURE = 'Failure'
|
105
|
+
INITIATED = 'Initiated'
|
106
|
+
REINITIATED = 'Reinitiated'
|
107
|
+
TEMPORARYDECLINE = 'TemporaryDecline'
|
83
108
|
end
|
84
109
|
|
85
110
|
class TokenType
|
@@ -88,7 +113,7 @@ module Remit
|
|
88
113
|
RECURRING = 'Recurring'
|
89
114
|
UNRESTRICTED = 'Unrestricted'
|
90
115
|
end
|
91
|
-
|
116
|
+
|
92
117
|
class PipelineName
|
93
118
|
SINGLE_USE = 'SingleUse'
|
94
119
|
MULTI_USE = 'MultiUse'
|
@@ -97,11 +122,43 @@ module Remit
|
|
97
122
|
SETUP_PREPAID = 'SetupPrepaid'
|
98
123
|
SETUP_POSTPAID = 'SetupPostpaid'
|
99
124
|
end
|
100
|
-
|
125
|
+
|
126
|
+
class PipelineStatusCode
|
127
|
+
CALLER_EXCEPTION = 'CE' # problem with your code
|
128
|
+
SYSTEM_ERROR = 'SE' # system error, try again
|
129
|
+
SUCCESS_ABT = 'SA' # successful payment with Amazon balance
|
130
|
+
SUCCESS_ACH = 'SB' # successful payment with bank transfer
|
131
|
+
SUCCESS_CC = 'SC' # successful payment with credit card
|
132
|
+
ABORTED = 'A' # user aborted payment
|
133
|
+
PAYMENT_METHOD_MISMATCH = 'PE' # user does not have payment method requested
|
134
|
+
PAYMENT_METHOD_UNSUPPORTED = 'NP' # account doesn't support requested payment method
|
135
|
+
INVALID_CALLER = 'NM' # you are not a valid 3rd party caller to the transaction
|
136
|
+
SUCCESS_RECIPIENT_TOKEN_INSTALLED = 'SR'
|
137
|
+
end
|
138
|
+
|
101
139
|
module RequestTypes
|
102
140
|
class Amount < Remit::Request
|
103
141
|
parameter :amount
|
104
142
|
parameter :currency_code
|
105
143
|
end
|
144
|
+
|
145
|
+
class TemporaryDeclinePolicy < Remit::Request
|
146
|
+
parameter :temporary_decline_policy_type
|
147
|
+
parameter :implicit_retry_timeout_in_mins
|
148
|
+
end
|
149
|
+
|
150
|
+
class DescriptorPolicy < Remit::Request
|
151
|
+
parameter :soft_descriptor_type
|
152
|
+
parameter :CS_number_of
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
class Operation
|
157
|
+
PAY = "Pay"
|
158
|
+
REFUND = "Refund"
|
159
|
+
SETTLE = "Settle"
|
160
|
+
SETTLE_DEBT = "SettleDebt"
|
161
|
+
WRITE_OFF_DEBT = "WriteOffDebt"
|
162
|
+
FUND_PREPAID = "FundPrepaid"
|
106
163
|
end
|
107
164
|
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
# Scraped and categorized from http://docs.amazonwebservices.com/AmazonFPS/\
|
2
|
+
# 2007-01-08/FPSDeveloperGuide/index.html?ErrorCodesTable.html. You can use
|
3
|
+
# these categories to specify default error handling in your application such
|
4
|
+
# as asking users to retry or sending an exception email.
|
5
|
+
module Remit::ErrorCodes
|
6
|
+
class << self
|
7
|
+
def sender_error?(code)
|
8
|
+
SENDER.include? code.to_sym
|
9
|
+
end
|
10
|
+
|
11
|
+
def recipient_error?(code)
|
12
|
+
RECIPIENT.include? code.to_sym
|
13
|
+
end
|
14
|
+
|
15
|
+
def caller_error?(code)
|
16
|
+
CALLER.include?(code.to_sym)
|
17
|
+
end
|
18
|
+
|
19
|
+
def amazon_error?(code)
|
20
|
+
AMAZON.include? code.to_sym
|
21
|
+
end
|
22
|
+
|
23
|
+
def api_error?(code)
|
24
|
+
API.include? code.to_sym
|
25
|
+
end
|
26
|
+
|
27
|
+
def unknown_error?(code)
|
28
|
+
UNKNOWN.include? code.to_sym
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
SENDER = [
|
33
|
+
:InactiveAccount_Sender, # The sender's account is in suspended or closed state.
|
34
|
+
:InactiveInstrument, # The payment instrument used for this transaction is no longer active.
|
35
|
+
:InstrumentExpired, # The prepaid or the postpaid instrument has expired.
|
36
|
+
:InstrumentNotActive, # The prepaid or postpaid instrument used in the transaction is not active.
|
37
|
+
:InvalidAccountState_Sender, # Sender account cannot participate in the transaction.
|
38
|
+
:InvalidInstrumentForAccountType, # The sender account can use only credit cards
|
39
|
+
:InvalidInstrumentState, # The prepaid or credit instrument should be active
|
40
|
+
:InvalidTokenId_Sender, # The send token specified is either invalid or canceled or the token is not active.
|
41
|
+
:PaymentInstrumentNotCC, # The payment method specified in the transaction is not a credit card. You can only use a credit card for this transaction.
|
42
|
+
:PaymentInstrumentMissing, # There needs to be a payment instrument defined in the token which defines the payment method.
|
43
|
+
:TokenNotActive_Sender, # The sender token is canceled.
|
44
|
+
:UnverifiedAccount_Sender, # The sender's account must have a verified U.S. credit card or a verified U.S bank account before this transaction can be initiated
|
45
|
+
:UnverifiedBankAccount, # A verified bank account should be used for this transaction
|
46
|
+
:UnverifiedEmailAddress_Sender, # The sender account must have a verified e-mail address for this payment
|
47
|
+
]
|
48
|
+
|
49
|
+
RECIPIENT = [
|
50
|
+
:InactiveAccount_Recipient, # The recipient's account is in suspended or closed state.
|
51
|
+
:InvalidAccountState_Recipient, # Recipient account cannot participate in the transaction
|
52
|
+
:InvalidRecipientRoleForAccountType, # The recipient account is not allowed to receive payments
|
53
|
+
:InvalidRecipientForCCTransaction, # This account cannot receive credit card payments.
|
54
|
+
:InvalidTokenId_Recipient, # The recipient token specified is either invalid or canceled.
|
55
|
+
:TokenNotActive_Recipient, # The recipient token is canceled.
|
56
|
+
:UnverifiedAccount_Recipient, # The recipient's account must have a verified bank account or a credit card before this transaction can be initiated.
|
57
|
+
:UnverifiedEmailAddress_Recipient, # The recipient account must have a verified e-mail address for receiving payments.
|
58
|
+
]
|
59
|
+
|
60
|
+
CALLER = [
|
61
|
+
:InactiveAccount_Caller, # The caller's account is in suspended or closed state.
|
62
|
+
:InvalidAccountState_Caller, # The caller account cannot participate in the transaction
|
63
|
+
:InvalidTokenId_Caller, # The caller token specified is either invalid or canceled or the specified token is not active.
|
64
|
+
:TokenNotActive_Caller, # The caller token is canceled.
|
65
|
+
:UnverifiedEmailAddress_Caller, # The caller account must have a verified e-mail address
|
66
|
+
]
|
67
|
+
|
68
|
+
AMAZON = [
|
69
|
+
:InternalError # A retriable error that happens due to some transient problem in the system.
|
70
|
+
]
|
71
|
+
|
72
|
+
# bad syntax or logic
|
73
|
+
API = [
|
74
|
+
:AmountOutOfRange, # The transaction amount is more than the allowed range.
|
75
|
+
:BadRule, # One of the GK constructs is not well defined
|
76
|
+
:CannotSpecifyUsageForSingleUseToken, # Token usages cannot be specified for a single use token.
|
77
|
+
:ConcurrentModification, # A retriable error can happen due to concurrent modification of data by two processes.
|
78
|
+
:DuplicateRequest, # A different request associated with this caller reference already exists.
|
79
|
+
:IncompatibleTokens, # The transaction could not be completed because the tokens have incompatible payment instructions.
|
80
|
+
:InstrumentAccessDenied, # The external calling application is not the recipient for this postpaid or prepaid instrument. The caller should be the liability holder
|
81
|
+
:InvalidCallerReference, # The CallerReferece does not have a token associated with it.
|
82
|
+
:InvalidDateRange, # The end date specified is before the start date or the start date is in the future.
|
83
|
+
:InvalidEvent, # The event specified was not subscribed using the SubscribeForCallerNotification operation.
|
84
|
+
:InvalidParams, # One or more parameters in the request is invalid.
|
85
|
+
:InvalidPaymentInstrument, # The payment method used in the transaction is invalid.
|
86
|
+
:InvalidPaymentMethod, # Payment method specified in the GK construct is invalid.
|
87
|
+
:InvalidSenderRoleForAccountType, # This token cannot be used for this operation.
|
88
|
+
:InvalidTokenId, # The token that you are trying to cancel was not installed by you.
|
89
|
+
:InvalidTokenType, # Invalid operation performed on the token. Example, getting the token usage information on a single use token.
|
90
|
+
:InvalidTransactionId, # The specified transaction could not be found or the caller did not execute the transaction or this is not a Pay or Reserve call.
|
91
|
+
:InvalidTransactionState, # The transaction is not completed or it has been temporarily failed.
|
92
|
+
:InvalidUsageDuration, # The duration cannot be less than one hour.
|
93
|
+
:InvalidUsageLimitCount, # The usage count is null or empty.
|
94
|
+
:InvalidUsageStartTime, # The start time specified for the token is not valid.
|
95
|
+
:InvalidUsageType, # The usage type specified is invalid.
|
96
|
+
:OriginalTransactionIncomplete, # The original transaction is still in progress.
|
97
|
+
:OriginalTransactionFailed, # The original transaction has failed
|
98
|
+
:PaymentMethodNotDefined, # Payment method is not defined in the transaction.
|
99
|
+
:RefundAmountExceeded, # The refund amount is more than the refundable amount.
|
100
|
+
:SameTokenIdUsedMultipleTimes, # This token is already used in earlier transactions.
|
101
|
+
:SenderNotOriginalRecipient, # The sender in the refund transaction is not the recipient of the original transaction.
|
102
|
+
:SettleAmountGreaterThanReserveAmount, # The amount being settled is greater than the reserved amount.
|
103
|
+
:TransactionDenied, # This transaction is not allowed.
|
104
|
+
:TransactionExpired, # Returned when the Caller attempts to explicitly retry a transaction that is temporarily declined and is in queue for implicit retry.
|
105
|
+
:TransactionFullyRefundedAlready, # The complete refund for this transaction is already completed
|
106
|
+
:TransactionTypeNotRefundable, # You cannot refund this transaction.
|
107
|
+
:TokenAccessDenied, # Permission is denied to cancel the token.
|
108
|
+
:TokenUsageError, # The token usage limit is exceeded.
|
109
|
+
:UsageNotDefined, # For a multi-use token or a recurring token the usage limits are not specified in the GateKeeper text.
|
110
|
+
]
|
111
|
+
|
112
|
+
# these errors don't specify who is at fault
|
113
|
+
UNKNOWN = [
|
114
|
+
:InvalidAccountState, # The account is either suspended or closed. Payment instructions cannot be installed on this account.
|
115
|
+
:InsufficientBalance, # The sender, caller, or recipient's account balance has insufficient funds to complete the transaction.
|
116
|
+
:AccountLimitsExceeded, # The spending or the receiving limit on the account is exceeded
|
117
|
+
]
|
118
|
+
end
|