hps 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +8 -8
  3. data/LICENSE.txt +32 -32
  4. data/PRIVACY.txt +65 -65
  5. data/README.md +40 -40
  6. data/Rakefile +15 -15
  7. data/hps.gemspec +26 -26
  8. data/lib/hps/configuration.rb +16 -16
  9. data/lib/hps/entities/hps_account_verify.rb +8 -8
  10. data/lib/hps/entities/hps_address.rb +6 -6
  11. data/lib/hps/entities/hps_authorization.rb +12 -12
  12. data/lib/hps/entities/hps_batch.rb +6 -6
  13. data/lib/hps/entities/hps_cardholder.rb +10 -6
  14. data/lib/hps/entities/hps_charge.rb +8 -8
  15. data/lib/hps/entities/hps_charge_exceptions.rb +6 -6
  16. data/lib/hps/entities/hps_credit_card.rb +32 -32
  17. data/lib/hps/entities/hps_refund.rb +8 -8
  18. data/lib/hps/entities/hps_report_transaction_details.rb +10 -10
  19. data/lib/hps/entities/hps_report_transaction_summary.rb +6 -6
  20. data/lib/hps/entities/hps_reversal.rb +10 -10
  21. data/lib/hps/entities/hps_token_data.rb +10 -10
  22. data/lib/hps/entities/hps_transaction.rb +161 -161
  23. data/lib/hps/entities/hps_transaction_details.rb +6 -6
  24. data/lib/hps/entities/hps_transaction_header.rb +8 -8
  25. data/lib/hps/entities/hps_transaction_type.rb +16 -16
  26. data/lib/hps/entities/hps_void.rb +8 -8
  27. data/lib/hps/infrastructure/api_connection_exception.rb +11 -11
  28. data/lib/hps/infrastructure/authentication_exception.rb +11 -11
  29. data/lib/hps/infrastructure/card_exception.rb +15 -15
  30. data/lib/hps/infrastructure/exceptions.json +468 -468
  31. data/lib/hps/infrastructure/hps_exception.rb +25 -25
  32. data/lib/hps/infrastructure/hps_exception_mapper.rb +134 -134
  33. data/lib/hps/infrastructure/hps_sdk_codes.rb +48 -48
  34. data/lib/hps/infrastructure/invalid_request_exception.rb +15 -15
  35. data/lib/hps/services/hps_batch_service.rb +29 -29
  36. data/lib/hps/services/hps_charge_service.rb +634 -634
  37. data/lib/hps/services/hps_service.rb +128 -128
  38. data/lib/hps/version.rb +3 -3
  39. data/lib/hps.rb +45 -45
  40. data/tests/amex_tests.rb +230 -230
  41. data/tests/cert_tests.rb +80 -80
  42. data/tests/discover_tests.rb +324 -324
  43. data/tests/exception_mapper_tests.rb +244 -244
  44. data/tests/general_tests.rb +58 -58
  45. data/tests/hps_token_service.rb +56 -56
  46. data/tests/mastercard_tests.rb +325 -325
  47. data/tests/secret_key.rb +11 -11
  48. data/tests/test_data.rb +127 -127
  49. data/tests/test_helper.rb +108 -92
  50. data/tests/token_tests.rb +513 -513
  51. data/tests/visa_tests.rb +378 -378
  52. metadata +4 -6
  53. data/.DS_Store +0 -0
  54. data/.gitignore +0 -24
@@ -1,635 +1,635 @@
1
- module Hps
2
- class HpsChargeService < HpsService
3
-
4
- def get(transaction_id)
5
-
6
- if transaction_id.nil? or transaction_id == 0
7
- raise @exception_mapper.map_sdk_exception(SdkCodes.invalid_transaction_id)
8
- end
9
-
10
- xml = Builder::XmlMarkup.new
11
- xml.hps :Transaction do
12
- xml.hps :ReportTxnDetail do
13
- xml.hps :TxnId, transaction_id
14
- end
15
- end
16
-
17
- response = doTransaction(xml.target!)
18
- detail = response["Transaction"]["ReportTxnDetail"]
19
-
20
- header = hydrate_transaction_header(response["Header"])
21
- result = HpsReportTransactionDetails.new(header)
22
- result.transaction_id = detail["GatewayTxnId"]
23
- result.original_transaction_id = detail["OriginalGatewayTxnId"]
24
- result.authorized_amount = detail["Data"]["AuthAmt"]
25
- result.authorization_code = detail["Data"]["AuthCode"]
26
- result.avs_result_code = detail["Data"]["AVSRsltCode"]
27
- result.avs_result_text = detail["Data"]["AVSRsltText"]
28
- result.card_type = detail["Data"]["CardType"]
29
- result.masked_card_number = detail["Data"]["MaskedCardNbr"]
30
- result.transaction_type = Hps.service_name_to_transaction_type(detail["ServiceName"])
31
- result.transaction_date = detail["RspUtcDT"]
32
- result.cpc_indicator = detail["Data"]["CPCInd"]
33
- result.cvv_result_code = detail["Data"]["CVVRsltCode"]
34
- result.cvv_result_text = detail["Data"]["CVVRsltText"]
35
- result.reference_number = detail["Data"]["RefNbr"]
36
- result.response_code = detail["Data"]["RspCode"]
37
- result.response_text = detail["Data"]["RspText"]
38
-
39
- tokenization_message = detail["Data"]["TokenizationMsg"]
40
-
41
- unless tokenization_message.nil?
42
- result.token_data = HpsTokenData.new(tokenization_message)
43
- end
44
-
45
- header_response_code = response["Header"]["GatewayRspCode"]
46
- data_response_code = detail["Data"]["RspCode"]
47
-
48
- if header_response_code != "0" or data_response_code != "00"
49
-
50
- exceptions = HpsChargeExceptions.new()
51
-
52
- if header_response_code != "0"
53
- message = response["Header"]["GatewayRspMsg"]
54
- exceptions.hps_exception = @exception_mapper.map_gateway_exception(result.transaction_id, header_response_code, message)
55
- end
56
-
57
- if data_response_code != "0"
58
- message = detail["Data"]["RspText"]
59
- exceptions.card_exception = @exception_mapper.map_issuer_exception(transaction_id, data_response_code, message)
60
- end
61
-
62
- result.exceptions = exceptions
63
-
64
- end
65
-
66
- result
67
-
68
- end
69
-
70
- def list(start_date, end_date, filter_by = nil)
71
-
72
- if start_date > DateTime.now
73
- raise @exception_mapper.map_sdk_exception(SdkCodes.invalid_start_date)
74
- elsif end_date > DateTime.now
75
- raise @exception_mapper.map_sdk_exception(SdkCodes.invalid_end_date)
76
- end
77
-
78
- xml = Builder::XmlMarkup.new
79
- xml.hps :Transaction do
80
- xml.hps :ReportActivity do
81
- xml.hps :RptStartUtcDT, start_date.utc.iso8601
82
- xml.hps :RptEndUtcDT, end_date.utc.iso8601
83
- end
84
- end
85
-
86
- response = doTransaction(xml.target!)
87
-
88
- # Gateway exception
89
- if response["Header"]["GatewayRspCode"] != "0"
90
- transaction_id = response["Header"]["GatewayTxnId"]
91
- response_code = response["Header"]["GatewayRspCode"]
92
- response_message = response["Header"]["GatewayRspMsg"]
93
- raise @exception_mapper.map_gateway_exception(transaction_id, response_code, response_message)
94
- end
95
-
96
- result = Array.new
97
-
98
- if response["Transaction"]["ReportActivity"]["Header"]["TxnCnt"] == "0"
99
- return result
100
- end
101
-
102
- response["Transaction"]["ReportActivity"]["Details"].each { |charge|
103
-
104
- next if !filter_by.nil? and charge.serviceName != Hps.transaction_type_to_service_name(filter_by)
105
-
106
- summary = HpsReportTransactionSummary.new()
107
- summary.transaction_id = charge["GatewayTxnId"]
108
- summary.original_transaction_id = charge["OriginalGatewayTxnId"]
109
- summary.masked_card_number = charge["MaskedCardNbr"]
110
- summary.response_code = charge["IssuerRspCode"]
111
- summary.response_text = charge["IssuerRspText"]
112
- summary.transaction_type = Hps.transaction_type_to_service_name(charge["ServiceName"]) if filter_by.nil? == false
113
-
114
- gw_response_code = charge["GatewayRspCode"]
115
- issuer_response_code = charge["IssuerRspCode"]
116
-
117
- if gw_response_code != "0" or issuer_response_code != "00"
118
-
119
- exceptions = HpsChargeExceptions.new()
120
-
121
- if gw_response_code != "0"
122
- message = charge["GatewayRspMsg"]
123
- exceptions.hps_exception = @exception_mapper.map_gateway_exception(charge["GatewayTxnId"], gw_response_code, message)
124
- end
125
-
126
- if issuer_response_code != "0"
127
- message = charge["IssuerRspText"]
128
- exceptions.card_exception = @exception_mapper.map_issuer_exception(charge["GatewayTxnId"], issuer_response_code, message)
129
- end
130
-
131
- summary.exceptions = exceptions
132
-
133
- end
134
-
135
- result << summary
136
- }
137
-
138
- result
139
- end
140
-
141
- def charge(amount, currency, card, card_holder = nil, request_multi_use_token = false, details = nil)
142
- check_amount(amount)
143
- check_currency(currency)
144
-
145
- xml = Builder::XmlMarkup.new
146
- xml.hps :Transaction do
147
- xml.hps :CreditSale do
148
- xml.hps :Block1 do
149
- xml.hps :AllowDup, "Y"
150
- xml.hps :Amt, amount
151
- xml << hydrate_cardholder_data(card_holder) if card_holder
152
- xml << hydrate_additional_txn_fields(details) if details
153
- xml.hps :CardData do
154
-
155
- # NOTE: Process as Manual Entry if they gave us a Credit Card
156
- if card.is_a? HpsCreditCard
157
- xml << hydrate_manual_entry(card)
158
- # Note: Otherwise, consider it a token
159
- else
160
- xml.hps :TokenData do
161
- xml.hps :TokenValue, card
162
- end
163
- end
164
-
165
- xml.hps :TokenRequest, request_multi_use_token ? "Y" : "N"
166
-
167
- end
168
- end
169
- end
170
- end
171
-
172
- submit_charge(xml.target!, amount, currency)
173
- end
174
-
175
- def verify(card, card_holder = nil, request_multi_use_token = false)
176
-
177
- xml = Builder::XmlMarkup.new
178
- xml.hps :Transaction do
179
- xml.hps :CreditAccountVerify do
180
- xml.hps :Block1 do
181
- xml << hydrate_cardholder_data(card_holder) if card_holder
182
- xml.hps :CardData do
183
-
184
- # NOTE: Process as Manual Entry if they gave us a Credit Card
185
- if card.is_a? HpsCreditCard
186
- xml << hydrate_manual_entry(card)
187
- # Note: Otherwise, consider it a token
188
- else
189
- xml.hps :TokenData do
190
- xml.hps :TokenValue, card
191
- end
192
- end
193
-
194
- xml.hps :TokenRequest, request_multi_use_token ? "Y" : "N"
195
-
196
- end
197
- end
198
- end
199
- end
200
-
201
- submit_verify(xml.target!)
202
- end
203
-
204
- def authorize(amount, currency, card, card_holder = nil, request_multi_use_token = false, details = nil)
205
-
206
- check_amount(amount)
207
- check_currency(currency)
208
-
209
- xml = Builder::XmlMarkup.new
210
- xml.hps :Transaction do
211
- xml.hps :CreditAuth do
212
- xml.hps :Block1 do
213
- xml.hps :AllowDup, "Y"
214
- xml.hps :Amt, amount
215
- xml << hydrate_cardholder_data(card_holder) if card_holder
216
- xml << hydrate_additional_txn_fields(details) if details
217
- xml.hps :CardData do
218
-
219
- # NOTE: Process as Manual Entry if they gave us a Credit Card
220
- if card.is_a? HpsCreditCard
221
- xml << hydrate_manual_entry(card)
222
- # Note: Otherwise, consider it a token
223
- else
224
- xml.hps :TokenData do
225
- xml.hps :TokenValue, card
226
- end
227
- end
228
-
229
- xml.hps :TokenRequest, request_multi_use_token ? "Y" : "N"
230
-
231
- end
232
- end
233
- end
234
- end
235
-
236
- submit_authorize(xml.target!, amount, currency)
237
- end
238
-
239
- def capture(transaction_id, amount = nil)
240
-
241
- xml = Builder::XmlMarkup.new
242
- xml.hps :Transaction do
243
- xml.hps :CreditAddToBatch do
244
- xml.hps :GatewayTxnId, transaction_id
245
- xml.hps :Amt, amount if amount
246
- end
247
- end
248
-
249
- response = doTransaction(xml.target!)
250
- header = response["Header"]
251
-
252
- raise @exception_mapper.map_gateway_exception(transaction_id, header["GatewayRspCode"], header["GatewayRspMsg"]) unless header["GatewayRspCode"].eql? "0"
253
-
254
- get(transaction_id)
255
- end
256
-
257
- def reverse(card, amount, currency, details = nil)
258
- check_amount(amount)
259
- check_currency(currency)
260
-
261
- xml = Builder::XmlMarkup.new
262
- xml.hps :Transaction do
263
- xml.hps :CreditReversal do
264
- xml.hps :Block1 do
265
- xml.hps :Amt, amount
266
- xml << hydrate_additional_txn_fields(details) if details
267
- xml.hps :CardData do
268
-
269
- # NOTE: Process as Manual Entry if they gave us a Credit Card
270
- if card.is_a? HpsCreditCard
271
- xml << hydrate_manual_entry(card)
272
- # Note: Otherwise, consider it a token
273
- else
274
- xml.hps :TokenData do
275
- xml.hps :TokenValue, card
276
- end
277
- end
278
-
279
- end
280
- end
281
- end
282
- end
283
-
284
- submit_reverse(xml.target!)
285
- end
286
-
287
- def reverse_transaction(transaction_id, amount, currency, details = nil)
288
- check_amount(amount)
289
- check_currency(currency)
290
-
291
- xml = Builder::XmlMarkup.new
292
- xml.hps :Transaction do
293
- xml.hps :CreditReversal do
294
- xml.hps :Block1 do
295
- xml.hps :Amt, amount
296
- xml.hps :GatewayTxnId, transaction_id
297
- xml << hydrate_additional_txn_fields(details) if details
298
- end
299
- end
300
- end
301
-
302
- submit_reverse(xml.target!)
303
- end
304
-
305
- def refund(amount, currency, card, card_holder = nil, details = nil)
306
- check_amount(amount)
307
- check_currency(currency)
308
-
309
- xml = Builder::XmlMarkup.new
310
- xml.hps :Transaction do
311
- xml.hps :CreditReturn do
312
- xml.hps :Block1 do
313
- xml.hps :AllowDup, "Y"
314
- xml.hps :Amt, amount
315
- xml << hydrate_cardholder_data(card_holder) if card_holder
316
- xml << hydrate_additional_txn_fields(details) if details
317
- xml.hps :CardData do
318
-
319
- # NOTE: Process as Manual Entry if they gave us a Credit Card
320
- if card.is_a? HpsCreditCard
321
- xml << hydrate_manual_entry(card)
322
- # Note: Otherwise, consider it a token
323
- else
324
- xml.hps :TokenData do
325
- xml.hps :TokenValue, card
326
- end
327
- end
328
-
329
- end
330
- end
331
- end
332
- end
333
-
334
- submit_refund(xml.target!)
335
- end
336
-
337
- def refund_transaction(amount, currency, transaction_id, card_holder = nil, details = nil)
338
- check_amount(amount)
339
- check_currency(currency)
340
-
341
- xml = Builder::XmlMarkup.new
342
- xml.hps :Transaction do
343
- xml.hps :CreditReturn do
344
- xml.hps :Block1 do
345
- xml.hps :AllowDup, "Y"
346
- xml.hps :Amt, amount
347
- xml.hps :GatewayTxnId, transaction_id
348
- xml << hydrate_cardholder_data(card_holder) if card_holder
349
- xml << hydrate_additional_txn_fields(details) if details
350
- end
351
- end
352
- end
353
-
354
- submit_refund(xml.target!)
355
- end
356
-
357
- def void(transaction_id)
358
- xml = Builder::XmlMarkup.new
359
- xml.hps :Transaction do
360
- xml.hps :CreditVoid do
361
- xml.hps :GatewayTxnId, transaction_id
362
- end
363
- end
364
-
365
- submit_void(xml.target!)
366
- end
367
- private
368
-
369
- def check_amount(amount)
370
- raise @exception_mapper.map_sdk_exception(SdkCodes.invalid_amount) if amount.nil? or amount <= 0
371
- end
372
-
373
- def check_currency(currency)
374
- raise @exception_mapper.map_sdk_exception(SdkCodes.missing_currency) if currency.empty?
375
- raise @exception_mapper.map_sdk_exception(SdkCodes.invalid_currency) unless currency.downcase.eql? "usd"
376
- end
377
-
378
- def hydrate_cardholder_data(card_holder)
379
- xml = Builder::XmlMarkup.new
380
- xml.hps :CardHolderData do
381
- xml.hps :CardHolderFirstName, card_holder.first_name
382
- xml.hps :CardHolderLastName, card_holder.last_name
383
- xml.hps :CardHolderEmail, card_holder.email_address
384
- xml.hps :CardHolderPhone, card_holder.phone
385
- xml.hps :CardHolderAddr, card_holder.address.address
386
- xml.hps :CardHolderCity, card_holder.address.city
387
- xml.hps :CardHolderState, card_holder.address.state
388
- xml.hps :CardHolderZip, card_holder.address.zip
389
- end
390
- xml.target!
391
- end
392
-
393
- def hydrate_manual_entry(card)
394
- xml = Builder::XmlMarkup.new
395
- xml.hps :ManualEntry do
396
- xml.hps :CardNbr, card.number
397
- xml.hps :ExpMonth, card.exp_month
398
- xml.hps :ExpYear, card.exp_year
399
- xml.hps :CVV2, card.cvv
400
- xml.hps :CardPresent, "N"
401
- xml.hps :ReaderPresent, "N"
402
- end
403
- xml.target!
404
- end
405
-
406
- def hydrate_additional_txn_fields(details)
407
- xml = Builder::XmlMarkup.new
408
- xml.hps :AdditionalTxnFields do
409
- xml.hps :Description, details.memo if details.memo
410
- xml.hps :InvoiceNbr, details.invoice_number if details.invoice_number
411
- xml.hps :CustomerID, details.customer_id if details.customer_id
412
- end
413
- xml.target!
414
- end
415
-
416
- def submit_charge(transaction, amount, currency)
417
-
418
- response = doTransaction(transaction)
419
-
420
- header = response["Header"]
421
- process_charge_gateway_response(header["GatewayRspCode"], header["GatewayRspMsg"], header["GatewayTxnId"], amount, currency)
422
-
423
- creditSaleRsp = response["Transaction"]["CreditSale"]
424
- process_charge_issuer_response(creditSaleRsp["RspCode"], creditSaleRsp["RspText"], header["GatewayTxnId"], amount, currency)
425
-
426
- result = HpsCharge.new(hydrate_transaction_header(header))
427
- result.transaction_id = header["GatewayTxnId"]
428
- result.authorized_amount = creditSaleRsp["AuthAmt"]
429
- result.authorization_code = creditSaleRsp["AuthCode"]
430
- result.avs_result_code = creditSaleRsp["AVSRsltCode"]
431
- result.avs_result_text = creditSaleRsp["AVSRsltText"]
432
- result.card_type = creditSaleRsp["CardType"]
433
- result.cpc_indicator = creditSaleRsp["CPCInd"]
434
- result.cvv_result_code = creditSaleRsp["CVVRsltCode"]
435
- result.cvv_result_text = creditSaleRsp["CVVRsltText"]
436
- result.reference_number = creditSaleRsp["RefNbr"]
437
- result.response_code = creditSaleRsp["RspCode"]
438
- result.response_text = creditSaleRsp["RspText"]
439
-
440
- unless header["TokenData"].nil?
441
- result.token_data = HpsTokenData.new()
442
- result.token_data.response_code = header["TokenData"]["TokenRspCode"];
443
- result.token_data.response_message = header["TokenData"]["TokenRspMsg"]
444
- result.token_data.token_value = header["TokenData"]["TokenValue"]
445
- end
446
-
447
- result
448
- end
449
-
450
- def submit_authorize(transaction, amount, currency)
451
-
452
- response = doTransaction(transaction)
453
- header = response["Header"]
454
- process_charge_gateway_response(header["GatewayRspCode"], header["GatewayRspMsg"], header["GatewayTxnId"], amount, currency)
455
-
456
- auth_response = response["Transaction"]["CreditAuth"]
457
- process_charge_issuer_response(auth_response["RspCode"], auth_response["RspText"], header["GatewayTxnId"], amount, currency)
458
-
459
- result = HpsAuthorization.new(hydrate_transaction_header(header))
460
- result.transaction_id = header["GatewayTxnId"]
461
- result.authorized_amount = auth_response["AuthAmt"]
462
- result.authorization_code = auth_response["AuthCode"]
463
- result.avs_result_code = auth_response["AVSRsltCode"]
464
- result.avs_result_text = auth_response["AVSRsltText"]
465
- result.card_type = auth_response["CardType"]
466
- result.cpc_indicator = auth_response["CPCInd"]
467
- result.cvv_result_code = auth_response["CVVRsltCode"]
468
- result.cvv_result_text = auth_response["CVVRsltText"]
469
- result.reference_number = auth_response["RefNbr"]
470
- result.response_code = auth_response["RspCode"]
471
- result.response_text = auth_response["RspText"]
472
-
473
- unless header["TokenData"].nil?
474
- result.token_data = HpsTokenData.new()
475
- result.token_data.response_code = header["TokenData"]["TokenRspCode"];
476
- result.token_data.response_message = header["TokenData"]["TokenRspMsg"]
477
- result.token_data.token_value = header["TokenData"]["TokenValue"]
478
- end
479
-
480
- result
481
- end
482
-
483
- def submit_refund(transaction)
484
-
485
- response = doTransaction(transaction)
486
- header = response["Header"]
487
-
488
- unless header["GatewayRspCode"].eql? "0"
489
- raise @exception_mapper.map_gateway_exception(header["GatewayTxnId"], header["GatewayRspCode"], header["GatewayRspMsg"])
490
- end
491
-
492
- result = HpsRefund.new(hydrate_transaction_header(header))
493
- result.transaction_id = header["GatewayTxnId"]
494
- result.response_code = "00"
495
- result.response_text = ""
496
-
497
- result
498
- end
499
-
500
- def submit_reverse(transaction)
501
-
502
- response = doTransaction(transaction)
503
- header = response["Header"]
504
-
505
- if !header["GatewayRspCode"].eql? "0"
506
- raise @exception_mapper.map_gateway_exception(header["GatewayTxnId"], header["GatewayRspCode"], header["GatewayRspMsg"])
507
- end
508
-
509
- reversal = response["Transaction"]["CreditReversal"]
510
- result = HpsReversal.new(hydrate_transaction_header(header))
511
- result.transaction_id = header["GatewayTxnId"]
512
- result.avs_result_code = reversal["AVSRsltCode"]
513
- result.avs_result_text = reversal["AVSRsltText"]
514
- result.cpc_indicator = reversal["CPCInd"]
515
- result.cvv_result_code = reversal["CVVRsltCode"]
516
- result.cvv_result_text = reversal["CVVRsltText"]
517
- result.reference_number = reversal["RefNbr"]
518
- result.response_code = reversal["RspCode"]
519
- result.response_text = reversal["RspText"]
520
- result
521
- end
522
-
523
- def submit_verify(transaction)
524
- response = doTransaction(transaction)
525
- header = response["Header"]
526
-
527
- if !header["GatewayRspCode"].eql? "0"
528
- raise @exception_mapper.map_gateway_exception(header["GatewayTxnId"], header["GatewayRspCode"], header["GatewayRspMsg"])
529
- end
530
-
531
- account_verify = response["Transaction"]["CreditAccountVerify"]
532
- result = HpsAccountVerify.new(hydrate_transaction_header(header))
533
- result.transaction_id = header["GatewayTxnId"]
534
- result.avs_result_code = account_verify["AVSRsltCode"]
535
- result.avs_result_text = account_verify["AVSRsltText"]
536
- result.reference_number = account_verify["RefNbr"]
537
- result.response_code = account_verify["RspCode"]
538
- result.response_text = account_verify["RspText"]
539
- result.card_type = account_verify["CardType"]
540
- result.cpc_indicator = account_verify["CPCInd"]
541
- result.cvv_result_code = account_verify["CVVRsltCode"]
542
- result.cvv_result_text = account_verify["CVVRsltText"]
543
- result.authorization_code = account_verify["AuthCode"]
544
- result.authorized_amount = account_verify["AuthAmt"]
545
-
546
- if [ "85", "00" ].include? result.response_code == false
547
- raise @exception_mapper.map_issuer_exception(result.transaction_id, result.response_code, result.response_text)
548
- end
549
-
550
- unless header["TokenData"].nil?
551
- result.token_data = HpsTokenData.new()
552
- result.token_data.response_code = header["TokenData"]["TokenRspCode"];
553
- result.token_data.response_message = header["TokenData"]["TokenRspMsg"]
554
- result.token_data.token_value = header["TokenData"]["TokenValue"]
555
- end
556
-
557
- result
558
- end
559
-
560
- def submit_void(transaction)
561
- response = doTransaction(transaction)
562
- header = response["Header"]
563
- unless header["GatewayRspCode"].eql? "0"
564
- raise @exception_mapper.map_gateway_exception(header["GatewayTxnId"], header["GatewayRspCode"], header["GatewayRspMsg"])
565
- end
566
-
567
- result = HpsVoid.new(hydrate_transaction_header(header))
568
- result.transaction_id = header["GatewayTxnId"]
569
- result.response_code = "00"
570
- result.response_text = ""
571
- result
572
- end
573
-
574
- def process_charge_gateway_response(response_code, response_text, transaction_id, amount, currency)
575
-
576
- if !response_code.eql? "0"
577
-
578
- if response_code.eql? "30"
579
-
580
- begin
581
-
582
- reverse_transaction(transaction_id, amount, currency)
583
-
584
- rescue => e
585
- exception = @exception_mapper.map_sdk_exception(SdkCodes.reversal_error_after_gateway_timeout, e)
586
- exception.response_code = response_code
587
- exception.response_text = response_text
588
- raise exception
589
- end
590
-
591
- end
592
-
593
- exception = @exception_mapper.map_gateway_exception(transaction_id, response_code, response_text)
594
- exception.response_code = response_code
595
- exception.response_text = response_text
596
- raise exception
597
-
598
- end
599
-
600
- end
601
-
602
- def process_charge_issuer_response(response_code, response_text, transaction_id, amount, currency)
603
-
604
- if response_code.eql? "91"
605
-
606
- begin
607
-
608
- reverse_transaction(transaction_id, amount, currency)
609
-
610
- rescue => e
611
- exception = @exception_mapper.map_sdk_exception(SdkCodes.reversal_error_after_issuer_timeout, e)
612
- exception.response_code = response_code
613
- exception.response_text = response_text
614
- raise exception
615
- end
616
-
617
- exception = @exception_mapper.map_sdk_exception(SdkCodes.processing_error)
618
- exception.response_code = response_code
619
- exception.response_text = response_text
620
- raise exception
621
-
622
- elsif !response_code.eql? "00"
623
-
624
- exception = @exception_mapper.map_issuer_exception(transaction_id, response_code, response_text)
625
- exception.response_code = response_code
626
- exception.response_text = response_text
627
- raise exception
628
-
629
- end
630
-
631
- end
632
-
633
- end
634
-
1
+ module Hps
2
+ class HpsChargeService < HpsService
3
+
4
+ def get(transaction_id)
5
+
6
+ if transaction_id.nil? or transaction_id == 0
7
+ raise @exception_mapper.map_sdk_exception(SdkCodes.invalid_transaction_id)
8
+ end
9
+
10
+ xml = Builder::XmlMarkup.new
11
+ xml.hps :Transaction do
12
+ xml.hps :ReportTxnDetail do
13
+ xml.hps :TxnId, transaction_id
14
+ end
15
+ end
16
+
17
+ response = doTransaction(xml.target!)
18
+ detail = response["Transaction"]["ReportTxnDetail"]
19
+
20
+ header = hydrate_transaction_header(response["Header"])
21
+ result = HpsReportTransactionDetails.new(header)
22
+ result.transaction_id = detail["GatewayTxnId"]
23
+ result.original_transaction_id = detail["OriginalGatewayTxnId"]
24
+ result.authorized_amount = detail["Data"]["AuthAmt"]
25
+ result.authorization_code = detail["Data"]["AuthCode"]
26
+ result.avs_result_code = detail["Data"]["AVSRsltCode"]
27
+ result.avs_result_text = detail["Data"]["AVSRsltText"]
28
+ result.card_type = detail["Data"]["CardType"]
29
+ result.masked_card_number = detail["Data"]["MaskedCardNbr"]
30
+ result.transaction_type = Hps.service_name_to_transaction_type(detail["ServiceName"])
31
+ result.transaction_date = detail["RspUtcDT"]
32
+ result.cpc_indicator = detail["Data"]["CPCInd"]
33
+ result.cvv_result_code = detail["Data"]["CVVRsltCode"]
34
+ result.cvv_result_text = detail["Data"]["CVVRsltText"]
35
+ result.reference_number = detail["Data"]["RefNbr"]
36
+ result.response_code = detail["Data"]["RspCode"]
37
+ result.response_text = detail["Data"]["RspText"]
38
+
39
+ tokenization_message = detail["Data"]["TokenizationMsg"]
40
+
41
+ unless tokenization_message.nil?
42
+ result.token_data = HpsTokenData.new(tokenization_message)
43
+ end
44
+
45
+ header_response_code = response["Header"]["GatewayRspCode"]
46
+ data_response_code = detail["Data"]["RspCode"]
47
+
48
+ if header_response_code != "0" or data_response_code != "00"
49
+
50
+ exceptions = HpsChargeExceptions.new()
51
+
52
+ if header_response_code != "0"
53
+ message = response["Header"]["GatewayRspMsg"]
54
+ exceptions.hps_exception = @exception_mapper.map_gateway_exception(result.transaction_id, header_response_code, message)
55
+ end
56
+
57
+ if data_response_code != "0"
58
+ message = detail["Data"]["RspText"]
59
+ exceptions.card_exception = @exception_mapper.map_issuer_exception(transaction_id, data_response_code, message)
60
+ end
61
+
62
+ result.exceptions = exceptions
63
+
64
+ end
65
+
66
+ result
67
+
68
+ end
69
+
70
+ def list(start_date, end_date, filter_by = nil)
71
+
72
+ if start_date > DateTime.now
73
+ raise @exception_mapper.map_sdk_exception(SdkCodes.invalid_start_date)
74
+ elsif end_date > DateTime.now
75
+ raise @exception_mapper.map_sdk_exception(SdkCodes.invalid_end_date)
76
+ end
77
+
78
+ xml = Builder::XmlMarkup.new
79
+ xml.hps :Transaction do
80
+ xml.hps :ReportActivity do
81
+ xml.hps :RptStartUtcDT, start_date.utc.iso8601
82
+ xml.hps :RptEndUtcDT, end_date.utc.iso8601
83
+ end
84
+ end
85
+
86
+ response = doTransaction(xml.target!)
87
+
88
+ # Gateway exception
89
+ if response["Header"]["GatewayRspCode"] != "0"
90
+ transaction_id = response["Header"]["GatewayTxnId"]
91
+ response_code = response["Header"]["GatewayRspCode"]
92
+ response_message = response["Header"]["GatewayRspMsg"]
93
+ raise @exception_mapper.map_gateway_exception(transaction_id, response_code, response_message)
94
+ end
95
+
96
+ result = Array.new
97
+
98
+ if response["Transaction"]["ReportActivity"]["Header"]["TxnCnt"] == "0"
99
+ return result
100
+ end
101
+
102
+ response["Transaction"]["ReportActivity"]["Details"].each { |charge|
103
+
104
+ next if !filter_by.nil? and charge.serviceName != Hps.transaction_type_to_service_name(filter_by)
105
+
106
+ summary = HpsReportTransactionSummary.new()
107
+ summary.transaction_id = charge["GatewayTxnId"]
108
+ summary.original_transaction_id = charge["OriginalGatewayTxnId"]
109
+ summary.masked_card_number = charge["MaskedCardNbr"]
110
+ summary.response_code = charge["IssuerRspCode"]
111
+ summary.response_text = charge["IssuerRspText"]
112
+ summary.transaction_type = Hps.transaction_type_to_service_name(charge["ServiceName"]) if filter_by.nil? == false
113
+
114
+ gw_response_code = charge["GatewayRspCode"]
115
+ issuer_response_code = charge["IssuerRspCode"]
116
+
117
+ if gw_response_code != "0" or issuer_response_code != "00"
118
+
119
+ exceptions = HpsChargeExceptions.new()
120
+
121
+ if gw_response_code != "0"
122
+ message = charge["GatewayRspMsg"]
123
+ exceptions.hps_exception = @exception_mapper.map_gateway_exception(charge["GatewayTxnId"], gw_response_code, message)
124
+ end
125
+
126
+ if issuer_response_code != "0"
127
+ message = charge["IssuerRspText"]
128
+ exceptions.card_exception = @exception_mapper.map_issuer_exception(charge["GatewayTxnId"], issuer_response_code, message)
129
+ end
130
+
131
+ summary.exceptions = exceptions
132
+
133
+ end
134
+
135
+ result << summary
136
+ }
137
+
138
+ result
139
+ end
140
+
141
+ def charge(amount, currency, card, card_holder = nil, request_multi_use_token = false, details = nil)
142
+ check_amount(amount)
143
+ check_currency(currency)
144
+
145
+ xml = Builder::XmlMarkup.new
146
+ xml.hps :Transaction do
147
+ xml.hps :CreditSale do
148
+ xml.hps :Block1 do
149
+ xml.hps :AllowDup, "Y"
150
+ xml.hps :Amt, amount
151
+ xml << hydrate_cardholder_data(card_holder) if card_holder
152
+ xml << hydrate_additional_txn_fields(details) if details
153
+ xml.hps :CardData do
154
+
155
+ # NOTE: Process as Manual Entry if they gave us a Credit Card
156
+ if card.is_a? HpsCreditCard
157
+ xml << hydrate_manual_entry(card)
158
+ # Note: Otherwise, consider it a token
159
+ else
160
+ xml.hps :TokenData do
161
+ xml.hps :TokenValue, card
162
+ end
163
+ end
164
+
165
+ xml.hps :TokenRequest, request_multi_use_token ? "Y" : "N"
166
+
167
+ end
168
+ end
169
+ end
170
+ end
171
+
172
+ submit_charge(xml.target!, amount, currency)
173
+ end
174
+
175
+ def verify(card, card_holder = nil, request_multi_use_token = false)
176
+
177
+ xml = Builder::XmlMarkup.new
178
+ xml.hps :Transaction do
179
+ xml.hps :CreditAccountVerify do
180
+ xml.hps :Block1 do
181
+ xml << hydrate_cardholder_data(card_holder) if card_holder
182
+ xml.hps :CardData do
183
+
184
+ # NOTE: Process as Manual Entry if they gave us a Credit Card
185
+ if card.is_a? HpsCreditCard
186
+ xml << hydrate_manual_entry(card)
187
+ # Note: Otherwise, consider it a token
188
+ else
189
+ xml.hps :TokenData do
190
+ xml.hps :TokenValue, card
191
+ end
192
+ end
193
+
194
+ xml.hps :TokenRequest, request_multi_use_token ? "Y" : "N"
195
+
196
+ end
197
+ end
198
+ end
199
+ end
200
+
201
+ submit_verify(xml.target!)
202
+ end
203
+
204
+ def authorize(amount, currency, card, card_holder = nil, request_multi_use_token = false, details = nil)
205
+
206
+ check_amount(amount)
207
+ check_currency(currency)
208
+
209
+ xml = Builder::XmlMarkup.new
210
+ xml.hps :Transaction do
211
+ xml.hps :CreditAuth do
212
+ xml.hps :Block1 do
213
+ xml.hps :AllowDup, "Y"
214
+ xml.hps :Amt, amount
215
+ xml << hydrate_cardholder_data(card_holder) if card_holder
216
+ xml << hydrate_additional_txn_fields(details) if details
217
+ xml.hps :CardData do
218
+
219
+ # NOTE: Process as Manual Entry if they gave us a Credit Card
220
+ if card.is_a? HpsCreditCard
221
+ xml << hydrate_manual_entry(card)
222
+ # Note: Otherwise, consider it a token
223
+ else
224
+ xml.hps :TokenData do
225
+ xml.hps :TokenValue, card
226
+ end
227
+ end
228
+
229
+ xml.hps :TokenRequest, request_multi_use_token ? "Y" : "N"
230
+
231
+ end
232
+ end
233
+ end
234
+ end
235
+
236
+ submit_authorize(xml.target!, amount, currency)
237
+ end
238
+
239
+ def capture(transaction_id, amount = nil)
240
+
241
+ xml = Builder::XmlMarkup.new
242
+ xml.hps :Transaction do
243
+ xml.hps :CreditAddToBatch do
244
+ xml.hps :GatewayTxnId, transaction_id
245
+ xml.hps :Amt, amount if amount
246
+ end
247
+ end
248
+
249
+ response = doTransaction(xml.target!)
250
+ header = response["Header"]
251
+
252
+ raise @exception_mapper.map_gateway_exception(transaction_id, header["GatewayRspCode"], header["GatewayRspMsg"]) unless header["GatewayRspCode"].eql? "0"
253
+
254
+ get(transaction_id)
255
+ end
256
+
257
+ def reverse(card, amount, currency, details = nil)
258
+ check_amount(amount)
259
+ check_currency(currency)
260
+
261
+ xml = Builder::XmlMarkup.new
262
+ xml.hps :Transaction do
263
+ xml.hps :CreditReversal do
264
+ xml.hps :Block1 do
265
+ xml.hps :Amt, amount
266
+ xml << hydrate_additional_txn_fields(details) if details
267
+ xml.hps :CardData do
268
+
269
+ # NOTE: Process as Manual Entry if they gave us a Credit Card
270
+ if card.is_a? HpsCreditCard
271
+ xml << hydrate_manual_entry(card)
272
+ # Note: Otherwise, consider it a token
273
+ else
274
+ xml.hps :TokenData do
275
+ xml.hps :TokenValue, card
276
+ end
277
+ end
278
+
279
+ end
280
+ end
281
+ end
282
+ end
283
+
284
+ submit_reverse(xml.target!)
285
+ end
286
+
287
+ def reverse_transaction(transaction_id, amount, currency, details = nil)
288
+ check_amount(amount)
289
+ check_currency(currency)
290
+
291
+ xml = Builder::XmlMarkup.new
292
+ xml.hps :Transaction do
293
+ xml.hps :CreditReversal do
294
+ xml.hps :Block1 do
295
+ xml.hps :Amt, amount
296
+ xml.hps :GatewayTxnId, transaction_id
297
+ xml << hydrate_additional_txn_fields(details) if details
298
+ end
299
+ end
300
+ end
301
+
302
+ submit_reverse(xml.target!)
303
+ end
304
+
305
+ def refund(amount, currency, card, card_holder = nil, details = nil)
306
+ check_amount(amount)
307
+ check_currency(currency)
308
+
309
+ xml = Builder::XmlMarkup.new
310
+ xml.hps :Transaction do
311
+ xml.hps :CreditReturn do
312
+ xml.hps :Block1 do
313
+ xml.hps :AllowDup, "Y"
314
+ xml.hps :Amt, amount
315
+ xml << hydrate_cardholder_data(card_holder) if card_holder
316
+ xml << hydrate_additional_txn_fields(details) if details
317
+ xml.hps :CardData do
318
+
319
+ # NOTE: Process as Manual Entry if they gave us a Credit Card
320
+ if card.is_a? HpsCreditCard
321
+ xml << hydrate_manual_entry(card)
322
+ # Note: Otherwise, consider it a token
323
+ else
324
+ xml.hps :TokenData do
325
+ xml.hps :TokenValue, card
326
+ end
327
+ end
328
+
329
+ end
330
+ end
331
+ end
332
+ end
333
+
334
+ submit_refund(xml.target!)
335
+ end
336
+
337
+ def refund_transaction(amount, currency, transaction_id, card_holder = nil, details = nil)
338
+ check_amount(amount)
339
+ check_currency(currency)
340
+
341
+ xml = Builder::XmlMarkup.new
342
+ xml.hps :Transaction do
343
+ xml.hps :CreditReturn do
344
+ xml.hps :Block1 do
345
+ xml.hps :AllowDup, "Y"
346
+ xml.hps :Amt, amount
347
+ xml.hps :GatewayTxnId, transaction_id
348
+ xml << hydrate_cardholder_data(card_holder) if card_holder
349
+ xml << hydrate_additional_txn_fields(details) if details
350
+ end
351
+ end
352
+ end
353
+
354
+ submit_refund(xml.target!)
355
+ end
356
+
357
+ def void(transaction_id)
358
+ xml = Builder::XmlMarkup.new
359
+ xml.hps :Transaction do
360
+ xml.hps :CreditVoid do
361
+ xml.hps :GatewayTxnId, transaction_id
362
+ end
363
+ end
364
+
365
+ submit_void(xml.target!)
366
+ end
367
+ private
368
+
369
+ def check_amount(amount)
370
+ raise @exception_mapper.map_sdk_exception(SdkCodes.invalid_amount) if amount.nil? or amount <= 0
371
+ end
372
+
373
+ def check_currency(currency)
374
+ raise @exception_mapper.map_sdk_exception(SdkCodes.missing_currency) if currency.empty?
375
+ raise @exception_mapper.map_sdk_exception(SdkCodes.invalid_currency) unless currency.downcase.eql? "usd"
376
+ end
377
+
378
+ def hydrate_cardholder_data(card_holder)
379
+ xml = Builder::XmlMarkup.new
380
+ xml.hps :CardHolderData do
381
+ xml.hps :CardHolderFirstName, card_holder.first_name
382
+ xml.hps :CardHolderLastName, card_holder.last_name
383
+ xml.hps :CardHolderEmail, card_holder.email_address
384
+ xml.hps :CardHolderPhone, card_holder.phone
385
+ xml.hps :CardHolderAddr, card_holder.address.address
386
+ xml.hps :CardHolderCity, card_holder.address.city
387
+ xml.hps :CardHolderState, card_holder.address.state
388
+ xml.hps :CardHolderZip, card_holder.address.zip
389
+ end
390
+ xml.target!
391
+ end
392
+
393
+ def hydrate_manual_entry(card)
394
+ xml = Builder::XmlMarkup.new
395
+ xml.hps :ManualEntry do
396
+ xml.hps :CardNbr, card.number
397
+ xml.hps :ExpMonth, card.exp_month
398
+ xml.hps :ExpYear, card.exp_year
399
+ xml.hps :CVV2, card.cvv
400
+ xml.hps :CardPresent, "N"
401
+ xml.hps :ReaderPresent, "N"
402
+ end
403
+ xml.target!
404
+ end
405
+
406
+ def hydrate_additional_txn_fields(details)
407
+ xml = Builder::XmlMarkup.new
408
+ xml.hps :AdditionalTxnFields do
409
+ xml.hps :Description, details.memo if details.memo
410
+ xml.hps :InvoiceNbr, details.invoice_number if details.invoice_number
411
+ xml.hps :CustomerID, details.customer_id if details.customer_id
412
+ end
413
+ xml.target!
414
+ end
415
+
416
+ def submit_charge(transaction, amount, currency)
417
+
418
+ response = doTransaction(transaction)
419
+
420
+ header = response["Header"]
421
+ process_charge_gateway_response(header["GatewayRspCode"], header["GatewayRspMsg"], header["GatewayTxnId"], amount, currency)
422
+
423
+ creditSaleRsp = response["Transaction"]["CreditSale"]
424
+ process_charge_issuer_response(creditSaleRsp["RspCode"], creditSaleRsp["RspText"], header["GatewayTxnId"], amount, currency)
425
+
426
+ result = HpsCharge.new(hydrate_transaction_header(header))
427
+ result.transaction_id = header["GatewayTxnId"]
428
+ result.authorized_amount = creditSaleRsp["AuthAmt"]
429
+ result.authorization_code = creditSaleRsp["AuthCode"]
430
+ result.avs_result_code = creditSaleRsp["AVSRsltCode"]
431
+ result.avs_result_text = creditSaleRsp["AVSRsltText"]
432
+ result.card_type = creditSaleRsp["CardType"]
433
+ result.cpc_indicator = creditSaleRsp["CPCInd"]
434
+ result.cvv_result_code = creditSaleRsp["CVVRsltCode"]
435
+ result.cvv_result_text = creditSaleRsp["CVVRsltText"]
436
+ result.reference_number = creditSaleRsp["RefNbr"]
437
+ result.response_code = creditSaleRsp["RspCode"]
438
+ result.response_text = creditSaleRsp["RspText"]
439
+
440
+ unless header["TokenData"].nil?
441
+ result.token_data = HpsTokenData.new()
442
+ result.token_data.response_code = header["TokenData"]["TokenRspCode"];
443
+ result.token_data.response_message = header["TokenData"]["TokenRspMsg"]
444
+ result.token_data.token_value = header["TokenData"]["TokenValue"]
445
+ end
446
+
447
+ result
448
+ end
449
+
450
+ def submit_authorize(transaction, amount, currency)
451
+
452
+ response = doTransaction(transaction)
453
+ header = response["Header"]
454
+ process_charge_gateway_response(header["GatewayRspCode"], header["GatewayRspMsg"], header["GatewayTxnId"], amount, currency)
455
+
456
+ auth_response = response["Transaction"]["CreditAuth"]
457
+ process_charge_issuer_response(auth_response["RspCode"], auth_response["RspText"], header["GatewayTxnId"], amount, currency)
458
+
459
+ result = HpsAuthorization.new(hydrate_transaction_header(header))
460
+ result.transaction_id = header["GatewayTxnId"]
461
+ result.authorized_amount = auth_response["AuthAmt"]
462
+ result.authorization_code = auth_response["AuthCode"]
463
+ result.avs_result_code = auth_response["AVSRsltCode"]
464
+ result.avs_result_text = auth_response["AVSRsltText"]
465
+ result.card_type = auth_response["CardType"]
466
+ result.cpc_indicator = auth_response["CPCInd"]
467
+ result.cvv_result_code = auth_response["CVVRsltCode"]
468
+ result.cvv_result_text = auth_response["CVVRsltText"]
469
+ result.reference_number = auth_response["RefNbr"]
470
+ result.response_code = auth_response["RspCode"]
471
+ result.response_text = auth_response["RspText"]
472
+
473
+ unless header["TokenData"].nil?
474
+ result.token_data = HpsTokenData.new()
475
+ result.token_data.response_code = header["TokenData"]["TokenRspCode"];
476
+ result.token_data.response_message = header["TokenData"]["TokenRspMsg"]
477
+ result.token_data.token_value = header["TokenData"]["TokenValue"]
478
+ end
479
+
480
+ result
481
+ end
482
+
483
+ def submit_refund(transaction)
484
+
485
+ response = doTransaction(transaction)
486
+ header = response["Header"]
487
+
488
+ unless header["GatewayRspCode"].eql? "0"
489
+ raise @exception_mapper.map_gateway_exception(header["GatewayTxnId"], header["GatewayRspCode"], header["GatewayRspMsg"])
490
+ end
491
+
492
+ result = HpsRefund.new(hydrate_transaction_header(header))
493
+ result.transaction_id = header["GatewayTxnId"]
494
+ result.response_code = "00"
495
+ result.response_text = ""
496
+
497
+ result
498
+ end
499
+
500
+ def submit_reverse(transaction)
501
+
502
+ response = doTransaction(transaction)
503
+ header = response["Header"]
504
+
505
+ if !header["GatewayRspCode"].eql? "0"
506
+ raise @exception_mapper.map_gateway_exception(header["GatewayTxnId"], header["GatewayRspCode"], header["GatewayRspMsg"])
507
+ end
508
+
509
+ reversal = response["Transaction"]["CreditReversal"]
510
+ result = HpsReversal.new(hydrate_transaction_header(header))
511
+ result.transaction_id = header["GatewayTxnId"]
512
+ result.avs_result_code = reversal["AVSRsltCode"]
513
+ result.avs_result_text = reversal["AVSRsltText"]
514
+ result.cpc_indicator = reversal["CPCInd"]
515
+ result.cvv_result_code = reversal["CVVRsltCode"]
516
+ result.cvv_result_text = reversal["CVVRsltText"]
517
+ result.reference_number = reversal["RefNbr"]
518
+ result.response_code = reversal["RspCode"]
519
+ result.response_text = reversal["RspText"]
520
+ result
521
+ end
522
+
523
+ def submit_verify(transaction)
524
+ response = doTransaction(transaction)
525
+ header = response["Header"]
526
+
527
+ if !header["GatewayRspCode"].eql? "0"
528
+ raise @exception_mapper.map_gateway_exception(header["GatewayTxnId"], header["GatewayRspCode"], header["GatewayRspMsg"])
529
+ end
530
+
531
+ account_verify = response["Transaction"]["CreditAccountVerify"]
532
+ result = HpsAccountVerify.new(hydrate_transaction_header(header))
533
+ result.transaction_id = header["GatewayTxnId"]
534
+ result.avs_result_code = account_verify["AVSRsltCode"]
535
+ result.avs_result_text = account_verify["AVSRsltText"]
536
+ result.reference_number = account_verify["RefNbr"]
537
+ result.response_code = account_verify["RspCode"]
538
+ result.response_text = account_verify["RspText"]
539
+ result.card_type = account_verify["CardType"]
540
+ result.cpc_indicator = account_verify["CPCInd"]
541
+ result.cvv_result_code = account_verify["CVVRsltCode"]
542
+ result.cvv_result_text = account_verify["CVVRsltText"]
543
+ result.authorization_code = account_verify["AuthCode"]
544
+ result.authorized_amount = account_verify["AuthAmt"]
545
+
546
+ if [ "85", "00" ].include? result.response_code == false
547
+ raise @exception_mapper.map_issuer_exception(result.transaction_id, result.response_code, result.response_text)
548
+ end
549
+
550
+ unless header["TokenData"].nil?
551
+ result.token_data = HpsTokenData.new()
552
+ result.token_data.response_code = header["TokenData"]["TokenRspCode"];
553
+ result.token_data.response_message = header["TokenData"]["TokenRspMsg"]
554
+ result.token_data.token_value = header["TokenData"]["TokenValue"]
555
+ end
556
+
557
+ result
558
+ end
559
+
560
+ def submit_void(transaction)
561
+ response = doTransaction(transaction)
562
+ header = response["Header"]
563
+ unless header["GatewayRspCode"].eql? "0"
564
+ raise @exception_mapper.map_gateway_exception(header["GatewayTxnId"], header["GatewayRspCode"], header["GatewayRspMsg"])
565
+ end
566
+
567
+ result = HpsVoid.new(hydrate_transaction_header(header))
568
+ result.transaction_id = header["GatewayTxnId"]
569
+ result.response_code = "00"
570
+ result.response_text = ""
571
+ result
572
+ end
573
+
574
+ def process_charge_gateway_response(response_code, response_text, transaction_id, amount, currency)
575
+
576
+ if !response_code.eql? "0"
577
+
578
+ if response_code.eql? "30"
579
+
580
+ begin
581
+
582
+ reverse_transaction(transaction_id, amount, currency)
583
+
584
+ rescue => e
585
+ exception = @exception_mapper.map_sdk_exception(SdkCodes.reversal_error_after_gateway_timeout, e)
586
+ exception.response_code = response_code
587
+ exception.response_text = response_text
588
+ raise exception
589
+ end
590
+
591
+ end
592
+
593
+ exception = @exception_mapper.map_gateway_exception(transaction_id, response_code, response_text)
594
+ exception.response_code = response_code
595
+ exception.response_text = response_text
596
+ raise exception
597
+
598
+ end
599
+
600
+ end
601
+
602
+ def process_charge_issuer_response(response_code, response_text, transaction_id, amount, currency)
603
+
604
+ if response_code.eql? "91"
605
+
606
+ begin
607
+
608
+ reverse_transaction(transaction_id, amount, currency)
609
+
610
+ rescue => e
611
+ exception = @exception_mapper.map_sdk_exception(SdkCodes.reversal_error_after_issuer_timeout, e)
612
+ exception.response_code = response_code
613
+ exception.response_text = response_text
614
+ raise exception
615
+ end
616
+
617
+ exception = @exception_mapper.map_sdk_exception(SdkCodes.processing_error)
618
+ exception.response_code = response_code
619
+ exception.response_text = response_text
620
+ raise exception
621
+
622
+ elsif !response_code.eql? "00"
623
+
624
+ exception = @exception_mapper.map_issuer_exception(transaction_id, response_code, response_text)
625
+ exception.response_code = response_code
626
+ exception.response_text = response_text
627
+ raise exception
628
+
629
+ end
630
+
631
+ end
632
+
633
+ end
634
+
635
635
  end