internetkassa 0.9.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 ADDED
@@ -0,0 +1,18 @@
1
+ (c) 2008 Fingertips, Eloy Duran <eloy@fngtps.com>
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to
5
+ deal in the Software without restriction, including without limitation the
6
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
+ sell copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16
+ THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,5 @@
1
+ === ABN-AMRO Internetkassa
2
+
3
+ A library for integrating payments using ABN-AMRO Internetkassa (Dutch bank).
4
+
5
+ Need to write documentation and release 1.0.0
@@ -0,0 +1,64 @@
1
+ require 'rake/testtask'
2
+
3
+ namespace :gem do
4
+ directory 'pkg'
5
+
6
+ desc 'Build the gem'
7
+ task :build => :pkg do
8
+ sh 'gem build internetkassa.gemspec'
9
+ sh 'mv internetkassa-*.gem pkg/'
10
+ end
11
+
12
+ desc 'Install the gem'
13
+ task :install => :build do
14
+ sh 'sudo gem install pkg/internetkassa-*.gem'
15
+ end
16
+ end
17
+
18
+ Rake::TestTask.new do |t|
19
+ t.test_files = FileList['test/**/*_test.rb']
20
+ t.verbose = true
21
+ end
22
+
23
+ task :default => :test
24
+
25
+ namespace :test do
26
+ desc 'Renders a simple html file which contains a internetkassa form'
27
+ task :render do
28
+ require File.expand_path('../test/test_helper', __FILE__)
29
+
30
+ instance = AbnAmro::Internetkassa.new(
31
+ :order_id => Time.now.to_i,
32
+ :amount => 1031,
33
+ :description => "HappyHardcore vol. 123 - the ballads",
34
+ :endpoint_url => ENV['URL'] || "http://example.com/payments",
35
+ :TITLE => 'HappyHardcore vol. 123 - the ballads'
36
+ )
37
+
38
+ controller = TestController.new
39
+ controller.extend(ActionView::Helpers)
40
+ controller.extend(AbnAmro::Internetkassa::Helpers)
41
+
42
+ File.open('form_test.html', 'w') do |f|
43
+ f << %{
44
+ <html>
45
+ <body>
46
+ #{controller.internetkassa_form_tag(instance) { '<input type="submit" />' }}
47
+ </body>
48
+ </html>
49
+ }
50
+ end
51
+
52
+ sh 'open form_test.html'
53
+ end
54
+ end
55
+
56
+ begin
57
+ require 'jewelry_portfolio/tasks'
58
+ JewelryPortfolio::Tasks.new do |t|
59
+ t.account = 'Fingertips'
60
+ t.name = 'abn-amro_internetkassa'
61
+ end
62
+ rescue LoadError
63
+ puts "JewelryPortfolio not available. Install it with: sudo gem install Fingertips-jewelry_portfolio -s http://gems.github.com"
64
+ end
@@ -0,0 +1,98 @@
1
+ require 'abn-amro/internetkassa/response'
2
+ require "digest/sha1"
3
+ require "cgi"
4
+
5
+ module AbnAmro
6
+ class Internetkassa
7
+ class << self
8
+ attr_accessor :pspid, :shasign, :test
9
+
10
+ alias_method :merchant_id=, :pspid=
11
+ alias_method :merchant_id, :pspid
12
+
13
+ alias_method :passphrase=, :shasign=
14
+ alias_method :passphrase, :shasign
15
+
16
+ def test?
17
+ @test
18
+ end
19
+
20
+ def service_url
21
+ test? ? TEST_URL : PRODUCTION_URL
22
+ end
23
+ end
24
+
25
+ MANDATORY_VALUES = %w{ merchant_id order_id amount currency language }
26
+ DEFAULT_VALUES = { :currency => 'EUR', :language => 'nl_NL' }
27
+ PRODUCTION_URL = "https://internetkassa.abnamro.nl/ncol/prod/orderstandard.asp"
28
+ TEST_URL = "https://internetkassa.abnamro.nl/ncol/test/orderstandard.asp"
29
+
30
+ attr_reader :params
31
+
32
+ attr_accessor :order_id, :amount, :description, :currency, :language
33
+ attr_accessor :accept_url, :decline_url, :exception_url, :cancel_url
34
+ attr_accessor :url_variable, :endpoint_params
35
+
36
+ def initialize(params = {})
37
+ @params = {}
38
+
39
+ DEFAULT_VALUES.merge(params).each do |k,v|
40
+ if respond_to?("#{k}=")
41
+ send("#{k}=", v)
42
+ else
43
+ @params[k] = v
44
+ end
45
+ end
46
+ end
47
+
48
+ # Shortcut which sets the accept_url, decline_url, cancel_url,
49
+ # exception_url, and cancel_url to the specified +url+.
50
+ def endpoint_url=(url)
51
+ @accept_url = @decline_url = @exception_url = @cancel_url = url
52
+ end
53
+
54
+ def data
55
+ verify_values!
56
+ @params.merge(
57
+ :PSPID => merchant_id,
58
+ :orderID => @order_id,
59
+ :amount => @amount,
60
+ :currency => @currency,
61
+ :language => @language,
62
+ :COM => @description,
63
+ :SHASign => signature,
64
+ :PARAMVAR => @url_variable,
65
+ :PARAMPLUS => url_encoded_endpoint_params,
66
+ :accepturl => @accept_url,
67
+ :declineurl => @decline_url,
68
+ :exceptionurl => @exception_url,
69
+ :cancelurl => @cancel_url
70
+ ).delete_if { |key, value| value.nil? || value.to_s.empty? }
71
+ end
72
+
73
+ private
74
+
75
+ def merchant_id
76
+ self.class.merchant_id
77
+ end
78
+
79
+ def passphrase
80
+ self.class.passphrase
81
+ end
82
+
83
+ def verify_values!
84
+ MANDATORY_VALUES.each do |key|
85
+ raise ArgumentError, "`#{key}' can't be blank" if send(key).nil?
86
+ end
87
+ end
88
+
89
+ def signature
90
+ Digest::SHA1.hexdigest("#{@order_id}#{@amount}#{@currency}#{merchant_id}#{passphrase}").upcase
91
+ end
92
+
93
+ def url_encoded_endpoint_params
94
+ return unless @endpoint_params
95
+ @endpoint_params.map { |k,v| "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}" }.join('&')
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,13 @@
1
+ module AbnAmro
2
+ class Internetkassa
3
+ module Helpers
4
+ def internetkassa_form_tag(internetkassa_instance, &block)
5
+ form_tag(AbnAmro::Internetkassa.service_url) do
6
+ result = internetkassa_instance.data.map { |name, value| hidden_field_tag(name, value, :id => nil) }
7
+ result << capture(&block) if block_given?
8
+ "\n#{result.join("\n")}\n"
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,91 @@
1
+ require 'abn-amro/internetkassa/response_codes'
2
+
3
+ module AbnAmro
4
+ class Internetkassa
5
+ class Response
6
+ class SignatureInvalidError < StandardError; end
7
+
8
+ attr_reader :params
9
+
10
+ def initialize(params)
11
+ @params = params
12
+
13
+ unless valid?
14
+ raise SignatureInvalidError, "signature `#{signature}' does not match the signature calculated for this message `#{calculated_signature}'"
15
+ end
16
+ end
17
+
18
+ # attributes
19
+
20
+ def order_id; @params['orderID'] end
21
+ def payment_id; @params['PAYID'] end
22
+ def payment_method; @params['PM'] end
23
+ def acceptance; @params['ACCEPTANCE'] end
24
+ def currency; @params['currency'] end
25
+ def status_code; @params['STATUS'] end
26
+ def error_code; @params['NCERROR'] if @params['NCERROR'] != '0' end
27
+ def signature; @params['SHASIGN'] end
28
+ def customer_name; @params['CN'] end
29
+ def card_brand; @params['BRAND'] end
30
+ def card_number; @params['CARDNO'] end
31
+ def card_expiration_date; @params['ED'] end
32
+
33
+ def amount
34
+ @amount ||= (@params['amount'].to_f * 100).to_i
35
+ end
36
+
37
+ def transaction_date
38
+ @transaction_date ||= Date.parse(@params['TRXDATE'], true)
39
+ end
40
+
41
+ # methods
42
+
43
+ def valid?
44
+ signature == calculated_signature
45
+ end
46
+
47
+ def success?
48
+ error_code.nil? && (authorized? || captured?)
49
+ end
50
+
51
+ def authorized?
52
+ status_code == '5'
53
+ end
54
+
55
+ def captured?
56
+ status_code == '9'
57
+ end
58
+
59
+ def retry?
60
+ Codes::ERROR_CODES[error_code][:retry] if error_code
61
+ end
62
+
63
+ def status_message
64
+ Codes::STATUS_CODES[status_code]
65
+ end
66
+
67
+ def error_message
68
+ Codes::ERROR_CODES[error_code][:explanation] if error_code
69
+ end
70
+
71
+ private
72
+
73
+ def calculated_signature
74
+ message = ''
75
+ message << order_id
76
+ message << currency
77
+ message << @params['amount']
78
+ message << payment_method
79
+ message << acceptance
80
+ message << status_code
81
+ message << card_number
82
+ message << payment_id
83
+ message << @params['NCERROR']
84
+ message << card_brand
85
+ message << Internetkassa.passphrase
86
+
87
+ Digest::SHA1.hexdigest(message).upcase
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,477 @@
1
+ module AbnAmro
2
+ class Internetkassa
3
+ class Response
4
+ module Codes
5
+ STATUS_CODES = {
6
+ # normal statuses
7
+ "0" => "Incomplete or invalid",
8
+ "1" => "Cancelled by client",
9
+ "2" => "Authorization refused",
10
+ "4" => "Order stored",
11
+ "5" => "Authorized",
12
+ "6" => "Authorized and cancelled",
13
+ "7" => "Payment deleted",
14
+ "8" => "Refund",
15
+ "9" => "Payment requested",
16
+
17
+ # intermediate or abnormal statuses
18
+ "41" => "Waiting client payment",
19
+ "51" => "Authorization waiting",
20
+ "52" => "Authorization not known",
21
+ "55" => "Stand-by",
22
+ "59" => "Authoriz. to get manually",
23
+ "61" => "Author. deletion waiting",
24
+ "62" => "Author. deletion uncertain",
25
+ "63" => "Author. deletion refused",
26
+ "64" => "Authorized and cancelled",
27
+ "71" => "Payment deletion pending",
28
+ "72" => "Payment deletion uncertain",
29
+ "73" => "Payment deletion refused",
30
+ "74" => "Payment deleted",
31
+ "75" => "Deletion processed by merchant",
32
+ "81" => "Refund pending",
33
+ "82" => "Refund uncertain",
34
+ "83" => "Refund refused",
35
+ "84" => "Payment declined by the acquirer",
36
+ "85" => "Refund processed by merchant",
37
+ "91" => "Payment processing",
38
+ "92" => "Payment uncertain",
39
+ "93" => "Payment refused",
40
+ "94" => "Refund declined by the acquirer",
41
+ "95" => "Payment processed by merchant",
42
+ "99" => "Being processed",
43
+ }
44
+
45
+ ERROR_CODES = {
46
+ "0020001002" => { :retry => true, :explanation => "Authorization failed, please retry" },
47
+ "0020001003" => { :retry => true, :explanation => "Authorization failed, please retry" },
48
+ "0020001004" => { :retry => true, :explanation => "Authorization failed, please retry" },
49
+ "0020001005" => { :retry => true, :explanation => "Authorization failed, please retry" },
50
+ "0020001006" => { :retry => true, :explanation => "Authorization failed, please retry" },
51
+ "0020001007" => { :retry => true, :explanation => "Authorization failed, please retry" },
52
+ "0020001008" => { :retry => true, :explanation => "Authorization failed, please retry" },
53
+ "0020001009" => { :retry => true, :explanation => "Authorization failed, please retry" },
54
+ "0020001010" => { :retry => true, :explanation => "Authorization failed, please retry" },
55
+ "0030001999" => { :retry => false, :explanation => "Our payment system is currently under maintenance, please try later" },
56
+ "0050001005" => { :retry => false, :explanation => "Expiry date error" },
57
+ "0050001007" => { :retry => false, :explanation => "Requested Operation code not allowed" },
58
+ "0050001008" => { :retry => false, :explanation => "Invalid delay value" },
59
+ "0050001010" => { :retry => false, :explanation => "Input date in invalid format" },
60
+ "0050001013" => { :retry => false, :explanation => "Unable to parse socket input stream" },
61
+ "0050001014" => { :retry => false, :explanation => "Error in parsing stream content" },
62
+ "0050001015" => { :retry => false, :explanation => "Currency error" },
63
+ "0050001016" => { :retry => false, :explanation => "Transaction still posted at end of wait" },
64
+ "0050001017" => { :retry => false, :explanation => "Sync value not compatible with delay value" },
65
+ "0050001019" => { :retry => false, :explanation => "Transaction duplicate of a pre-existing transaction" },
66
+ "0050001020" => { :retry => false, :explanation => "Acceptation code empty while required for the transaction" },
67
+ "0050001024" => { :retry => false, :explanation => "Maintenance acquirer differs from original transaction acquirer" },
68
+ "0050001025" => { :retry => false, :explanation => "Maintenance merchant differs from original transaction merchant" },
69
+ "0050001028" => { :retry => false, :explanation => "Maintenance operation not accurate for the original transaction" },
70
+ "0050001031" => { :retry => false, :explanation => "Host application unknown for the transaction" },
71
+ "0050001032" => { :retry => false, :explanation => "Unable to perform requested operation with requested currency" },
72
+ "0050001033" => { :retry => false, :explanation => "Maintenance card number differs from original transaction card number" },
73
+ "0050001034" => { :retry => false, :explanation => "Operation code not allowed" },
74
+ "0050001035" => { :retry => false, :explanation => "Exception occurred in socket input stream treatment" },
75
+ "0050001036" => { :retry => false, :explanation => "Card length does not correspond to an acceptable value for the brand" },
76
+ "0050001068" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
77
+ "0050001069" => { :retry => false, :explanation => "Invalid check for CardID and Brand" },
78
+ "0050001070" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
79
+ "0050001116" => { :retry => false, :explanation => "Unknown origin IP" },
80
+ "0050001117" => { :retry => false, :explanation => "No origin IP detected" },
81
+ "0050001118" => { :retry => false, :explanation => "Merchant configuration problem, please contact support" },
82
+ "020001001" => { :retry => true, :explanation => "Authorization failed, please retry" },
83
+ "10001001" => { :retry => false, :explanation => "Communication failure" },
84
+ "10001002" => { :retry => false, :explanation => "Communication failure" },
85
+ "10001003" => { :retry => false, :explanation => "Communication failure" },
86
+ "10001004" => { :retry => false, :explanation => "Communication failure" },
87
+ "10001005" => { :retry => false, :explanation => "Communication failure" },
88
+ "20001001" => { :retry => false, :explanation => "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later." },
89
+ "20001002" => { :retry => false, :explanation => "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later." },
90
+ "20001003" => { :retry => false, :explanation => "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later." },
91
+ "20001004" => { :retry => false, :explanation => "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later." },
92
+ "20001005" => { :retry => false, :explanation => "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later." },
93
+ "20001006" => { :retry => false, :explanation => "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later." },
94
+ "20001007" => { :retry => false, :explanation => "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later." },
95
+ "20001008" => { :retry => false, :explanation => "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later." },
96
+ "20001009" => { :retry => false, :explanation => "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later." },
97
+ "20001010" => { :retry => false, :explanation => "We received an unknown status for the transaction. We will contact your acquirer and update the status of the transaction within one working day. Please check the status later." },
98
+ "20001101" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
99
+ "20001111" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
100
+ "20002001" => { :retry => false, :explanation => "Origin for the response of the bank can not be checked" },
101
+ "20002002" => { :retry => false, :explanation => "Beneficiary account number has been modified during processing" },
102
+ "20002003" => { :retry => false, :explanation => "Amount has been modified during processing" },
103
+ "20002004" => { :retry => false, :explanation => "Currency has been modified during processing" },
104
+ "20002005" => { :retry => false, :explanation => "No feedback from the bank server has been detected" },
105
+ "30001001" => { :retry => false, :explanation => "Payment refused by the acquirer" },
106
+ "30001002" => { :retry => false, :explanation => "Duplicate request" },
107
+ "30001010" => { :retry => true, :explanation => "A technical problem occurred, please contact helpdesk" },
108
+ "30001011" => { :retry => true, :explanation => "A technical problem occurred, please contact helpdesk" },
109
+ "30001012" => { :retry => false, :explanation => "Card black listed - Contact acquirer" },
110
+ "30001051" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
111
+ "30001054" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
112
+ "30001057" => { :retry => true, :explanation => "Your merchant's acquirer is temporarily unavailable, please try later or choose another payment method." },
113
+ "30001058" => { :retry => true, :explanation => "Your merchant's acquirer is temporarily unavailable, please try later or choose another payment method." },
114
+ "30001090" => { :retry => false, :explanation => "CVC check required by front end and returned invalid by acquirer" },
115
+ "30001091" => { :retry => false, :explanation => "ZIP check required by front end and returned invalid by acquirer" },
116
+ "30001092" => { :retry => false, :explanation => "Address check required by front end and returned as invalid by acquirer." },
117
+ "30001100" => { :retry => false, :explanation => "Unauthorized buyer's country" },
118
+ "30001101" => { :retry => false, :explanation => "IP country <> card country" },
119
+ "30001102" => { :retry => false, :explanation => "Number of different countries too high" },
120
+ "30001110" => { :retry => false, :explanation => "If the problem persists, please contact Support, or go to paysafecard's card balance page (https://customer.cc.at.paysafecard.com/psccustomer/GetWelcomePanelServlet?language=en) to see when the amount reserved on your card will be available again." },
121
+ "30001120" => { :retry => false, :explanation => "IP address in merchant's black list" },
122
+ "30001130" => { :retry => false, :explanation => "BIN in merchant's black list" },
123
+ "30001140" => { :retry => false, :explanation => "Card in merchant's card blacklist" },
124
+ "30001141" => { :retry => false, :explanation => "Email in blacklist" },
125
+ "30001142" => { :retry => false, :explanation => "Passenger name in blacklist" },
126
+ "30001143" => { :retry => false, :explanation => "Card holder name in blacklist" },
127
+ "30001144" => { :retry => false, :explanation => "Passenger name different from owner name" },
128
+ "30001145" => { :retry => false, :explanation => "Time to departure too short" },
129
+ "30001150" => { :retry => false, :explanation => "Card not configured in the system for this customer (CSL)" },
130
+ "30001151" => { :retry => false, :explanation => "REF1 not allowed for this relationship (Contract number" },
131
+ "30001152" => { :retry => false, :explanation => "Card/Supplier Amount limit reached (CSL)" },
132
+ "30001153" => { :retry => false, :explanation => "Card not allowed for this supplier (Date out of contract bounds)" },
133
+ "30001154" => { :retry => false, :explanation => "You have reached the usage limit allowed" },
134
+ "30001155" => { :retry => false, :explanation => "You have reached the usage limit allowed" },
135
+ "30001156" => { :retry => false, :explanation => "You have reached the usage limit allowed" },
136
+ "30001157" => { :retry => false, :explanation => "Unauthorized IP country for itinerary" },
137
+ "30001158" => { :retry => false, :explanation => "email usage limit reached" },
138
+ "30001159" => { :retry => false, :explanation => "Unauthorized card country/IP country combination" },
139
+ "30001160" => { :retry => false, :explanation => "Postcode in highrisk group" },
140
+ "30001161" => { :retry => false, :explanation => "generic blacklist match" },
141
+ "30001180" => { :retry => false, :explanation => "maximum scoring reached" },
142
+ "30001997" => { :retry => false, :explanation => "Authorization canceled by simulation" },
143
+ "30001998" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
144
+ "30001999" => { :retry => true, :explanation => "Your merchant's acquirer is temporarily unavailable, please try later or choose another payment method." },
145
+ "30002001" => { :retry => false, :explanation => "Payment refused by the financial institution" },
146
+ "30021001" => { :retry => false, :explanation => "Call acquirer support call number." },
147
+ "30031001" => { :retry => false, :explanation => "Invalid merchant number." },
148
+ "30041001" => { :retry => false, :explanation => "Retain card." },
149
+ "30051001" => { :retry => false, :explanation => "Authorization declined" },
150
+ "30071001" => { :retry => false, :explanation => "Retain card - special conditions." },
151
+ "30121001" => { :retry => false, :explanation => "Invalid transaction" },
152
+ "30131001" => { :retry => false, :explanation => "Invalid amount" },
153
+ "30131002" => { :retry => false, :explanation => "You have reached the total amount allowed" },
154
+ "30141001" => { :retry => false, :explanation => "Invalid card number" },
155
+ "30151001" => { :retry => false, :explanation => "Unknown acquiring institution." },
156
+ "30171001" => { :retry => false, :explanation => "Payment method cancelled by the buyer" },
157
+ "30171002" => { :retry => false, :explanation => "The maximum time allowed is elapsed." },
158
+ "30191001" => { :retry => false, :explanation => "Try again later." },
159
+ "30201001" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
160
+ "30301001" => { :retry => false, :explanation => "Invalid format" },
161
+ "30311001" => { :retry => false, :explanation => "Unknown acquirer ID." },
162
+ "30331001" => { :retry => false, :explanation => "Card expired." },
163
+ "30341001" => { :retry => false, :explanation => "Suspicion of fraud." },
164
+ "30381001" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
165
+ "30401001" => { :retry => false, :explanation => "Invalid functionM." },
166
+ "30411001" => { :retry => false, :explanation => "Lost card." },
167
+ "30431001" => { :retry => false, :explanation => "Stolen card, pick up" },
168
+ "30511001" => { :retry => false, :explanation => "Insufficient funds." },
169
+ "30541001" => { :retry => false, :explanation => "Card expired." },
170
+ "30551001" => { :retry => false, :explanation => "Invalid PIN." },
171
+ "30561001" => { :retry => false, :explanation => "Card not in authorizer's database." },
172
+ "30571001" => { :retry => false, :explanation => "Transaction not permitted on card." },
173
+ "30581001" => { :retry => false, :explanation => "Transaction interdite au terminal" },
174
+ "30591001" => { :retry => false, :explanation => "Suspicion of fraud." },
175
+ "30601001" => { :retry => false, :explanation => "The merchant must contact the acquirer." },
176
+ "30611001" => { :retry => true, :explanation => "Amount exceeds card ceiling." },
177
+ "30621001" => { :retry => false, :explanation => "Restricted card." },
178
+ "30631001" => { :retry => false, :explanation => "Security policy not respected." },
179
+ "30641001" => { :retry => false, :explanation => "Amount changed from ref. trn." },
180
+ "30681001" => { :retry => false, :explanation => "Tardy response." },
181
+ "30751001" => { :retry => false, :explanation => "PIN entered incorrectly too often" },
182
+ "30761001" => { :retry => false, :explanation => "Card holder already contesting." },
183
+ "30771001" => { :retry => false, :explanation => "PIN entry required." },
184
+ "30811001" => { :retry => false, :explanation => "Message flow error." },
185
+ "30821001" => { :retry => false, :explanation => "Authorization center unavailable" },
186
+ "30831001" => { :retry => false, :explanation => "Authorization center unavailable" },
187
+ "30901001" => { :retry => false, :explanation => "Temporary system shutdown." },
188
+ "30911001" => { :retry => false, :explanation => "Acquirer unavailable." },
189
+ "30921001" => { :retry => false, :explanation => "Invalid card type for acquirer." },
190
+ "30941001" => { :retry => false, :explanation => "Duplicate transaction" },
191
+ "30961001" => { :retry => true, :explanation => "Processing temporarily not possible" },
192
+ "30971001" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
193
+ "30981001" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
194
+ "31011001" => { :retry => false, :explanation => "Unknown acceptance code" },
195
+ "31021001" => { :retry => false, :explanation => "Invalid currency" },
196
+ "31031001" => { :retry => false, :explanation => "Acceptance code missing" },
197
+ "31041001" => { :retry => false, :explanation => "Inactive card" },
198
+ "31051001" => { :retry => false, :explanation => "Merchant not active" },
199
+ "31061001" => { :retry => false, :explanation => "Invalid expiration date" },
200
+ "31071001" => { :retry => false, :explanation => "Interrupted host communication" },
201
+ "31081001" => { :retry => false, :explanation => "Card refused" },
202
+ "31091001" => { :retry => false, :explanation => "Invalid password" },
203
+ "31101001" => { :retry => false, :explanation => "Plafond transaction (majoré du bonus) dépassé" },
204
+ "31111001" => { :retry => false, :explanation => "Plafond mensuel (majoré du bonus) dépassé" },
205
+ "31121001" => { :retry => false, :explanation => "Plafond centre de facturation dépassé" },
206
+ "31131001" => { :retry => false, :explanation => "Plafond entreprise dépassé" },
207
+ "31141001" => { :retry => false, :explanation => "Code MCC du fournisseur non autorisé pour la carte" },
208
+ "31151001" => { :retry => false, :explanation => "Numéro SIRET du fournisseur non autorisé pour la carte" },
209
+ "31161001" => { :retry => false, :explanation => "This is not a valid online banking account" },
210
+ "32001004" => { :retry => false, :explanation => "A technical problem occurred, please try again." },
211
+ "39991001" => { :retry => false, :explanation => "A technical problem occurred, please contact the helpdesk of your acquirer" },
212
+ "40001001" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
213
+ "40001002" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
214
+ "40001003" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
215
+ "40001004" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
216
+ "40001005" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
217
+ "40001006" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
218
+ "40001007" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
219
+ "40001008" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
220
+ "40001009" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
221
+ "40001010" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
222
+ "40001011" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
223
+ "40001012" => { :retry => true, :explanation => "Your merchant's acquirer is temporarily unavailable, please try later or choose another payment method." },
224
+ "40001013" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
225
+ "40001016" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
226
+ "40001018" => { :retry => true, :explanation => "A technical problem occurred, please try again." },
227
+ "40001019" => { :retry => true, :explanation => "Sorry, an error occurred during processing. Please retry the operation (use back button of the browser). If problem persists, contact your merchant's helpdesk." },
228
+ "40001050" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
229
+ "40001134" => { :retry => true, :explanation => "Authentication failed, please retry or cancel." },
230
+ "40001135" => { :retry => true, :explanation => "Authentication temporary unavailable, please retry or cancel." },
231
+ "40001136" => { :retry => true, :explanation => "Technical problem with your browser, please retry or cancel" },
232
+ "40001137" => { :retry => true, :explanation => "Your bank access control server is temporary unavailable, please retry or cancel" },
233
+ "40001998" => { :retry => false, :explanation => "Temporary technical problem. Please retry a little bit later." },
234
+ "50001001" => { :retry => false, :explanation => "Unknown card type" },
235
+ "50001002" => { :retry => false, :explanation => "Card number format check failed for given card number." },
236
+ "50001003" => { :retry => false, :explanation => "Merchant data error" },
237
+ "50001004" => { :retry => false, :explanation => "Merchant identification missing" },
238
+ "50001005" => { :retry => false, :explanation => "Expiry date error" },
239
+ "50001006" => { :retry => false, :explanation => "Amount is not a number" },
240
+ "50001007" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
241
+ "50001008" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
242
+ "50001009" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
243
+ "50001010" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
244
+ "50001011" => { :retry => false, :explanation => "Brand not supported for that merchant" },
245
+ "50001012" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
246
+ "50001013" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
247
+ "50001014" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
248
+ "50001015" => { :retry => false, :explanation => "Invalid currency code" },
249
+ "50001016" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
250
+ "50001017" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
251
+ "50001018" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
252
+ "50001019" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
253
+ "50001020" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
254
+ "50001021" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
255
+ "50001022" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
256
+ "50001023" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
257
+ "50001024" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
258
+ "50001025" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
259
+ "50001026" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
260
+ "50001027" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
261
+ "50001028" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
262
+ "50001029" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
263
+ "50001030" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
264
+ "50001031" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
265
+ "50001032" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
266
+ "50001033" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
267
+ "50001034" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
268
+ "50001035" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
269
+ "50001036" => { :retry => false, :explanation => "Card length does not correspond to an acceptable value for the brand" },
270
+ "50001037" => { :retry => false, :explanation => "Purchasing card number for a regular merchant" },
271
+ "50001038" => { :retry => false, :explanation => "Non Purchasing card for a Purchasing card merchant" },
272
+ "50001039" => { :retry => false, :explanation => "Details sent for a non-Purchasing card merchant, please contact helpdesk" },
273
+ "50001040" => { :retry => false, :explanation => "Details not sent for a Purchasing card transaction, please contact helpdesk" },
274
+ "50001041" => { :retry => false, :explanation => "Payment detail validation failed" },
275
+ "50001042" => { :retry => false, :explanation => "Given transactions amounts (tax,discount,shipping,net,etc…) do not compute correctly together" },
276
+ "50001043" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
277
+ "50001044" => { :retry => false, :explanation => "No acquirer configured for this operation" },
278
+ "50001045" => { :retry => false, :explanation => "No UID configured for this operation" },
279
+ "50001046" => { :retry => false, :explanation => "Operation not allowed for the merchant" },
280
+ "50001047" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
281
+ "50001048" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
282
+ "50001049" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
283
+ "50001050" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
284
+ "50001051" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
285
+ "50001052" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
286
+ "50001053" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
287
+ "50001054" => { :retry => false, :explanation => "Card detection routine did not find any brand that matches" },
288
+ "50001055" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
289
+ "50001056" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
290
+ "50001057" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
291
+ "50001058" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
292
+ "50001059" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
293
+ "50001060" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
294
+ "50001061" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
295
+ "50001062" => { :retry => false, :explanation => "A technical problem occurred, please contact helpdesk" },
296
+ "50001063" => { :retry => false, :explanation => "Card Issue Number does not correspond to range or not present" },
297
+ "50001064" => { :retry => false, :explanation => "Start Date not valid or not present" },
298
+ "50001066" => { :retry => false, :explanation => "Format of CVC code invalid" },
299
+ "50001067" => { :retry => false, :explanation => "The merchant is not enrolled for 3D-Secure" },
300
+ "50001068" => { :retry => false, :explanation => "The card number or account number (PAN) is invalid" },
301
+ "50001069" => { :retry => false, :explanation => "Invalid check for CardID and Brand" },
302
+ "50001070" => { :retry => false, :explanation => "The ECI value given is either not supported, or in conflict with other data in the transaction" },
303
+ "50001071" => { :retry => false, :explanation => "Incomplete TRN demat" },
304
+ "50001072" => { :retry => false, :explanation => "Incomplete PAY demat" },
305
+ "50001073" => { :retry => false, :explanation => "No demat APP" },
306
+ "50001074" => { :retry => false, :explanation => "Authorisation too old" },
307
+ "50001075" => { :retry => false, :explanation => "VERRes was an error message" },
308
+ "50001076" => { :retry => false, :explanation => "DCP amount greater than autorisation amount" },
309
+ "50001077" => { :retry => false, :explanation => "Details negative amount" },
310
+ "50001078" => { :retry => false, :explanation => "Details negative quantity" },
311
+ "50001079" => { :retry => false, :explanation => "Could not decode/decompress received PARes (3D-Secure)" },
312
+ "50001080" => { :retry => false, :explanation => "Received PARes was an erereor message from ACS (3D-Secure)" },
313
+ "50001081" => { :retry => false, :explanation => "Received PARes format was invalid according to the 3DS specifications (3D-Secure)" },
314
+ "50001082" => { :retry => false, :explanation => "PAReq/PARes reconciliation failure (3D-Secure)" },
315
+ "50001084" => { :retry => false, :explanation => "Maximum amount reached" },
316
+ "50001087" => { :retry => false, :explanation => "The transaction type requires authentication, please check with your bank." },
317
+ "50001090" => { :retry => false, :explanation => "CVC missing at input, but CVC check asked" },
318
+ "50001091" => { :retry => false, :explanation => "ZIP missing at input, but ZIP check asked" },
319
+ "50001092" => { :retry => false, :explanation => "Address missing at input, but Address check asked" },
320
+ "50001095" => { :retry => false, :explanation => "Invalid date of birth" },
321
+ "50001096" => { :retry => false, :explanation => "Invalid commodity code" },
322
+ "50001097" => { :retry => false, :explanation => "The requested currency and brand are incompatible." },
323
+ "50001111" => { :retry => false, :explanation => "Data validation error" },
324
+ "50001113" => { :retry => false, :explanation => "This order has already been processed" },
325
+ "50001114" => { :retry => false, :explanation => "Error pre-payment check page access" },
326
+ "50001115" => { :retry => false, :explanation => "Request not received in secure mode" },
327
+ "50001116" => { :retry => false, :explanation => "Unknown IP address origin" },
328
+ "50001117" => { :retry => false, :explanation => "NO IP address origin" },
329
+ "50001118" => { :retry => false, :explanation => "Pspid not found or not correct" },
330
+ "50001119" => { :retry => false, :explanation => "Password incorrect or disabled due to numbers of errors" },
331
+ "50001120" => { :retry => false, :explanation => "Invalid currency" },
332
+ "50001121" => { :retry => false, :explanation => "Invalid number of decimals for the currency" },
333
+ "50001122" => { :retry => false, :explanation => "Currency not accepted by the merchant" },
334
+ "50001123" => { :retry => false, :explanation => "Card type not active" },
335
+ "50001124" => { :retry => false, :explanation => "Number of lines don't match with number of payments" },
336
+ "50001125" => { :retry => false, :explanation => "Format validation error" },
337
+ "50001126" => { :retry => false, :explanation => "Overflow in data capture requests for the original order" },
338
+ "50001127" => { :retry => false, :explanation => "The original order is not in a correct status" },
339
+ "50001128" => { :retry => false, :explanation => "missing authorization code for unauthorized order" },
340
+ "50001129" => { :retry => false, :explanation => "Overflow in refunds requests" },
341
+ "50001130" => { :retry => false, :explanation => "Error access to original order" },
342
+ "50001131" => { :retry => false, :explanation => "Error access to original history item" },
343
+ "50001132" => { :retry => false, :explanation => "The Selected Catalog is empty" },
344
+ "50001133" => { :retry => false, :explanation => "Duplicate request" },
345
+ "50001134" => { :retry => false, :explanation => "Authentication failed, please retry or cancel." },
346
+ "50001135" => { :retry => false, :explanation => "Authentication temporary unavailable, please retry or cancel." },
347
+ "50001136" => { :retry => false, :explanation => "Technical problem with your browser, please retry or cancel" },
348
+ "50001137" => { :retry => false, :explanation => "Your bank access control server is temporary unavailable, please retry or cancel" },
349
+ "50001150" => { :retry => false, :explanation => "Fraud Detection, Technical error (IP not valid)" },
350
+ "50001151" => { :retry => false, :explanation => "Fraud detection : technical error (IPCTY unknown or error)" },
351
+ "50001152" => { :retry => false, :explanation => "Fraud detection : technical error (CCCTY unknown or error)" },
352
+ "50001153" => { :retry => false, :explanation => "Overflow in redo-authorisation requests" },
353
+ "50001170" => { :retry => false, :explanation => "Dynamic BIN check failed" },
354
+ "50001171" => { :retry => false, :explanation => "Dynamic country check failed" },
355
+ "50001172" => { :retry => false, :explanation => "Error in Amadeus signature" },
356
+ "60000001" => { :retry => false, :explanation => "account number unknown" },
357
+ "60000003" => { :retry => false, :explanation => "not credited dd-mm-yy" },
358
+ "60000005" => { :retry => false, :explanation => "name/number do not correspond" },
359
+ "60000007" => { :retry => false, :explanation => "account number blocked" },
360
+ "60000008" => { :retry => false, :explanation => "specific direct debit block" },
361
+ "60000009" => { :retry => false, :explanation => "account number WKA" },
362
+ "60000010" => { :retry => false, :explanation => "administrative reason" },
363
+ "60000011" => { :retry => false, :explanation => "account number expired" },
364
+ "60000012" => { :retry => false, :explanation => "no direct debit authorisation given" },
365
+ "60000013" => { :retry => false, :explanation => "debit not approved" },
366
+ "60000014" => { :retry => false, :explanation => "double payment" },
367
+ "60000018" => { :retry => false, :explanation => "name/address/city not entered" },
368
+ "60001001" => { :retry => false, :explanation => "no original direct debit for revocation" },
369
+ "60001002" => { :retry => false, :explanation => "payer’s account number format error" },
370
+ "60001004" => { :retry => false, :explanation => "payer’s account at different bank" },
371
+ "60001005" => { :retry => false, :explanation => "payee’s account at different bank" },
372
+ "60001006" => { :retry => false, :explanation => "payee’s account number format error" },
373
+ "60001007" => { :retry => false, :explanation => "payer’s account number blocked" },
374
+ "60001008" => { :retry => false, :explanation => "payer’s account number expired" },
375
+ "60001009" => { :retry => false, :explanation => "payee’s account number expired" },
376
+ "60001010" => { :retry => false, :explanation => "direct debit not possible" },
377
+ "60001011" => { :retry => false, :explanation => "creditor payment not possible" },
378
+ "60001012" => { :retry => false, :explanation => "payer’s account number unknown WKA-number" },
379
+ "60001013" => { :retry => false, :explanation => "payee’s account number unknown WKA-number" },
380
+ "60001014" => { :retry => false, :explanation => "impermissible WKA transaction" },
381
+ "60001015" => { :retry => false, :explanation => "period for revocation expired" },
382
+ "60001017" => { :retry => false, :explanation => "reason for revocation not correct" },
383
+ "60001018" => { :retry => false, :explanation => "original run number not numeric" },
384
+ "60001019" => { :retry => false, :explanation => "payment ID incorrect" },
385
+ "60001020" => { :retry => false, :explanation => "amount not numeric" },
386
+ "60001021" => { :retry => false, :explanation => "amount zero not permitted" },
387
+ "60001022" => { :retry => false, :explanation => "negative amount not permitted" },
388
+ "60001023" => { :retry => false, :explanation => "payer and payee giro account number" },
389
+ "60001025" => { :retry => false, :explanation => "processing code (verwerkingscode) incorrect" },
390
+ "60001028" => { :retry => false, :explanation => "revocation not permitted" },
391
+ "60001029" => { :retry => false, :explanation => "guaranteed direct debit on giro account number" },
392
+ "60001030" => { :retry => false, :explanation => "NBC transaction type incorrect" },
393
+ "60001031" => { :retry => false, :explanation => "description too large" },
394
+ "60001032" => { :retry => false, :explanation => "book account number not issued" },
395
+ "60001034" => { :retry => false, :explanation => "book account number incorrect" },
396
+ "60001035" => { :retry => false, :explanation => "payer’s account number not numeric" },
397
+ "60001036" => { :retry => false, :explanation => "payer’s account number not eleven-proof" },
398
+ "60001037" => { :retry => false, :explanation => "payer’s account number not issued" },
399
+ "60001039" => { :retry => false, :explanation => "payer’s account number of DNB/BGC/BLA" },
400
+ "60001040" => { :retry => false, :explanation => "payee’s account number not numeric" },
401
+ "60001041" => { :retry => false, :explanation => "payee’s account number not eleven-proof" },
402
+ "60001042" => { :retry => false, :explanation => "payee’s account number not issued" },
403
+ "60001044" => { :retry => false, :explanation => "payee’s account number unknown" },
404
+ "60001050" => { :retry => false, :explanation => "payee’s name missing" },
405
+ "60001051" => { :retry => false, :explanation => "indicate payee’s bank account number instead of 3102" },
406
+ "60001052" => { :retry => false, :explanation => "no direct debit contract" },
407
+ "60001053" => { :retry => false, :explanation => "amount beyond bounds" },
408
+ "60001054" => { :retry => false, :explanation => "selective direct debit block" },
409
+ "60001055" => { :retry => false, :explanation => "original run number unknown" },
410
+ "60001057" => { :retry => false, :explanation => "payer’s name missing" },
411
+ "60001058" => { :retry => false, :explanation => "payee’s account number missing" },
412
+ "60001059" => { :retry => false, :explanation => "restore not permitted" },
413
+ "60001060" => { :retry => false, :explanation => "bank’s reference (navraaggegeven) missing" },
414
+ "60001061" => { :retry => false, :explanation => "BEC/GBK number incorrect" },
415
+ "60001062" => { :retry => false, :explanation => "BEC/GBK code incorrect" },
416
+ "60001087" => { :retry => false, :explanation => "book account number not numeric" },
417
+ "60001090" => { :retry => false, :explanation => "cancelled on request" },
418
+ "60001091" => { :retry => false, :explanation => "cancellation order executed" },
419
+ "60001092" => { :retry => false, :explanation => "cancelled instead of bended" },
420
+ "60001093" => { :retry => false, :explanation => "book account number is a shortened account number" },
421
+ "60001094" => { :retry => false, :explanation => "instructing party account number not identical with payer" },
422
+ "60001095" => { :retry => false, :explanation => "payee unknown GBK acceptor" },
423
+ "60001097" => { :retry => false, :explanation => "instructing party account number not identical with payee" },
424
+ "60001099" => { :retry => false, :explanation => "clearing not permitted" },
425
+ "60001101" => { :retry => false, :explanation => "payer’s account number not spaces" },
426
+ "60001102" => { :retry => false, :explanation => "PAN length not numeric" },
427
+ "60001103" => { :retry => false, :explanation => "PAN length outside limits" },
428
+ "60001104" => { :retry => false, :explanation => "track number not numeric" },
429
+ "60001105" => { :retry => false, :explanation => "track number not valid" },
430
+ "60001106" => { :retry => false, :explanation => "PAN sequence number not numeric" },
431
+ "60001107" => { :retry => false, :explanation => "domestic PAN not numeric" },
432
+ "60001108" => { :retry => false, :explanation => "domestic PAN not eleven-proof" },
433
+ "60001109" => { :retry => false, :explanation => "domestic PAN not issued" },
434
+ "60001110" => { :retry => false, :explanation => "foreign PAN not numeric" },
435
+ "60001111" => { :retry => false, :explanation => "card valid date not numeric" },
436
+ "60001112" => { :retry => false, :explanation => "book period number (boekperiodenr) not numeric" },
437
+ "60001113" => { :retry => false, :explanation => "transaction number not numeric" },
438
+ "60001114" => { :retry => false, :explanation => "transaction time not numeric" },
439
+ "60001115" => { :retry => false, :explanation => "transaction no valid time" },
440
+ "60001116" => { :retry => false, :explanation => "transaction date not numeric" },
441
+ "60001117" => { :retry => false, :explanation => "transaction no valid date" },
442
+ "60001118" => { :retry => false, :explanation => "STAN not numeric" },
443
+ "60001119" => { :retry => false, :explanation => "instructing party’s name missing" },
444
+ "60001120" => { :retry => false, :explanation => "foreign amount (bedrag-vv) not numeric" },
445
+ "60001122" => { :retry => false, :explanation => "rate (verrekenkoers) not numeric" },
446
+ "60001125" => { :retry => false, :explanation => "number of decimals (aantaldecimalen) incorrect" },
447
+ "60001126" => { :retry => false, :explanation => "tariff (tarifering) not B/O/S" },
448
+ "60001127" => { :retry => false, :explanation => "domestic costs (kostenbinnenland) not numeric" },
449
+ "60001128" => { :retry => false, :explanation => "domestic costs (kostenbinnenland) not higher than zero" },
450
+ "60001129" => { :retry => false, :explanation => "foreign costs (kostenbuitenland) not numeric" },
451
+ "60001130" => { :retry => false, :explanation => "foreign costs (kostenbuitenland) not higher than zero" },
452
+ "60001131" => { :retry => false, :explanation => "domestic costs (kostenbinnenland) not zero" },
453
+ "60001132" => { :retry => false, :explanation => "foreign costs (kostenbuitenland) not zero" },
454
+ "60001134" => { :retry => false, :explanation => "Euro record not fully filled in" },
455
+ "60001135" => { :retry => false, :explanation => "Client currency incorrect" },
456
+ "60001136" => { :retry => false, :explanation => "Amount NLG not numeric" },
457
+ "60001137" => { :retry => false, :explanation => "Amount NLG not higher than zero" },
458
+ "60001138" => { :retry => false, :explanation => "Amount NLG not equal to Amount" },
459
+ "60001139" => { :retry => false, :explanation => "Amount NLG incorrectly converted" },
460
+ "60001140" => { :retry => false, :explanation => "Amount EUR not numeric" },
461
+ "60001141" => { :retry => false, :explanation => "Amount EUR not greater than zero" },
462
+ "60001142" => { :retry => false, :explanation => "Amount EUR not equal to Amount" },
463
+ "60001143" => { :retry => false, :explanation => "Amount EUR incorrectly converted" },
464
+ "60001144" => { :retry => false, :explanation => "Client currency not NLG" },
465
+ "60001145" => { :retry => false, :explanation => "rate euro-vv (Koerseuro-vv) not numeric" },
466
+ "60001146" => { :retry => false, :explanation => "comma rate euro-vv (Kommakoerseuro-vv) incorrect" },
467
+ "60001147" => { :retry => false, :explanation => "acceptgiro distributor not valid" },
468
+ "60001148" => { :retry => false, :explanation => "Original run number and/or BRN are missing" },
469
+ "60001149" => { :retry => false, :explanation => "Amount/Account number/ BRN different" },
470
+ "60001150" => { :retry => false, :explanation => "Direct debit already revoked/restored" },
471
+ "60001151" => { :retry => false, :explanation => "Direct debit already reversed/revoked/restored" },
472
+ "60001153" => { :retry => false, :explanation => "Payer’s account number not known" }
473
+ }
474
+ end
475
+ end
476
+ end
477
+ end