LitleOnline 9.3.0 → 9.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/CHANGELOG +5 -2
- data/Rakefile +1 -1
- data/lib/Communications.rb +1 -1
- data/lib/LitleBatchRequest.rb +268 -150
- data/lib/LitleListeners.rb +119 -44
- data/lib/LitleOnlineRequest.rb +1 -1
- data/lib/LitleTransaction.rb +219 -112
- data/lib/XMLFields.rb +166 -18
- data/test/certification/certTest_batchAll.rb +282 -68
- data/test/unit/test_LitleAUBatch.rb +28 -0
- data/test/unit/test_LitleBatchRequest.rb +243 -109
- data/test/unit/test_LitleOnlineRequest.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ODVmZTNmOTY5YmQ2MjEwNmY3NmU3MTJkYmVmNDYzMDYyNTQ2ZmZlNA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MWE0MTBhMWVhODk5NmZiZTM2ODk2Zjk1MGFjMjM0ZDY5ZDkzYzRmZQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OTRkYzE5YTQ1YzllODk4MWY1ZWMwMTBhMzkxYzBhMDI2M2Q3MzhjYjdkODFk
|
10
|
+
YTFkNTA4NjNiYmVhZTM5ZTI1ZmE4YTg2MTM3ZWIyZDU0YmM3ZGRkOTcyYTg0
|
11
|
+
OWExOGM3N2VhMjg5YmJkNzM4ZTAyMWMzMDYzMTJlOWQ2MWM5ZGI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YTZmZjNlOTU5YjNhZmE1YjhmM2YyN2NmZmRiN2U4YzdlOTNlMGFiOGVkZGNh
|
14
|
+
MGU2MGY3NjMxMzM5MTIzZmNiMjc0MGIxYTU2ZTk3NjkzYTY2NThlYzA5ZGY1
|
15
|
+
NTMzMmI4Y2JjOTc2MWEyNGFjOTcwYWM4YTc3ODJlZjRjZmU4ZDg=
|
data/CHANGELOG
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
= LitleOnline CHANGELOG
|
2
2
|
|
3
|
-
==
|
3
|
+
==Version 9.3.1 (March 9, 2015)
|
4
|
+
*Feature: PFIF instruction transaction support was added
|
5
|
+
|
6
|
+
== Version 9.3.0
|
4
7
|
* Feature: Applepay support was added
|
5
8
|
* Feature: Secondary amount support was added
|
6
9
|
* Feature: Add support for new Batch transaction in version 9.3 schema
|
7
10
|
|
8
|
-
== Version 9.
|
11
|
+
== Version 9.0.0 (August 27,2014)
|
9
12
|
* Feature: Add support for new element in version 9 schema
|
10
13
|
|
11
14
|
== Version 8.27.0 (August 27,2014)
|
data/Rakefile
CHANGED
@@ -34,7 +34,7 @@ spec = Gem::Specification.new do |s|
|
|
34
34
|
s.description = File.read(File.join(File.dirname(__FILE__), 'DESCRIPTION'))
|
35
35
|
s.requirements =
|
36
36
|
[ 'Contact sdksupport@litle.com for more information' ]
|
37
|
-
s.version = "9.3.
|
37
|
+
s.version = "9.3.1"
|
38
38
|
s.author = "Litle & Co"
|
39
39
|
s.email = "sdksupport@litle.com"
|
40
40
|
s.homepage = "http://www.litle.com/developers"
|
data/lib/Communications.rb
CHANGED
@@ -41,7 +41,7 @@ module LitleOnline
|
|
41
41
|
# setup https or http post
|
42
42
|
url = URI.parse(litle_url)
|
43
43
|
|
44
|
-
response_xml = nil
|
44
|
+
response_xml = nil
|
45
45
|
https = Net::HTTP.new(url.host, url.port, proxy_addr, proxy_port)
|
46
46
|
if(url.scheme == 'https')
|
47
47
|
https.use_ssl = url.scheme=='https'
|
data/lib/LitleBatchRequest.rb
CHANGED
@@ -30,42 +30,51 @@ require_relative 'Configuration'
|
|
30
30
|
# to Litle.
|
31
31
|
#
|
32
32
|
module LitleOnline
|
33
|
-
|
34
33
|
class LitleBatchRequest
|
35
34
|
include XML::Mapping
|
36
|
-
def initialize
|
35
|
+
def initialize ()
|
37
36
|
#load configuration data
|
38
37
|
@config_hash = Configuration.new.config
|
39
|
-
|
38
|
+
|
40
39
|
@txn_counts = { :id=>nil,
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
40
|
+
:merchantId=>nil,
|
41
|
+
:auth=>{ :numAuths=>0, :authAmount=>0 },
|
42
|
+
:sale=>{ :numSales=>0, :saleAmount=>0 },
|
43
|
+
:credit=>{ :numCredits=>0, :creditAmount=>0 },
|
44
|
+
:numTokenRegistrations=>0,
|
45
|
+
:captureGivenAuth=>{ :numCaptureGivenAuths=>0, :captureGivenAuthAmount=>0 },
|
46
|
+
:forceCapture=>{ :numForceCaptures=>0, :forceCaptureAmount=>0 },
|
47
|
+
:authReversal=>{ :numAuthReversals=>0, :authReversalAmount=>0 },
|
48
|
+
:capture=>{ :numCaptures=>0, :captureAmount=>0 },
|
49
|
+
:echeckVerification=>{ :numEcheckVerification=>0, :echeckVerificationAmount=>0 },
|
50
|
+
:echeckCredit=>{ :numEcheckCredit=>0, :echeckCreditAmount=>0 },
|
51
|
+
:numEcheckRedeposit=>0,
|
52
|
+
:numEcheckPreNoteSale=>0,
|
53
|
+
:numEcheckPreNoteCredit=>0,
|
54
|
+
:payFacCredit=>{ :numPayFacCredit=>0, :payFacCreditAmount=>0 },
|
55
|
+
:submerchantCredit=>{ :numSubmerchantCredit=>0, :submerchantCreditAmount=>0 },
|
56
|
+
:reserveCredit=>{ :numReserveCredit=>0, :reserveCreditAmount=>0 },
|
57
|
+
:vendorCredit=>{ :numVendorCredit=>0, :vendorCreditAmount=>0 },
|
58
|
+
:physicalCheckCredit=>{ :numPhysicalCheckCredit=>0, :physicalCheckCreditAmount=>0 },
|
59
|
+
:payFacDebit=>{ :numPayFacDebit=>0, :payFacDebitAmount=>0 },
|
60
|
+
:submerchantDebit=>{ :numSubmerchantDebit=>0, :submerchantDebitAmount=>0 },
|
61
|
+
:reserveDebit=>{ :numReserveDebit=>0, :reserveDebitAmount=>0 },
|
62
|
+
:vendorDebit=>{ :numVendorDebit=>0, :vendorDebitAmount=>0 },
|
63
|
+
:physicalCheckDebit=>{ :numPhysicalCheckDebit=>0, :physicalCheckDebitAmount=>0 },
|
64
|
+
:echeckSale=>{ :numEcheckSales=>0, :echeckSalesAmount=>0 },
|
65
|
+
:numUpdateCardValidationNumOnTokens=>0,
|
66
|
+
:numAccountUpdates=>0,
|
67
|
+
:total=>0,
|
68
|
+
:numCancelSubscriptions=>0,
|
69
|
+
:numUpdateSubscriptions=>0,
|
70
|
+
:numCreatePlans=>0,
|
71
|
+
:numUpdatePlans=>0,
|
72
|
+
:activate=>{:numActivates=>0, :activateAmount=>0},
|
73
|
+
:numDeactivates=>0,
|
74
|
+
:load=>{:numLoads=>0, :loadAmount=>0},
|
75
|
+
:unload=>{:numUnloads=>0, :unloadAmount=>0},
|
76
|
+
:numBalanceInquirys=>0,
|
77
|
+
:merchantSdk=>nil
|
69
78
|
}
|
70
79
|
@litle_txn = LitleTransaction.new
|
71
80
|
@path_to_batch = nil
|
@@ -73,26 +82,30 @@ module LitleOnline
|
|
73
82
|
@MAX_TXNS_IN_BATCH = 100000
|
74
83
|
@au_batch = nil
|
75
84
|
end
|
76
|
-
|
85
|
+
#TODO:change this implementation
|
86
|
+
def set_merchantId_for_txn_counts(merchantId)
|
87
|
+
@txn_counts[:merchantId]=merchantId
|
88
|
+
end
|
89
|
+
|
77
90
|
def create_new_batch(path)
|
78
91
|
ts = Time::now.to_i.to_s
|
79
92
|
begin
|
80
93
|
ts += Time::now.nsec.to_s
|
81
94
|
rescue NoMethodError # ruby 1.8.7 fix
|
82
95
|
ts += Time::now.usec.to_s
|
83
|
-
end
|
96
|
+
end
|
84
97
|
if(File.file?(path)) then
|
85
98
|
raise ArgumentError, "Entered a file not a path."
|
86
99
|
end
|
87
|
-
|
100
|
+
|
88
101
|
if(path[-1,1] != '/' && path[-1,1] != '\\') then
|
89
102
|
path = path + File::SEPARATOR
|
90
103
|
end
|
91
104
|
if(!File.directory?(path)) then
|
92
105
|
Dir.mkdir(path)
|
93
|
-
end
|
94
|
-
|
95
|
-
@path_to_batch = path + 'batch_' + ts
|
106
|
+
end
|
107
|
+
|
108
|
+
@path_to_batch = path + 'batch_' + ts
|
96
109
|
@txn_file = @path_to_batch + '_txns'
|
97
110
|
if(File.file?(@path_to_batch)) then
|
98
111
|
create_new_batch(path)
|
@@ -105,20 +118,20 @@ module LitleOnline
|
|
105
118
|
file.write("")
|
106
119
|
end
|
107
120
|
end
|
108
|
-
|
121
|
+
|
109
122
|
def has_transactions?
|
110
123
|
!@txn_counts[:total].eql?(0)
|
111
124
|
end
|
112
|
-
|
125
|
+
|
113
126
|
def open_existing_batch(pathToBatchFile)
|
114
127
|
if(!File.file?(pathToBatchFile)) then
|
115
128
|
raise ArgumentError, "No batch file exists at the passed location!"
|
116
|
-
end
|
117
|
-
|
129
|
+
end
|
130
|
+
|
118
131
|
if((pathToBatchFile =~ /batch_\d+.closed-\d+\z/) != nil) then
|
119
|
-
raise ArgumentError, "The passed batch file is closed!"
|
120
|
-
end
|
121
|
-
|
132
|
+
raise ArgumentError, "The passed batch file is closed!"
|
133
|
+
end
|
134
|
+
|
122
135
|
@txn_file = pathToBatchFile + '_txns'
|
123
136
|
@path_to_batch = pathToBatchFile
|
124
137
|
temp_counts = File.open(@path_to_batch, "rb") { |f| Marshal.load(f) }
|
@@ -130,49 +143,48 @@ module LitleOnline
|
|
130
143
|
create_new_batch(File.dirname(pathToBatchFile))
|
131
144
|
@au_batch = au_batch
|
132
145
|
elsif
|
133
|
-
|
134
|
-
end
|
146
|
+
@txn_counts = temp_counts
|
147
|
+
end
|
135
148
|
end
|
136
|
-
|
137
|
-
|
149
|
+
|
138
150
|
def au_batch?
|
139
151
|
!@au_batch.nil?
|
140
152
|
end
|
141
|
-
|
153
|
+
|
142
154
|
def close_batch(txn_location = @txn_file)
|
143
155
|
header = build_batch_header(@txn_counts)
|
144
156
|
File.rename(@path_to_batch, @path_to_batch + '.closed-' + @txn_counts[:total].to_s)
|
145
157
|
@path_to_batch = @path_to_batch + '.closed-' + @txn_counts[:total].to_s
|
146
158
|
File.open(@path_to_batch, 'w') do |fo|
|
147
|
-
|
148
|
-
|
149
|
-
|
159
|
+
# fo.puts header
|
160
|
+
put_header = !au_batch? || has_transactions?
|
161
|
+
fo.puts header if put_header
|
150
162
|
File.foreach(txn_location) do |li|
|
151
163
|
fo.puts li
|
152
164
|
end
|
153
|
-
|
154
|
-
|
165
|
+
# fo.puts('</batchRequest>')
|
166
|
+
fo.puts('</batchRequest>') if put_header
|
155
167
|
end
|
156
168
|
File.delete(txn_location)
|
157
169
|
if(@au_batch != nil) then
|
158
170
|
@au_batch.close_batch
|
159
|
-
end
|
160
|
-
|
171
|
+
end
|
172
|
+
|
161
173
|
end
|
162
|
-
|
174
|
+
|
163
175
|
def authorization(options)
|
164
176
|
transaction = @litle_txn.authorization(options)
|
165
177
|
@txn_counts[:auth][:numAuths] += 1
|
166
178
|
@txn_counts[:auth][:authAmount] += options['amount'].to_i
|
167
|
-
|
179
|
+
|
168
180
|
add_txn_to_batch(transaction, :authorization, options)
|
169
181
|
end
|
170
|
-
|
182
|
+
|
171
183
|
def sale(options)
|
172
184
|
transaction = @litle_txn.sale(options)
|
173
185
|
@txn_counts[:sale][:numSales] += 1
|
174
186
|
@txn_counts[:sale][:saleAmount] += options['amount'].to_i
|
175
|
-
|
187
|
+
|
176
188
|
add_txn_to_batch(transaction, :sale, options)
|
177
189
|
end
|
178
190
|
|
@@ -180,185 +192,267 @@ module LitleOnline
|
|
180
192
|
transaction = @litle_txn.credit(options)
|
181
193
|
@txn_counts[:credit][:numCredits] += 1
|
182
194
|
@txn_counts[:credit][:creditAmount] += options['amount'].to_i
|
183
|
-
|
195
|
+
|
184
196
|
add_txn_to_batch(transaction, :credit, options)
|
185
197
|
end
|
186
|
-
|
198
|
+
|
187
199
|
def auth_reversal(options)
|
188
200
|
transaction = @litle_txn.auth_reversal(options)
|
189
|
-
@txn_counts[:authReversal][:numAuthReversals] += 1
|
201
|
+
@txn_counts[:authReversal][:numAuthReversals] += 1
|
190
202
|
@txn_counts[:authReversal][:authReversalAmount] += options['amount'].to_i
|
191
|
-
|
203
|
+
|
192
204
|
add_txn_to_batch(transaction, :authReversal, options)
|
193
205
|
end
|
194
206
|
|
195
207
|
def cancel_subscription(options)
|
196
208
|
transaction = @litle_txn.cancel_subscription(options)
|
197
209
|
@txn_counts[:numCancelSubscriptions] += 1
|
198
|
-
|
210
|
+
|
199
211
|
add_txn_to_batch(transaction, :cancelSubscription, options)
|
200
212
|
end
|
201
213
|
|
202
214
|
def update_subscription(options)
|
203
215
|
transaction = @litle_txn.update_subscription(options)
|
204
216
|
@txn_counts[:numUpdateSubscriptions] += 1
|
205
|
-
|
217
|
+
|
206
218
|
add_txn_to_batch(transaction, :updateSubscription, options)
|
207
219
|
end
|
208
220
|
|
209
221
|
def create_plan(options)
|
210
|
-
transaction = @litle_txn.create_plan(options)
|
222
|
+
transaction = @litle_txn.create_plan(options)
|
211
223
|
@txn_counts[:numCreatePlans] += 1
|
212
|
-
|
224
|
+
|
213
225
|
add_txn_to_batch(transaction, :createPlan, options)
|
214
226
|
end
|
215
|
-
|
227
|
+
|
216
228
|
def update_plan(options)
|
217
|
-
transaction = @litle_txn.update_plan(options)
|
229
|
+
transaction = @litle_txn.update_plan(options)
|
218
230
|
@txn_counts[:numUpdatePlans] += 1
|
219
|
-
|
231
|
+
|
220
232
|
add_txn_to_batch(transaction, :updatePlan, options)
|
221
233
|
end
|
222
234
|
|
223
235
|
def activate(options)
|
224
|
-
transaction = @litle_txn.activate(options)
|
236
|
+
transaction = @litle_txn.activate(options)
|
225
237
|
@txn_counts[:numActivates] += 1
|
226
|
-
|
238
|
+
|
227
239
|
add_txn_to_batch(transaction, :activate, options)
|
228
240
|
end
|
229
241
|
|
230
242
|
def deactivate(options)
|
231
|
-
transaction = @litle_txn.deactivate(options)
|
243
|
+
transaction = @litle_txn.deactivate(options)
|
232
244
|
@txn_counts[:numDeactivates] += 1
|
233
|
-
|
245
|
+
|
234
246
|
add_txn_to_batch(transaction, :deactivate, options)
|
235
247
|
end
|
236
248
|
|
237
249
|
def load_request(options)
|
238
|
-
transaction = @litle_txn.load_request(options)
|
250
|
+
transaction = @litle_txn.load_request(options)
|
239
251
|
@txn_counts[:numLoads] += 1
|
240
|
-
|
252
|
+
|
241
253
|
add_txn_to_batch(transaction, :load, options)
|
242
254
|
end
|
243
255
|
|
244
256
|
def unload_request(options)
|
245
|
-
transaction = @litle_txn.unload_request(options)
|
257
|
+
transaction = @litle_txn.unload_request(options)
|
246
258
|
@txn_counts[:numunLoads] += 1
|
247
|
-
|
259
|
+
|
248
260
|
add_txn_to_batch(transaction, :unload, options)
|
249
261
|
end
|
250
262
|
|
251
263
|
def balance_inquiry(options)
|
252
|
-
transaction = @litle_txn.balance_inquiry(options)
|
264
|
+
transaction = @litle_txn.balance_inquiry(options)
|
253
265
|
@txn_counts[:numBalanceInquirys] += 1
|
254
|
-
|
266
|
+
|
255
267
|
add_txn_to_batch(transaction, :balanceInquirys, options)
|
256
268
|
end
|
269
|
+
|
257
270
|
def register_token_request(options)
|
258
271
|
transaction = @litle_txn.register_token_request(options)
|
259
272
|
@txn_counts[:numTokenRegistrations] += 1
|
260
|
-
|
273
|
+
|
261
274
|
add_txn_to_batch(transaction, :numTokenRegistrations, options)
|
262
275
|
end
|
263
|
-
|
276
|
+
|
264
277
|
def update_card_validation_num_on_token(options)
|
265
278
|
transaction = @litle_txn.update_card_validation_num_on_token(options)
|
266
279
|
@txn_counts[:numUpdateCardValidationNumOnTokens] += 1
|
267
|
-
|
280
|
+
|
268
281
|
add_txn_to_batch(transaction, :numUpdateCardValidationNumOnTokens, options)
|
269
282
|
end
|
270
|
-
|
283
|
+
|
271
284
|
def force_capture(options)
|
272
285
|
transaction = @litle_txn.force_capture(options)
|
273
286
|
@txn_counts[:forceCapture][:numForceCaptures] += 1
|
274
287
|
@txn_counts[:forceCapture][:forceCaptureAmount] += options['amount'].to_i
|
275
|
-
|
288
|
+
|
276
289
|
add_txn_to_batch(transaction, :forceCapture, options)
|
277
290
|
end
|
278
|
-
|
291
|
+
|
279
292
|
def capture(options)
|
280
293
|
transaction = @litle_txn.capture(options)
|
281
294
|
@txn_counts[:capture][:numCaptures] += 1
|
282
295
|
@txn_counts[:capture][:captureAmount] += options['amount'].to_i
|
283
|
-
|
296
|
+
|
284
297
|
add_txn_to_batch(transaction, :capture, options)
|
285
298
|
end
|
286
|
-
|
299
|
+
|
287
300
|
def capture_given_auth(options)
|
288
301
|
transaction = @litle_txn.capture_given_auth(options)
|
289
302
|
@txn_counts[:captureGivenAuth][:numCaptureGivenAuths] += 1
|
290
303
|
@txn_counts[:captureGivenAuth][:captureGivenAuthAmount] += options['amount'].to_i
|
291
|
-
|
304
|
+
|
292
305
|
add_txn_to_batch(transaction, :captureGivenAuth, options)
|
293
306
|
end
|
294
|
-
|
307
|
+
|
295
308
|
def echeck_verification(options)
|
296
309
|
transaction = @litle_txn.echeck_verification(options)
|
297
310
|
@txn_counts[:echeckVerification][:numEcheckVerification] += 1
|
298
311
|
@txn_counts[:echeckVerification][:echeckVerificationAmount] += options['amount'].to_i
|
299
|
-
|
312
|
+
|
300
313
|
add_txn_to_batch(transaction, :echeckVerification, options)
|
301
314
|
end
|
302
|
-
|
315
|
+
|
303
316
|
def echeck_credit(options)
|
304
317
|
transaction = @litle_txn.echeck_credit(options)
|
305
318
|
@txn_counts[:echeckCredit][:numEcheckCredit] += 1
|
306
319
|
@txn_counts[:echeckCredit][:echeckCreditAmount] += options['amount'].to_i
|
307
|
-
|
320
|
+
|
308
321
|
add_txn_to_batch(transaction, :echeckCredit, options)
|
309
322
|
end
|
310
|
-
|
323
|
+
|
311
324
|
def echeck_redeposit(options)
|
312
325
|
transaction = @litle_txn.echeck_redeposit(options)
|
313
326
|
@txn_counts[:numEcheckRedeposit] += 1
|
314
|
-
|
327
|
+
|
315
328
|
add_txn_to_batch(transaction, :echeckRedeposit, options)
|
316
329
|
end
|
317
|
-
|
330
|
+
|
318
331
|
def echeck_pre_note_sale(options)
|
319
332
|
transaction = @litle_txn.echeck_pre_note_sale(options)
|
320
333
|
@txn_counts[:numEcheckPreNoteSale] += 1
|
321
|
-
|
334
|
+
|
322
335
|
add_txn_to_batch(transaction, :echeckPreNoteSale, options)
|
323
336
|
end
|
324
|
-
|
337
|
+
|
325
338
|
def echeck_pre_note_credit(options)
|
326
339
|
transaction = @litle_txn.echeck_pre_note_credit(options)
|
327
340
|
@txn_counts[:numEcheckPreNoteCredit] += 1
|
328
|
-
|
341
|
+
|
329
342
|
add_txn_to_batch(transaction, :echeckPreNoteCredit, options)
|
330
343
|
end
|
331
|
-
|
344
|
+
|
345
|
+
def payFac_credit(options)
|
346
|
+
transaction = @litle_txn.payFac_credit(options)
|
347
|
+
@txn_counts[:payFacCredit][:numPayFacCredit] += 1
|
348
|
+
@txn_counts[:payFacCredit][:payFacCreditAmount] += options['amount'].to_i
|
349
|
+
|
350
|
+
add_txn_to_batch(transaction, :payFacCredit, options)
|
351
|
+
end
|
352
|
+
|
353
|
+
def submerchant_credit(options)
|
354
|
+
transaction = @litle_txn.submerchant_credit(options)
|
355
|
+
@txn_counts[:submerchantCredit][:numSubmerchantCredit] += 1
|
356
|
+
@txn_counts[:submerchantCredit][:submerchantCreditAmount] += options['amount'].to_i
|
357
|
+
|
358
|
+
add_txn_to_batch(transaction, :submerchantCredit, options)
|
359
|
+
end
|
360
|
+
|
361
|
+
def reserve_credit(options)
|
362
|
+
transaction = @litle_txn.reserve_credit(options)
|
363
|
+
@txn_counts[:reserveCredit][:numReserveCredit] += 1
|
364
|
+
@txn_counts[:reserveCredit][:reserveCreditAmount] += options['amount'].to_i
|
365
|
+
|
366
|
+
add_txn_to_batch(transaction, :reserveCredit, options)
|
367
|
+
end
|
368
|
+
|
369
|
+
def vendor_credit(options)
|
370
|
+
transaction = @litle_txn.vendor_credit(options)
|
371
|
+
@txn_counts[:vendorCredit][:numVendorCredit] += 1
|
372
|
+
@txn_counts[:vendorCredit][:vendorCreditAmount] += options['amount'].to_i
|
373
|
+
|
374
|
+
add_txn_to_batch(transaction, :vendorCredit, options)
|
375
|
+
end
|
376
|
+
|
377
|
+
def physical_check_credit(options)
|
378
|
+
transaction = @litle_txn.physical_check_credit(options)
|
379
|
+
@txn_counts[:physicalCheckCredit][:numPhysicalCheckCredit] += 1
|
380
|
+
@txn_counts[:physicalCheckCredit][:physicalCheckCreditAmount] += options['amount'].to_i
|
381
|
+
|
382
|
+
add_txn_to_batch(transaction, :physicalCheckCredit, options)
|
383
|
+
end
|
384
|
+
|
385
|
+
def payFac_debit(options)
|
386
|
+
transaction = @litle_txn.payFac_debit(options)
|
387
|
+
@txn_counts[:payFacDebit][:numPayFacDebit] += 1
|
388
|
+
@txn_counts[:payFacDebit][:payFacDebitAmount] += options['amount'].to_i
|
389
|
+
|
390
|
+
add_txn_to_batch(transaction, :payFacDebit, options)
|
391
|
+
end
|
392
|
+
|
393
|
+
def submerchant_debit(options)
|
394
|
+
transaction = @litle_txn.submerchant_debit(options)
|
395
|
+
@txn_counts[:submerchantDebit][:numSubmerchantDebit] += 1
|
396
|
+
@txn_counts[:submerchantDebit][:submerchantDebitAmount] += options['amount'].to_i
|
397
|
+
|
398
|
+
add_txn_to_batch(transaction, :submerchantDebit, options)
|
399
|
+
end
|
400
|
+
|
401
|
+
def reserve_debit(options)
|
402
|
+
transaction = @litle_txn.reserve_debit(options)
|
403
|
+
@txn_counts[:reserveDebit][:numReserveDebit] += 1
|
404
|
+
@txn_counts[:reserveDebit][:reserveDebitAmount] += options['amount'].to_i
|
405
|
+
|
406
|
+
add_txn_to_batch(transaction, :reserveDebit, options)
|
407
|
+
end
|
408
|
+
|
409
|
+
def vendor_debit(options)
|
410
|
+
transaction = @litle_txn.vendor_debit(options)
|
411
|
+
@txn_counts[:vendorDebit][:numVendorDebit] += 1
|
412
|
+
@txn_counts[:vendorDebit][:vendorDebitAmount] += options['amount'].to_i
|
413
|
+
|
414
|
+
add_txn_to_batch(transaction, :vendorDebit, options)
|
415
|
+
end
|
416
|
+
|
417
|
+
def physical_check_debit(options)
|
418
|
+
transaction = @litle_txn.physical_check_debit(options)
|
419
|
+
@txn_counts[:physicalCheckDebit][:numPhysicalCheckDebit] += 1
|
420
|
+
@txn_counts[:physicalCheckDebit][:physicalCheckDebitAmount] += options['amount'].to_i
|
421
|
+
|
422
|
+
add_txn_to_batch(transaction, :physicalCheckDebit, options)
|
423
|
+
end
|
424
|
+
|
332
425
|
def echeck_sale(options)
|
333
426
|
transaction = @litle_txn.echeck_sale(options)
|
334
427
|
@txn_counts[:echeckSale][:numEcheckSales] += 1
|
335
428
|
@txn_counts[:echeckSale][:echeckSalesAmount] += options['amount'].to_i
|
336
|
-
|
429
|
+
|
337
430
|
add_txn_to_batch(transaction, :echeckSale, options)
|
338
431
|
end
|
339
|
-
|
432
|
+
|
340
433
|
def account_update(options)
|
341
|
-
|
434
|
+
|
342
435
|
if(@au_batch == nil) then
|
343
436
|
@au_batch = LitleAUBatch.new
|
344
437
|
@au_batch.create_new_batch(File.dirname(@path_to_batch))
|
345
|
-
end
|
438
|
+
end
|
346
439
|
@au_batch.account_update(options)
|
347
440
|
end
|
348
|
-
|
441
|
+
|
349
442
|
def get_counts_and_amounts
|
350
443
|
return @txn_counts
|
351
444
|
end
|
445
|
+
|
352
446
|
def get_batch_name
|
353
447
|
return @path_to_batch
|
354
448
|
end
|
449
|
+
|
355
450
|
def get_au_batch
|
356
451
|
return @au_batch
|
357
452
|
end
|
358
|
-
|
359
|
-
|
453
|
+
|
360
454
|
private
|
361
|
-
|
455
|
+
|
362
456
|
def add_txn_to_batch(transaction, type, options)
|
363
457
|
@txn_counts[:total] += 1
|
364
458
|
xml = transaction.save_to_xml.to_s
|
@@ -374,10 +468,10 @@ module LitleOnline
|
|
374
468
|
create_new_batch(path)
|
375
469
|
end
|
376
470
|
end
|
377
|
-
|
471
|
+
|
378
472
|
def build_batch_header(options)
|
379
473
|
request = BatchRequest.new
|
380
|
-
|
474
|
+
|
381
475
|
request.numAuths = @txn_counts[:auth][:numAuths]
|
382
476
|
request.authAmount = @txn_counts[:auth][:authAmount]
|
383
477
|
request.numSales = @txn_counts[:sale][:numSales]
|
@@ -398,6 +492,29 @@ module LitleOnline
|
|
398
492
|
request.numEcheckRedeposit = @txn_counts[:numEcheckRedeposit]
|
399
493
|
request.numEcheckPreNoteSale = @txn_counts[:numEcheckPreNoteSale]
|
400
494
|
request.numEcheckPreNoteCredit = @txn_counts[:numEcheckPreNoteCredit]
|
495
|
+
|
496
|
+
request.numPayFacCredit = @txn_counts[:payFacCredit][:numPayFacCredit]
|
497
|
+
request.payFacCreditAmount = @txn_counts[:payFacCredit][:payFacCreditAmount]
|
498
|
+
request.numSubmerchantCredit = @txn_counts[:submerchantCredit][:numSubmerchantCredit]
|
499
|
+
request.submerchantCreditAmount = @txn_counts[:submerchantCredit][:submerchantCreditAmount]
|
500
|
+
request.numReserveCredit = @txn_counts[:reserveCredit][:numReserveCredit]
|
501
|
+
request.reserveCreditAmount = @txn_counts[:reserveCredit][:reserveCreditAmount]
|
502
|
+
request.numVendorCredit = @txn_counts[:vendorCredit][:numVendorCredit]
|
503
|
+
request.vendorCreditAmount = @txn_counts[:vendorCredit][:vendorCreditAmount]
|
504
|
+
request.numPhysicalCheckCredit = @txn_counts[:physicalCheckCredit][:numPhysicalCheckCredit]
|
505
|
+
request.physicalCheckCreditAmount = @txn_counts[:physicalCheckCredit][:physicalCheckCreditAmount]
|
506
|
+
|
507
|
+
request.numPayFacDebit = @txn_counts[:payFacDebit][:numPayFacDebit]
|
508
|
+
request.payFacDebitAmount = @txn_counts[:payFacDebit][:payFacDebitAmount]
|
509
|
+
request.numSubmerchantDebit = @txn_counts[:submerchantDebit][:numSubmerchantDebit]
|
510
|
+
request.submerchantDebitAmount = @txn_counts[:submerchantDebit][:submerchantDebitAmount]
|
511
|
+
request.numReserveDebit = @txn_counts[:reserveDebit][:numReserveDebit]
|
512
|
+
request.reserveDebitAmount = @txn_counts[:reserveDebit][:reserveDebitAmount]
|
513
|
+
request.numVendorDebit = @txn_counts[:vendorDebit][:numVendorDebit]
|
514
|
+
request.vendorDebitAmount = @txn_counts[:vendorDebit][:vendorDebitAmount]
|
515
|
+
request.numPhysicalCheckDebit = @txn_counts[:physicalCheckDebit][:numPhysicalCheckDebit]
|
516
|
+
request.physicalCheckDebitAmount = @txn_counts[:physicalCheckDebit][:physicalCheckDebitAmount]
|
517
|
+
|
401
518
|
request.numEcheckCredit = @txn_counts[:echeckCredit][:numEcheckCredit]
|
402
519
|
request.echeckCreditAmount = @txn_counts[:echeckCredit][:echeckCreditAmount]
|
403
520
|
request.numEcheckVerification = @txn_counts[:echeckVerification][:numEcheckVerification]
|
@@ -419,61 +536,61 @@ module LitleOnline
|
|
419
536
|
request.unloadAmount =@txn_counts[:unload][:unloadAmount]
|
420
537
|
request.numBalanceInquirys =@txn_counts[:numBalanceInquirys]
|
421
538
|
header = request.save_to_xml.to_s
|
422
|
-
header['/>']= '>'
|
539
|
+
header['/>']= '>'
|
423
540
|
|
424
541
|
return header
|
425
542
|
end
|
426
|
-
|
543
|
+
|
427
544
|
def get_config(field, options)
|
428
545
|
options[field.to_s] == nil ? @config_hash[field.to_s] : options[field.to_s]
|
429
546
|
end
|
430
|
-
|
547
|
+
|
431
548
|
def get_merchant_id(options)
|
432
|
-
options[
|
549
|
+
options[:merchantId] || @config_hash['currency_merchant_map']['DEFAULT']
|
433
550
|
end
|
434
551
|
end
|
435
|
-
|
552
|
+
|
436
553
|
private
|
437
|
-
|
554
|
+
|
438
555
|
# IF YOU ARE A MERCHANT, DON'T LOOK HERE. IT'S SCARY!
|
439
|
-
|
556
|
+
|
440
557
|
class LitleAUBatch
|
441
558
|
include XML::Mapping
|
442
559
|
def initialize
|
443
560
|
#load configuration data
|
444
561
|
@config_hash = Configuration.new.config
|
445
|
-
|
562
|
+
|
446
563
|
@txn_counts = { :id=>nil,
|
447
|
-
|
448
|
-
|
449
|
-
|
564
|
+
:merchantId=>nil,
|
565
|
+
:numAccountUpdates=>0,
|
566
|
+
:total=>0
|
450
567
|
}
|
451
568
|
@litle_txn = LitleTransaction.new
|
452
569
|
@path_to_batch = nil
|
453
570
|
@txn_file = nil
|
454
571
|
@MAX_TXNS_IN_BATCH = 100000
|
455
572
|
end
|
456
|
-
|
573
|
+
|
457
574
|
def create_new_batch(path)
|
458
575
|
ts = Time::now.to_i.to_s
|
459
576
|
begin
|
460
577
|
ts += Time::now.nsec.to_s
|
461
578
|
rescue NoMethodError # ruby 1.8.7 fix
|
462
579
|
ts += Time::now.usec.to_s
|
463
|
-
end
|
464
|
-
|
580
|
+
end
|
581
|
+
|
465
582
|
if(File.file?(path)) then
|
466
583
|
raise ArgumentError, "Entered a file not a path."
|
467
584
|
end
|
468
|
-
|
585
|
+
|
469
586
|
if(path[-1,1] != '/' && path[-1,1] != '\\') then
|
470
587
|
path = path + File::SEPARATOR
|
471
588
|
end
|
472
589
|
if(!File.directory?(path)) then
|
473
590
|
Dir.mkdir(path)
|
474
|
-
end
|
475
|
-
|
476
|
-
@path_to_batch = path + 'batch_' + ts
|
591
|
+
end
|
592
|
+
|
593
|
+
@path_to_batch = path + 'batch_' + ts
|
477
594
|
@txn_file = @path_to_batch + '_txns'
|
478
595
|
if(File.file?(@path_to_batch)) then
|
479
596
|
create_new_batch(path)
|
@@ -486,32 +603,32 @@ module LitleOnline
|
|
486
603
|
file.write("")
|
487
604
|
end
|
488
605
|
end
|
489
|
-
|
606
|
+
|
490
607
|
def open_existing_batch(pathToBatchFile)
|
491
608
|
if(!File.file?(pathToBatchFile)) then
|
492
609
|
raise ArgumentError, "No batch file exists at the passed location!"
|
493
|
-
end
|
494
|
-
|
610
|
+
end
|
611
|
+
|
495
612
|
if((pathToBatchFile =~ /batch_\d+.closed-\d+\z/) != nil) then
|
496
|
-
raise ArgumentError, "The passed batch file is closed!"
|
497
|
-
end
|
498
|
-
|
613
|
+
raise ArgumentError, "The passed batch file is closed!"
|
614
|
+
end
|
615
|
+
|
499
616
|
@txn_file = pathToBatchFile + '_txns'
|
500
617
|
@path_to_batch = pathToBatchFile
|
501
618
|
temp_counts = File.open(@path_to_batch, "rb") { |f| Marshal.load(f) }
|
502
619
|
if(temp_counts.keys.size > 4) then
|
503
620
|
raise RuntimeException, "Tried to open an AU batch with a non-AU batch file"
|
504
|
-
end
|
505
|
-
|
621
|
+
end
|
622
|
+
|
506
623
|
@txn_counts[:id] = temp_counts[:id]
|
507
624
|
@txn_counts[:merchantId] = temp_counts[:merchantId]
|
508
625
|
@txn_counts[:numAccountUpdates] = temp_counts[:numAccountUpdates]
|
509
626
|
@txn_counts[:total] = temp_counts[:total]
|
510
627
|
end
|
511
|
-
|
628
|
+
|
512
629
|
def close_batch(txn_location = @txn_file)
|
513
630
|
header = build_batch_header(@txn_counts)
|
514
|
-
|
631
|
+
|
515
632
|
File.rename(@path_to_batch, @path_to_batch + '.closed-' + @txn_counts[:total].to_s)
|
516
633
|
@path_to_batch = @path_to_batch + '.closed-' + @txn_counts[:total].to_s
|
517
634
|
File.open(@path_to_batch, 'w') do |fo|
|
@@ -523,23 +640,24 @@ module LitleOnline
|
|
523
640
|
end
|
524
641
|
File.delete(txn_location)
|
525
642
|
end
|
526
|
-
|
643
|
+
|
527
644
|
def account_update(options)
|
528
645
|
transaction = @litle_txn.account_update(options)
|
529
646
|
@txn_counts[:numAccountUpdates] += 1
|
530
|
-
|
647
|
+
|
531
648
|
add_txn_to_batch(transaction, :authorization, options)
|
532
649
|
end
|
533
|
-
|
650
|
+
|
534
651
|
def get_counts_and_amounts
|
535
652
|
return @txn_counts
|
536
653
|
end
|
654
|
+
|
537
655
|
def get_batch_name
|
538
656
|
return @path_to_batch
|
539
657
|
end
|
540
|
-
|
658
|
+
|
541
659
|
private
|
542
|
-
|
660
|
+
|
543
661
|
def add_txn_to_batch(transaction, type, options)
|
544
662
|
@txn_counts[:total] += 1
|
545
663
|
xml = transaction.save_to_xml.to_s
|
@@ -555,24 +673,24 @@ module LitleOnline
|
|
555
673
|
create_new_batch(path)
|
556
674
|
end
|
557
675
|
end
|
558
|
-
|
676
|
+
|
559
677
|
def build_batch_header(options)
|
560
678
|
request = BatchRequest.new
|
561
|
-
|
679
|
+
|
562
680
|
request.numAccountUpdates = @txn_counts[:numAccountUpdates]
|
563
681
|
request.merchantId = get_merchant_id(options)
|
564
682
|
request.id = @txn_counts[:id]
|
565
|
-
|
683
|
+
|
566
684
|
header = request.save_to_xml.to_s
|
567
|
-
header['/>']= '>'
|
685
|
+
header['/>']= '>'
|
568
686
|
|
569
687
|
return header
|
570
688
|
end
|
571
|
-
|
689
|
+
|
572
690
|
def get_config(field, options)
|
573
691
|
options[field.to_s] == nil ? @config_hash[field.to_s] : options[field.to_s]
|
574
692
|
end
|
575
|
-
|
693
|
+
|
576
694
|
def get_merchant_id(options)
|
577
695
|
options['merchantId'] || @config_hash['currency_merchant_map']['DEFAULT']
|
578
696
|
end
|