CnpOnline 8.31.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG +139 -0
  3. data/CONTRIBUTORS +2 -0
  4. data/DESCRIPTION +5 -0
  5. data/LICENSE +22 -0
  6. data/README.md +72 -0
  7. data/Rakefile +89 -0
  8. data/Rakefile~ +89 -0
  9. data/SETUP.md +46 -0
  10. data/bin/Setup.rb +124 -0
  11. data/bin/sample_batch_driver.rb +123 -0
  12. data/bin/sample_driver.rb +49 -0
  13. data/lib/Communications.rb +85 -0
  14. data/lib/Configuration.rb +67 -0
  15. data/lib/EnvironmentVariables.rb +22 -0
  16. data/lib/LitleBatchRequest.rb +562 -0
  17. data/lib/LitleListeners.rb +142 -0
  18. data/lib/LitleOnline.rb +62 -0
  19. data/lib/LitleOnlineRequest.rb +297 -0
  20. data/lib/LitleRequest.rb +494 -0
  21. data/lib/LitleTransaction.rb +463 -0
  22. data/lib/LitleXmlMapper.rb +64 -0
  23. data/lib/XMLFields.rb +1869 -0
  24. data/lib/cacert.pem +3331 -0
  25. data/samples/Auth/LitleAuthReversalTransaction.rb +15 -0
  26. data/samples/Auth/LitleAuthorizationTransaction.rb +31 -0
  27. data/samples/Auth/LitlePaymentFullLifeCycle.rb +47 -0
  28. data/samples/Batch/AccountUpdate.rb +64 -0
  29. data/samples/Batch/SampleBatchDriver.rb +94 -0
  30. data/samples/Capture/LitleCaptureGivenAuthTransaction.rb +30 -0
  31. data/samples/Capture/LitleCaptureTransaction.rb +14 -0
  32. data/samples/Capture/LitleForceCaptureTransaction.rb +26 -0
  33. data/samples/Capture/LitlePartialCapture.rb +16 -0
  34. data/samples/Credit/LitleCreditTransaction.rb +16 -0
  35. data/samples/Credit/LitleRefundTransaction.rb +29 -0
  36. data/samples/Other/LitleAvsTransaction.rb +34 -0
  37. data/samples/Other/LitleVoidTransaction.rb +18 -0
  38. data/samples/Paypage/FullPaypageLifeCycle.rb +74 -0
  39. data/samples/Run_all.rb +17 -0
  40. data/samples/Sale/LitleSaleTransaction.rb +29 -0
  41. data/samples/Sale/SampleSaleTransaction.rb +24 -0
  42. data/test/certification/certTest1_base.rb +945 -0
  43. data/test/certification/certTest2_authenhanced.rb +573 -0
  44. data/test/certification/certTest3_authreversal.rb +185 -0
  45. data/test/certification/certTest4_echeck.rb +278 -0
  46. data/test/certification/certTest5_token.rb +204 -0
  47. data/test/certification/certTest_batchAll.rb +337 -0
  48. data/test/certification/ts_all.rb +33 -0
  49. data/test/functional/test_activate.rb +100 -0
  50. data/test/functional/test_activateReversal.rb +56 -0
  51. data/test/functional/test_auth.rb +298 -0
  52. data/test/functional/test_authReversal.rb +69 -0
  53. data/test/functional/test_balanceInquiry.rb +80 -0
  54. data/test/functional/test_batch.rb +164 -0
  55. data/test/functional/test_batchStream.rb +145 -0
  56. data/test/functional/test_cancelSubscription.rb +55 -0
  57. data/test/functional/test_capture.rb +84 -0
  58. data/test/functional/test_captureGivenAuth.rb +235 -0
  59. data/test/functional/test_configuration.rb +89 -0
  60. data/test/functional/test_createPlan.rb +85 -0
  61. data/test/functional/test_credit.rb +174 -0
  62. data/test/functional/test_deactivate.rb +80 -0
  63. data/test/functional/test_deactivateReversal.rb +56 -0
  64. data/test/functional/test_depositReversal.rb +56 -0
  65. data/test/functional/test_echeckCredit.rb +134 -0
  66. data/test/functional/test_echeckRedeposit.rb +88 -0
  67. data/test/functional/test_echeckSale.rb +177 -0
  68. data/test/functional/test_echeckVerification.rb +127 -0
  69. data/test/functional/test_echeckVoid.rb +41 -0
  70. data/test/functional/test_forceCapture.rb +183 -0
  71. data/test/functional/test_litle_requests.rb +356 -0
  72. data/test/functional/test_load.rb +82 -0
  73. data/test/functional/test_loadReversal.rb +56 -0
  74. data/test/functional/test_override.rb +64 -0
  75. data/test/functional/test_refundReversal.rb +56 -0
  76. data/test/functional/test_sale.rb +259 -0
  77. data/test/functional/test_token.rb +115 -0
  78. data/test/functional/test_unload.rb +82 -0
  79. data/test/functional/test_unloadReversal.rb +56 -0
  80. data/test/functional/test_updateCardValidationNumOnToken.rb +43 -0
  81. data/test/functional/test_updatePlan.rb +58 -0
  82. data/test/functional/test_updateSubscription.rb +76 -0
  83. data/test/functional/test_xmlfields.rb +427 -0
  84. data/test/functional/ts_all.rb +66 -0
  85. data/test/unit/test_LitleAUBatch.rb +216 -0
  86. data/test/unit/test_LitleBatchRequest.rb +643 -0
  87. data/test/unit/test_LitleOnlineRequest.rb +295 -0
  88. data/test/unit/test_LitleRequest.rb +316 -0
  89. data/test/unit/test_LitleTransaction.rb +397 -0
  90. data/test/unit/test_activate.rb +92 -0
  91. data/test/unit/test_activateReversal.rb +44 -0
  92. data/test/unit/test_auth.rb +421 -0
  93. data/test/unit/test_authReversal.rb +82 -0
  94. data/test/unit/test_balanceInquiry.rb +52 -0
  95. data/test/unit/test_cancelSubscription.rb +43 -0
  96. data/test/unit/test_capture.rb +73 -0
  97. data/test/unit/test_captureGivenAuth.rb +188 -0
  98. data/test/unit/test_createPlan.rb +52 -0
  99. data/test/unit/test_credit.rb +342 -0
  100. data/test/unit/test_deactivate.rb +52 -0
  101. data/test/unit/test_deactivateReversal.rb +44 -0
  102. data/test/unit/test_depositReversal.rb +44 -0
  103. data/test/unit/test_echeckCredit.rb +71 -0
  104. data/test/unit/test_echeckRedeposit.rb +94 -0
  105. data/test/unit/test_echeckSale.rb +71 -0
  106. data/test/unit/test_echeckVerification.rb +71 -0
  107. data/test/unit/test_echeckVoid.rb +54 -0
  108. data/test/unit/test_forceCapture.rb +145 -0
  109. data/test/unit/test_load.rb +53 -0
  110. data/test/unit/test_loadReversal.rb +44 -0
  111. data/test/unit/test_refundReversal.rb +44 -0
  112. data/test/unit/test_sale.rb +465 -0
  113. data/test/unit/test_token.rb +144 -0
  114. data/test/unit/test_unload.rb +53 -0
  115. data/test/unit/test_unloadReversal.rb +44 -0
  116. data/test/unit/test_updateCardValidationNumOnToken.rb +80 -0
  117. data/test/unit/test_updatePlan.rb +45 -0
  118. data/test/unit/test_updateSubscription.rb +172 -0
  119. data/test/unit/test_xmlfields.rb +2930 -0
  120. data/test/unit/ts_unit.rb +65 -0
  121. metadata +255 -0
@@ -0,0 +1,124 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright (c) 2011 Litle & Co.
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person
6
+ # obtaining a copy of this software and associated documentation
7
+ # files (the "Software"), to deal in the Software without
8
+ # restriction, including without limitation the rights to use,
9
+ # copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the
11
+ # Software is furnished to do so, subject to the following
12
+ # conditions:
13
+ #
14
+ # The above copyright notice and this permission notice shall be
15
+ # included in all copies or substantial portions of the Software.
16
+ #
17
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
19
+ # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ # NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21
+ # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22
+ # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24
+ # OTHER DEALINGS IN THE SOFTWARE.
25
+
26
+ # make setup file executable
27
+
28
+ #
29
+ # Configuration generation for URL and credentials
30
+ #
31
+ class Setup
32
+ attr_reader :handle, :path
33
+ def initialize(filename)
34
+ @handle = File.new(filename, File::CREAT | File::TRUNC | File::RDWR, 0o600)
35
+ File.open(filename, 'w') do |f|
36
+ puts 'Welcome to Litle Ruby_SDK'
37
+ puts 'Please input your user name:'
38
+ f.puts 'user: ' + gets
39
+ puts 'Please input your password:'
40
+ f.puts 'password: ' + gets
41
+ puts 'Please input your merchantId:'
42
+
43
+ f.puts 'currency_merchant_map:'
44
+ f.puts ' DEFAULT: ' + gets
45
+ f.puts "default_report_group: 'Default Report Group'"
46
+
47
+ puts "Please choose Litle url from the following list (example: 'prelive') or directly input another URL:
48
+ sandbox => https://www.testvantivcnp.com/sandbox/communicator/online
49
+ prelive => https://payments.vantivprelive.com/vap/communicator/online
50
+ postlive => https://payments.vantivpostlive.com/vap/communicator/online
51
+ production => https://payments.vantivcnp.com/vap/communicator/online
52
+ transact_prelive => https://transact.vantivprelive.com/vap/communicator/online
53
+ transact_postlive => https://transact.vantivpostlive.com/vap/communicator/online
54
+ transact_production => https://transact.vantivcnp.com/vap/communicator/online"
55
+ f.puts 'url: ' + Setup.choice(gets)
56
+ puts 'Please input the proxy address, if no proxy hit enter key: '
57
+ f.puts 'proxy_addr: ' + gets
58
+ puts 'Please input the proxy port, if no proxy hit enter key: '
59
+ f.puts 'proxy_port: ' + gets
60
+ puts 'Please input your sFTP username for batch processing; if no sFTP, hit enter key: '
61
+ f.puts 'sftp_username: ' + gets
62
+ puts 'Please input your sFTP password for batch processing; if no sFTP, hit enter key: '
63
+ f.puts 'sftp_password: ' + gets
64
+ puts 'Please input your sFTP url for batch processing; if no sFTP, hit enter key: '
65
+ f.puts 'sftp_url: ' + gets
66
+ puts 'Please input your url for fast batch processing; if no fast batch, hit enter key: '
67
+ f.puts 'fast_url: ' + gets
68
+ puts 'Please input your port for fast batch processing; if no fast batch, hit enter key: '
69
+ f.puts 'fast_port: ' + gets
70
+
71
+ f.puts 'printxml: false'
72
+ # default http timeout set to 500 ms
73
+ f.puts 'timeout: 500'
74
+ end
75
+ end
76
+
77
+ def finished
78
+ @handle.close
79
+ end
80
+
81
+ def self.choice(litle_env)
82
+ litle_online_ctx = 'vap/communicator/online'
83
+ if litle_env == "sandbox\n"
84
+ return 'https://www.testvantivcnp.com/sandbox/communicator/online'
85
+ elsif litle_env == "prelive\n"
86
+ return 'https://payments.vantivprelive.com/' + litle_online_ctx
87
+ elsif litle_env == "postlive\n"
88
+ return 'https://payments.vantivpostlive.com/' + litle_online_ctx
89
+ elsif litle_env == "production\n"
90
+ return 'https://payments.vantivcnp.com/' + litle_online_ctx
91
+ elsif litle_env == "transact_production\n"
92
+ return 'https://transact.vantivcnp.com/' + litle_online_ctx
93
+ elsif litle_env == "transact_prelive\n"
94
+ return 'https://transact.vantivprelive.com/' + litle_online_ctx
95
+ elsif litle_env == "transact_postlive\n"
96
+ return 'https://transact.vantivpostlive.com/' + litle_online_ctx
97
+ else
98
+ return 'https://www.testvantivcnp.com/sandbox/communicator/online'
99
+ end
100
+ end
101
+ end
102
+
103
+ #
104
+ #
105
+ # Optionally enable the configuration to reside in a custom location
106
+ # if the $LITLE_CONFIG_DIR directory is set
107
+ #
108
+
109
+ # make the config.yml file in the LITLE_CONFIG_DIR directory or HOME directory
110
+ path = if !ENV['LITLE_CONFIG_DIR'].nil?
111
+ ENV['LITLE_CONFIG_DIR']
112
+ else
113
+ ENV['HOME']
114
+ end
115
+
116
+ # make the config.yml file hidden
117
+ # create a config file contain all the configuration data
118
+ config_file = path + '/.litle_SDK_config.yml'
119
+ f = Setup.new(config_file)
120
+
121
+ # return the path of the config file and the path file
122
+ @path = File.expand_path(config_file)
123
+ puts 'The Litle configuration file has been generated, the file is located at: ' + @path
124
+ f.finished
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env ruby
2
+ =begin
3
+ Copyright (c) 2011 Litle & Co.
4
+
5
+ Permission is hereby granted, free of charge, to any person
6
+ obtaining a copy of this software and associated documentation
7
+ files (the "Software"), to deal in the Software without
8
+ restriction, including without limitation the rights to use,
9
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the
11
+ Software is furnished to do so, subject to the following
12
+ conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
19
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24
+ OTHER DEALINGS IN THE SOFTWARE.
25
+ =end
26
+
27
+ #Sample Driver
28
+ require_relative '../lib/LitleOnline'
29
+
30
+ saleHash = {
31
+ 'reportGroup'=>'Planets',
32
+ 'id' => '006',
33
+ 'orderId'=>'12344',
34
+ 'amount'=>'6000',
35
+ 'orderSource'=>'ecommerce',
36
+ 'card'=>{
37
+ 'type'=>'VI',
38
+ 'number' =>'4100000000000001',
39
+ 'expDate' =>'1210'
40
+ }}
41
+
42
+ accountUpdateHash = {
43
+ 'reportGroup'=>'Planets',
44
+ 'id'=>'12345',
45
+ 'customerId'=>'0987',
46
+ 'orderId'=>'1234',
47
+ 'card'=>{
48
+ 'type'=>'VI',
49
+ 'number' =>'4100000000000001',
50
+ 'expDate' =>'1210'
51
+ }}
52
+
53
+ rfrHash = {
54
+ 'merchantId'=>101,
55
+ 'postDay'=>'2013-06-04'
56
+ }
57
+
58
+ path = Dir.pwd
59
+
60
+ request = LitleOnline::LitleRequest.new({'sessionId'=>'8675309'})
61
+
62
+ request.create_new_litle_request(path)
63
+ puts "Created new LitleRequest at location: " + path
64
+ start = Time::now
65
+ #create five batches, each with 10 sales
66
+ #5.times{
67
+ batch = LitleOnline::LitleBatchRequest.new
68
+ batch.create_new_batch(path)
69
+
70
+ #add the same sale ten times
71
+ #10.times{
72
+ batch.sale(saleHash)
73
+ #}
74
+ batch.account_update(accountUpdateHash)
75
+
76
+ #close the batch, indicating we plan to add no more transactions
77
+ batch.close_batch()
78
+ #add the batch to the LitleRequest
79
+ request.commit_batch(batch)
80
+ #}
81
+
82
+ request.add_rfr_request(rfrHash)
83
+
84
+
85
+
86
+ # puts "Finished adding batches to LitleRequest at " + request.get_path_to_batches
87
+ #finish the Litle Request, indicating we plan to add no more batches
88
+ request.finish_request
89
+ puts "Generated final XML markup of the LitleRequest"
90
+
91
+ #send the batch files at the given directory over sFTP
92
+ request.send_to_litle
93
+ puts "Dropped off the XML of the LitleRequest over FTP"
94
+ #grab the expected number of responses from the sFTP server and save them to the given path
95
+ request.get_responses_from_server()
96
+ puts "Received the LitleRequest responses from the server"
97
+ #process the responses from the server with a listener which applies the given block
98
+ start = Time::now
99
+ request.process_responses({:transaction_listener => LitleOnline::DefaultLitleListener.new do |transaction|
100
+ type = transaction["type"]
101
+ #if we're dealing with a saleResponse (check the Litle XML Reference Guide!)
102
+ if(type == "saleResponse") then
103
+ #grab an attribute of the parent of the response
104
+ puts "Report Group: " + transaction["reportGroup"]
105
+
106
+ #grab some child elements of the transaction
107
+ puts "Litle Txn Id: " + transaction["litleTxnId"]
108
+ puts "Order Id: " + transaction["orderId"]
109
+ puts "Response: " + transaction["response"]
110
+
111
+ #grab a child element of a child element of the transation
112
+ puts "AVS Result: " + transaction["fraudResult"]["avsResult"]
113
+ puts "Token Response Message: " + transaction["tokenResponse"]["tokenMessage"]
114
+ end
115
+
116
+ if(type == "RFRResponse") then
117
+ puts "RFR Response Code: " + transaction["response"]
118
+ puts "RFR Response Message: " + transaction["message"]
119
+ end
120
+ end})
121
+ stop = Time::now
122
+ puts "Total time: " + (stop - start).to_s
123
+
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ =begin
4
+ Copyright (c) 2011 Litle & Co.
5
+
6
+ Permission is hereby granted, free of charge, to any person
7
+ obtaining a copy of this software and associated documentation
8
+ files (the "Software"), to deal in the Software without
9
+ restriction, including without limitation the rights to use,
10
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ copies of the Software, and to permit persons to whom the
12
+ Software is furnished to do so, subject to the following
13
+ conditions:
14
+
15
+ The above copyright notice and this permission notice shall be
16
+ included in all copies or substantial portions of the Software.
17
+
18
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
20
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
22
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
23
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
24
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25
+ OTHER DEALINGS IN THE SOFTWARE.
26
+ =end
27
+
28
+ #Sample Driver
29
+ #require 'LitleOnline'
30
+ #include LitleOnline
31
+ require_relative '../lib/LitleOnline'
32
+ hash = {
33
+ 'reportGroup'=>'product1',
34
+ 'orderId'=>'12344',
35
+ 'card'=>{
36
+ 'type'=>'VI',
37
+ 'number' =>'4100000000000001',
38
+ 'expDate' =>'1210'
39
+ },
40
+ 'orderSource'=>'ecommerce',
41
+ 'amount'=>'106'
42
+ }
43
+
44
+ #perform credit transaction
45
+ response= LitleOnline::LitleOnlineRequest.new.credit(hash)
46
+
47
+ #display results
48
+ puts "Message: "+response.message
49
+ puts "Litle Transaction ID: "+response.creditResponse.litleTxnId
@@ -0,0 +1,85 @@
1
+ =begin
2
+ Copyright (c) 2011 Litle & Co.
3
+
4
+ Permission is hereby granted, free of charge, to any person
5
+ obtaining a copy of this software and associated documentation
6
+ files (the "Software"), to deal in the Software without
7
+ restriction, including without limitation the rights to use,
8
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the
10
+ Software is furnished to do so, subject to the following
11
+ conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
18
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23
+ OTHER DEALINGS IN THE SOFTWARE.
24
+ =end
25
+
26
+ #
27
+ # Used for all transmission to Litle over HTTP or HTTPS
28
+ # works with or without an HTTP proxy
29
+ #
30
+ # URL and proxy server settings are derived from the configuration file
31
+ #
32
+ module LitleOnline
33
+ class Communications
34
+ ##For http or https post with or without a proxy
35
+ def Communications.http_post(post_data,config_hash)
36
+
37
+ proxy_addr = config_hash['proxy_addr']
38
+ proxy_port = config_hash['proxy_port']
39
+ litle_url = config_hash['url']
40
+
41
+ # setup https or http post
42
+ url = URI.parse(litle_url)
43
+
44
+ response_xml = nil
45
+ https = Net::HTTP.new(url.host, url.port, proxy_addr, proxy_port)
46
+ if(url.scheme == 'https')
47
+ https.use_ssl = url.scheme=='https'
48
+ https.verify_mode = OpenSSL::SSL::VERIFY_PEER
49
+ https.ca_file = File.join(File.dirname(__FILE__), "cacert.pem")
50
+ end
51
+ https.start { |http|
52
+ response = http.request_post(url.path, post_data.to_s, {'Content-Type'=>'text/xml','Connection'=>'close'})
53
+ response_xml = response
54
+ }
55
+
56
+ # validate response, only an HTTP 200 will work, redirects are not followed
57
+ case response_xml
58
+ when Net::HTTPOK
59
+ return response_xml.body
60
+ else
61
+ raise("Error with http http_post_request, code:" + response_xml.header.code)
62
+ end
63
+ end
64
+ end
65
+ end
66
+
67
+ =begin
68
+ NOTES ON HTTP TIMEOUT
69
+
70
+ Litle & Co. optimizes our systems to ensure the return of responses as quickly as possible, some portions of the process are beyond our control.
71
+ The round-trip time of an Authorization can be broken down into three parts, as follows:
72
+ 1. Transmission time (across the internet) to Litle & Co. and back to the merchant
73
+ 2. Processing time by the authorization provider
74
+ 3. Processing time by Litle
75
+ Under normal operating circumstances, the transmission time to and from Litle does not exceed 0.6 seconds
76
+ and processing overhead by Litle occurs in 0.1 seconds.
77
+ Typically, the processing time by the card association or authorization provider can take between 0.5 and 3 seconds,
78
+ but some percentage of transactions may take significantly longer.
79
+
80
+ Because the total processing time can vary due to a number of factors, Litle & Co. recommends using a minimum timeout setting of
81
+ 60 seconds to accomodate Sale transactions and 30 seconds if you are not utilizing Sale tranactions.
82
+
83
+ These settings should ensure that you do not frequently disconnect prior to receiving a valid authorization causing dropped orders
84
+ and/or re-auths and duplicate auths.
85
+ =end
@@ -0,0 +1,67 @@
1
+ =begin
2
+ Copyright (c) 2011 Litle & Co.
3
+
4
+ Permission is hereby granted, free of charge, to any person
5
+ obtaining a copy of this software and associated documentation
6
+ files (the "Software"), to deal in the Software without
7
+ restriction, including without limitation the rights to use,
8
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the
10
+ Software is furnished to do so, subject to the following
11
+ conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
18
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23
+ OTHER DEALINGS IN THE SOFTWARE.
24
+ =end
25
+
26
+ require 'yaml'
27
+ #
28
+ # Loads the configuration from a file
29
+ #
30
+ module LitleOnline
31
+ class Configuration
32
+ class << self
33
+ # External logger, if specified
34
+ attr_accessor :logger
35
+ end
36
+
37
+ def config
38
+ begin
39
+ if !(ENV['LITLE_CONFIG_DIR'].nil?)
40
+ config_file = ENV['LITLE_CONFIG_DIR'] + "/.litle_SDK_config.yml"
41
+ else
42
+ config_file = ENV['HOME'] + "/.litle_SDK_config.yml"
43
+ end
44
+ #if Env variable exist, then just override the data from config file
45
+ if (File.exists?(config_file))
46
+ datas=YAML.load_file(config_file)
47
+ else
48
+ environments = EnvironmentVariables.new
49
+ datas={}
50
+ environments.instance_variables.each {|var| datas[var.to_s.delete("@")] = environments.instance_variable_get(var) }
51
+ end
52
+ datas.each {|key,value| setENV(key,datas)}
53
+ return datas
54
+ rescue
55
+ return {}
56
+ end
57
+
58
+ end
59
+ def setENV(key,datas)
60
+ if !(ENV['litle_'+key].nil?)
61
+ datas[key]=ENV['litle_'+key]
62
+ end
63
+ end
64
+
65
+ end
66
+
67
+ end