exact4r 0.5.2 → 0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +8 -0
- data/README +8 -8
- data/VERSION +1 -1
- data/doc/classes/EWS/Transaction/FakeResponse.html +451 -0
- data/doc/classes/EWS/Transaction/Request.html +54 -81
- data/doc/classes/EWS/Transaction/Response.html +182 -14
- data/doc/classes/EWS/Transaction/Validator.html +168 -0
- data/doc/classes/EWS/Transporter.html +271 -0
- data/doc/created.rid +1 -1
- data/doc/files/CHANGELOG.html +15 -2
- data/doc/files/README.html +17 -9
- data/doc/files/VERSION.html +2 -2
- data/doc/files/lib/ews/transaction/fake_response_rb.html +101 -0
- data/doc/files/lib/ews/transaction/mapping_rb.html +1 -1
- data/doc/files/lib/ews/transaction/request_rb.html +8 -1
- data/doc/files/lib/ews/transaction/response_rb.html +1 -1
- data/doc/files/lib/ews/transaction/validator_rb.html +101 -0
- data/doc/files/lib/ews/{transaction/transporter_rb.html → transporter_rb.html} +3 -3
- data/doc/files/lib/exact4r_rb.html +4 -2
- data/doc/fr_class_index.html +3 -1
- data/doc/fr_file_index.html +3 -1
- data/doc/fr_method_index.html +18 -7
- data/lib/ews/transaction/fake_response.rb +137 -0
- data/lib/ews/transaction/mapping.rb +38 -15
- data/lib/ews/transaction/request.rb +10 -58
- data/lib/ews/transaction/response.rb +3 -3
- data/lib/ews/transaction/validator.rb +230 -0
- data/lib/ews/transporter.rb +143 -0
- data/lib/exact4r.rb +4 -1
- data/spec/donncha_spec.rb +13 -0
- data/spec/mapping_spec.rb +45 -4
- data/spec/request_spec.rb +96 -69
- data/spec/spec_helper.rb +20 -8
- data/spec/transporter_spec.rb +26 -2
- data/spec/validator_spec.rb +145 -0
- metadata +16 -7
- data/doc/classes/EWS/Transaction/Transporter.html +0 -250
- data/lib/ews/transaction/transporter.rb +0 -120
- data/output.log +0 -368
@@ -1,120 +0,0 @@
|
|
1
|
-
require 'net/https'
|
2
|
-
|
3
|
-
module EWS # :nodoc:
|
4
|
-
module Transaction # :nodoc:
|
5
|
-
|
6
|
-
# A Transporter is responsible for communicating with the E-xact Web Service in
|
7
|
-
# whichever dialect is chosen by the user. The available options are:
|
8
|
-
# :json REST with JSON payload
|
9
|
-
# :rest REST with XML payload (default)
|
10
|
-
# :soap SOAP
|
11
|
-
#
|
12
|
-
# The Transporter will connect to the service, using SSL if required, and will
|
13
|
-
# encode Reqests to send to the service, and decode Responses received from the
|
14
|
-
# service.
|
15
|
-
#
|
16
|
-
# Once configured to connect to a particular service, it can be used repeatedly
|
17
|
-
# to send as many transactions as required.
|
18
|
-
class Transporter
|
19
|
-
|
20
|
-
# Initialize a Transporter.
|
21
|
-
#
|
22
|
-
# You can specify the URL you would like the Transporter to connect to, although it defaults
|
23
|
-
# to https://api.e-xact.com, the location of our transaction processing web service.
|
24
|
-
#
|
25
|
-
# You can also specify a hash of options as follows:
|
26
|
-
# :server_cert the path to the server's certificate
|
27
|
-
# :issuer_cert the path to the certificate of the issuer of the server certificate
|
28
|
-
# :transport_type the default transport_type for this transporter (defaults to :rest)
|
29
|
-
#
|
30
|
-
# The default certificates are those required to connect to https://api.e-xact.com and the
|
31
|
-
# default <tt>transport_type</tt> is <tt>:rest</tt>. The default <tt>transport_type</tt> can be overridden on a per-transaction
|
32
|
-
# basis, if you choose to do so, by specifying it as a parameter to the <tt>send</tt> method.
|
33
|
-
def initialize(url = "https://api.e-xact.com/", options = {})
|
34
|
-
@url = URI.parse(url.gsub(/\/$/,''))
|
35
|
-
base = File.dirname(__FILE__)
|
36
|
-
@server_cert = options[:server_cert] || base+"/../../../certs/exact.cer"
|
37
|
-
@issuer_cert = options[:issuer_cert] || base+"/../../../certs/equifax_ca.cer"
|
38
|
-
@transport_type = options[:transport_type] || :rest
|
39
|
-
end
|
40
|
-
|
41
|
-
# Send a transaction request to the server
|
42
|
-
#
|
43
|
-
# <tt>transaction</tt>:: the Request object to encode for transmission to the server
|
44
|
-
# <tt>transport_type</tt>:: (optional) the transport type to use for this transaction only. If it is not specified, the Transporter's transport type will be used
|
45
|
-
def submit(transaction, transport_type = nil)
|
46
|
-
raise "Request not supplied" if transaction.nil?
|
47
|
-
return false unless transaction.valid?
|
48
|
-
|
49
|
-
transport_type ||= @transport_type
|
50
|
-
|
51
|
-
raise "Transport type #{transport_type} is not supported" unless @@transport_types.include? transport_type
|
52
|
-
|
53
|
-
transport_details = @@transport_types[transport_type]
|
54
|
-
|
55
|
-
request = build_http_request(transaction, transport_type, transport_details[:suffix])
|
56
|
-
request.basic_auth(transaction.gateway_id, transaction.password)
|
57
|
-
request["User-Agent"] = "Ruby"
|
58
|
-
request.content_type = "#{transport_details[:content_type]}; charset=UTF-8"
|
59
|
-
|
60
|
-
response = get_connection.request(request)
|
61
|
-
|
62
|
-
case response
|
63
|
-
when Net::HTTPSuccess then EWS::Transaction::Mapping.send "#{transport_type}_to_response", response.body
|
64
|
-
else
|
65
|
-
response.error!
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
69
|
-
|
70
|
-
private
|
71
|
-
|
72
|
-
def build_http_request(transaction, transport_type, request_suffix)
|
73
|
-
req = nil
|
74
|
-
if !transaction.is_find_transaction? or transport_type == :soap
|
75
|
-
req = Net::HTTP::Post.new(@url.path + "/transaction.#{request_suffix}")
|
76
|
-
if transport_type == :soap
|
77
|
-
# add the SOAPAction header
|
78
|
-
soapaction = (transaction.is_find_transaction?) ? "TransactionInfo" : "SendAndCommit"
|
79
|
-
req.add_field "soapaction", "http://secure2.e-xact.com/vplug-in/transaction/rpc-enc/#{soapaction}"
|
80
|
-
end
|
81
|
-
req.body = EWS::Transaction::Mapping.send "request_to_#{transport_type.to_s}", transaction
|
82
|
-
else
|
83
|
-
req = Net::HTTP::Get.new(@url.path + "/transaction/#{transaction.transaction_tag}.#{request_suffix}")
|
84
|
-
end
|
85
|
-
req
|
86
|
-
end
|
87
|
-
|
88
|
-
def get_connection
|
89
|
-
# re-use the connection if it's available
|
90
|
-
return @connection unless @connection.nil?
|
91
|
-
|
92
|
-
@connection = Net::HTTP.new(@url.host, @url.port)
|
93
|
-
@connection.set_debug_output $stdout if $DEBUG
|
94
|
-
if @url.scheme == 'https'
|
95
|
-
@connection.use_ssl = true
|
96
|
-
@connection.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
97
|
-
@connection.ca_file = @issuer_cert
|
98
|
-
@connection.verify_callback = method(:validate_certificate)
|
99
|
-
end
|
100
|
-
@connection
|
101
|
-
end
|
102
|
-
|
103
|
-
def validate_certificate(is_ok, ctx)
|
104
|
-
# Don't check the root CA cert
|
105
|
-
unless (ctx.current_cert.subject.to_s == ctx.current_cert.issuer.to_s)
|
106
|
-
is_ok &&= File.open(@server_cert).read == ctx.current_cert.to_pem
|
107
|
-
end
|
108
|
-
is_ok
|
109
|
-
end
|
110
|
-
|
111
|
-
# what transport types we support, and their corresponding suffixes
|
112
|
-
@@transport_types = {
|
113
|
-
:rest => {:suffix => "xml", :content_type => "application/xml"},
|
114
|
-
:json => {:suffix => "json", :content_type => "application/json"},
|
115
|
-
:soap => {:suffix => "xmlsoap", :content_type => "application/xml"}
|
116
|
-
}
|
117
|
-
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
data/output.log
DELETED
@@ -1,368 +0,0 @@
|
|
1
|
-
Index: VERSION
|
2
|
-
===================================================================
|
3
|
-
--- VERSION (revision 6047)
|
4
|
-
+++ VERSION (working copy)
|
5
|
-
@@ -1 +1 @@
|
6
|
-
-0.5.1
|
7
|
-
|
8
|
-
+0.5.2
|
9
|
-
|
10
|
-
Index: lib/ews/transaction/response.rb
|
11
|
-
===================================================================
|
12
|
-
--- lib/ews/transaction/response.rb (revision 6043)
|
13
|
-
+++ lib/ews/transaction/response.rb (working copy)
|
14
|
-
@@ -2,13 +2,17 @@
|
15
|
-
module Transaction # :nodoc:
|
16
|
-
|
17
|
-
# This class encapsulates all the data returned from the E-xact Web Service.
|
18
|
-
- class Response < EWS::Transaction::Request
|
19
|
-
+ class Response
|
20
|
-
|
21
|
-
attr_accessor :logon_message, :error_number, :error_description, :transaction_error, :transaction_approved
|
22
|
-
attr_accessor :exact_resp_code, :exact_message, :bank_resp_code, :bank_message, :bank_resp_code_2
|
23
|
-
attr_accessor :sequence_no, :avs, :cvv2, :retrieval_ref_no, :cavv_response
|
24
|
-
attr_accessor :merchant_name, :merchant_address, :merchant_city, :merchant_province, :merchant_country, :merchant_postal, :merchant_url, :CTR
|
25
|
-
|
26
|
-
+ attr_accessor :gateway_id, :password, :transaction_type, :amount, :surcharge_amount, :cc_number, :transaction_tag, :track1, :track2, :pan, :auth_number, :cc_expiry, :cardholder_name
|
27
|
-
+ attr_accessor :cc_verification_str1, :cc_verification_str2, :cvd_presence_ind, :tax1_amount, :tax1_number, :tax2_amount, :tax2_number, :secure_auth_required, :secure_auth_result
|
28
|
-
+ attr_accessor :ecommerce_flag, :xid, :cavv, :cavv_algorithm, :reference_no, :customer_ref, :reference_3, :language, :client_ip, :client_email, :user_name
|
29
|
-
+
|
30
|
-
# Indicates whether or not the transaction was approved
|
31
|
-
def approved?
|
32
|
-
self.transaction_approved == 1
|
33
|
-
Index: lib/ews/transaction/transporter.rb
|
34
|
-
===================================================================
|
35
|
-
--- lib/ews/transaction/transporter.rb (revision 6047)
|
36
|
-
+++ lib/ews/transaction/transporter.rb (working copy)
|
37
|
-
@@ -6,7 +6,7 @@
|
38
|
-
# A Transporter is responsible for communicating with the E-xact Web Service in
|
39
|
-
# whichever dialect is chosen by the user. The available options are:
|
40
|
-
# :json REST with JSON payload
|
41
|
-
- # :rest REST with XML payload
|
42
|
-
+ # :rest REST with XML payload (default)
|
43
|
-
# :soap SOAP
|
44
|
-
#
|
45
|
-
# The Transporter will connect to the service, using SSL if required, and will
|
46
|
-
@@ -19,95 +19,85 @@
|
47
|
-
|
48
|
-
# Initialize a Transporter.
|
49
|
-
#
|
50
|
-
- # You can specify the URL you would like the Transporter to connect to,
|
51
|
-
- # although it defaults to https://api.e-xact.com, the location of our web
|
52
|
-
- # service.
|
53
|
-
+ # You can specify the URL you would like the Transporter to connect to, although it defaults
|
54
|
-
+ # to https://api.e-xact.com, the location of our transaction processing web service.
|
55
|
-
#
|
56
|
-
# You can also specify a hash of options as follows:
|
57
|
-
# :server_cert the path to the server's certificate
|
58
|
-
# :issuer_cert the path to the certificate of the issuer of the server certificate
|
59
|
-
- # :transport_type the default transport_type for this transporter
|
60
|
-
+ # :transport_type the default transport_type for this transporter (defaults to :rest)
|
61
|
-
#
|
62
|
-
# The default certificates are those required to connect to https://api.e-xact.com and the
|
63
|
-
# default <tt>transport_type</tt> is <tt>:rest</tt>. The default <tt>transport_type</tt> can be overridden on a per-transaction
|
64
|
-
# basis, if you choose to do so, by specifying it as a parameter to the <tt>send</tt> method.
|
65
|
-
def initialize(url = "https://api.e-xact.com/", options = {})
|
66
|
-
- @url = URI.parse(url)
|
67
|
-
+ @url = URI.parse(url.gsub(/\/$/,''))
|
68
|
-
base = File.dirname(__FILE__)
|
69
|
-
@server_cert = options[:server_cert] || base+"/../../../certs/exact.cer"
|
70
|
-
@issuer_cert = options[:issuer_cert] || base+"/../../../certs/equifax_ca.cer"
|
71
|
-
- @transport_type = options[:issuer_cert] || :rest
|
72
|
-
+ @transport_type = options[:transport_type] || :rest
|
73
|
-
end
|
74
|
-
|
75
|
-
# Send a transaction request to the server
|
76
|
-
#
|
77
|
-
- # <tt>request</tt>:: the Request object to encode for transmission to the server
|
78
|
-
- # <tt>transport_type</tt>:: (optional) the transport type to use for this transaction only. If it not specified, the default transport type for this Transporter will be used
|
79
|
-
- def submit(request, transport_type = nil)
|
80
|
-
- raise "Request not supplied" if request.nil?
|
81
|
-
- return false unless request.valid?
|
82
|
-
+ # <tt>transaction</tt>:: the Request object to encode for transmission to the server
|
83
|
-
+ # <tt>transport_type</tt>:: (optional) the transport type to use for this transaction only. If it is not specified, the Transporter's transport type will be used
|
84
|
-
+ def submit(transaction, transport_type = nil)
|
85
|
-
+ raise "Request not supplied" if transaction.nil?
|
86
|
-
+ return false unless transaction.valid?
|
87
|
-
|
88
|
-
transport_type ||= @transport_type
|
89
|
-
|
90
|
-
raise "Transport type #{transport_type} is not supported" unless @@transport_types.include? transport_type
|
91
|
-
|
92
|
-
- if !request.is_find_transaction? or transport_type == :soap
|
93
|
-
- content = post(request, transport_type)
|
94
|
-
- else
|
95
|
-
- content = get(request, transport_type)
|
96
|
-
- end
|
97
|
-
+ transport_details = @@transport_types[transport_type]
|
98
|
-
+
|
99
|
-
+ request = build_http_request(transaction, transport_type, transport_details[:suffix])
|
100
|
-
+ request.basic_auth(transaction.gateway_id, transaction.password)
|
101
|
-
+ request["User-Agent"] = "Ruby"
|
102
|
-
+ request.content_type = "#{transport_details[:content_type]}; charset=UTF-8"
|
103
|
-
|
104
|
-
- EWS::Transaction::Mapping.send "#{transport_type}_to_response", content
|
105
|
-
- end
|
106
|
-
+ response = get_connection.request(request)
|
107
|
-
|
108
|
-
- private
|
109
|
-
-
|
110
|
-
- def post(request, transport_type)
|
111
|
-
- # build the request
|
112
|
-
- req = Net::HTTP::Post.new(@url.path + "transaction.#{@@transport_types[transport_type]}")
|
113
|
-
- req.basic_auth(request.gateway_id, request.password)
|
114
|
-
- if transport_type == :soap
|
115
|
-
- # add the SOAPAction header
|
116
|
-
- soapaction = (request.is_find_transaction?) ? "TransactionInfo" : "SendAndCommit"
|
117
|
-
- req.add_field "soapaction", "http://secure2.e-xact.com/vplug-in/transaction/rpc-enc/#{soapaction}"
|
118
|
-
- end
|
119
|
-
- req.content_type = (transport_type == :json) ? "application/json" : "application/xml"
|
120
|
-
- req.body = EWS::Transaction::Mapping.send "request_to_#{transport_type.to_s}", request
|
121
|
-
-
|
122
|
-
- response = get_connection.request(req)
|
123
|
-
-
|
124
|
-
case response
|
125
|
-
- when Net::HTTPSuccess then response.body
|
126
|
-
+ when Net::HTTPSuccess then EWS::Transaction::Mapping.send "#{transport_type}_to_response", response.body
|
127
|
-
else
|
128
|
-
response.error!
|
129
|
-
end
|
130
|
-
+
|
131
|
-
end
|
132
|
-
|
133
|
-
- def get(request, transport_type)
|
134
|
-
- # build the request
|
135
|
-
- req = Net::HTTP::Get.new(@url.path + "transaction/#{request.transaction_tag}.#{@@transport_types[transport_type]}")
|
136
|
-
- req.basic_auth(request.gateway_id, request.password)
|
137
|
-
- req.content_type = (transport_type == :json) ? "application/json" : "application/xml"
|
138
|
-
+ private
|
139
|
-
|
140
|
-
- response = get_connection.request(req)
|
141
|
-
-
|
142
|
-
- case response
|
143
|
-
- when Net::HTTPSuccess then response.body
|
144
|
-
+ def build_http_request(transaction, transport_type, request_suffix)
|
145
|
-
+ req = nil
|
146
|
-
+ if !transaction.is_find_transaction? or transport_type == :soap
|
147
|
-
+ req = Net::HTTP::Post.new(@url.path + "/transaction.#{request_suffix}")
|
148
|
-
+ if transport_type == :soap
|
149
|
-
+ # add the SOAPAction header
|
150
|
-
+ soapaction = (transaction.is_find_transaction?) ? "TransactionInfo" : "SendAndCommit"
|
151
|
-
+ req.add_field "soapaction", "http://secure2.e-xact.com/vplug-in/transaction/rpc-enc/#{soapaction}"
|
152
|
-
+ end
|
153
|
-
+ req.body = EWS::Transaction::Mapping.send "request_to_#{transport_type.to_s}", transaction
|
154
|
-
else
|
155
|
-
- response.error!
|
156
|
-
+ req = Net::HTTP::Get.new(@url.path + "/transaction/#{transaction.transaction_tag}.#{request_suffix}")
|
157
|
-
end
|
158
|
-
+ req
|
159
|
-
end
|
160
|
-
-
|
161
|
-
+
|
162
|
-
def get_connection
|
163
|
-
- connection = Net::HTTP.new(@url.host, @url.port)
|
164
|
-
- connection.set_debug_output $stdout if $DEBUG
|
165
|
-
+ # re-use the connection if it's available
|
166
|
-
+ return @connection unless @connection.nil?
|
167
|
-
+
|
168
|
-
+ @connection = Net::HTTP.new(@url.host, @url.port)
|
169
|
-
+ @connection.set_debug_output $stdout if $DEBUG
|
170
|
-
if @url.scheme == 'https'
|
171
|
-
- connection.use_ssl = true
|
172
|
-
- connection.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
173
|
-
- connection.ca_file = @issuer_cert
|
174
|
-
- connection.verify_callback = method(:validate_certificate)
|
175
|
-
+ @connection.use_ssl = true
|
176
|
-
+ @connection.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
177
|
-
+ @connection.ca_file = @issuer_cert
|
178
|
-
+ @connection.verify_callback = method(:validate_certificate)
|
179
|
-
end
|
180
|
-
- connection
|
181
|
-
+ @connection
|
182
|
-
end
|
183
|
-
|
184
|
-
def validate_certificate(is_ok, ctx)
|
185
|
-
@@ -120,9 +110,9 @@
|
186
|
-
|
187
|
-
# what transport types we support, and their corresponding suffixes
|
188
|
-
@@transport_types = {
|
189
|
-
- :rest => "xml",
|
190
|
-
- :json => "json",
|
191
|
-
- :soap => "xmlsoap"
|
192
|
-
+ :rest => {:suffix => "xml", :content_type => "application/xml"},
|
193
|
-
+ :json => {:suffix => "json", :content_type => "application/json"},
|
194
|
-
+ :soap => {:suffix => "xmlsoap", :content_type => "application/xml"}
|
195
|
-
}
|
196
|
-
|
197
|
-
end
|
198
|
-
Index: CHANGELOG
|
199
|
-
===================================================================
|
200
|
-
--- CHANGELOG (revision 6047)
|
201
|
-
+++ CHANGELOG (working copy)
|
202
|
-
@@ -1,3 +1,9 @@
|
203
|
-
+== v0.5.2
|
204
|
-
+ Updated Transporter to play nicely with mod_security
|
205
|
-
+ Stripped trailing '/'s from URLs
|
206
|
-
+ Now re-use same connection
|
207
|
-
+ Updated RDoc with test login details
|
208
|
-
+
|
209
|
-
== v0.5.1
|
210
|
-
Added CHANGELOG, LICENCE & VERSION
|
211
|
-
Ensured README etc. were included in gem and displayed as default in RDoc
|
212
|
-
Index: spec/transporter_spec.rb
|
213
|
-
===================================================================
|
214
|
-
--- spec/transporter_spec.rb (revision 6047)
|
215
|
-
+++ spec/transporter_spec.rb (working copy)
|
216
|
-
@@ -14,49 +14,8 @@
|
217
|
-
|
218
|
-
lambda {
|
219
|
-
tr = ::EWS::Transaction::Transporter.new
|
220
|
-
- tr.submit(txn, json)
|
221
|
-
+ tr.submit(txn)
|
222
|
-
}.should_not raise_error(RuntimeError)
|
223
|
-
end
|
224
|
-
|
225
|
-
-
|
226
|
-
end
|
227
|
-
-
|
228
|
-
-describe "Transporter finding transactions" do
|
229
|
-
-
|
230
|
-
- before :each do
|
231
|
-
- txn = basic_new_transaction
|
232
|
-
- @tr = ::EWS::Transaction::Transporter.new
|
233
|
-
- r = @tr.submit(txn, :json)
|
234
|
-
- @transaction_tag = r.transaction_tag
|
235
|
-
- end
|
236
|
-
-
|
237
|
-
- it "should support all transport types" do
|
238
|
-
- [:json, :rest, :soap].each do |type|
|
239
|
-
- txn = basic_find_transaction(:transaction_tag => @transaction_tag)
|
240
|
-
- resp = @tr.submit(txn, type)
|
241
|
-
-
|
242
|
-
- resp.transaction_tag.should == @transaction_tag
|
243
|
-
- resp.cc_number == "4111111111111"
|
244
|
-
- resp.exact_resp_code.should == "00"
|
245
|
-
- resp.exact_message.should == "Transaction Normal"
|
246
|
-
- resp.bank_message.should == "APPROVED"
|
247
|
-
- end
|
248
|
-
- end
|
249
|
-
-
|
250
|
-
-end
|
251
|
-
-
|
252
|
-
-describe "Transporter creating and finding transactions" do
|
253
|
-
-
|
254
|
-
- it "should support all transport types" do
|
255
|
-
- [:json, :rest, :soap].each do |type|
|
256
|
-
- tr = ::EWS::Transaction::Transporter.new
|
257
|
-
- new_txn = tr.submit(basic_new_transaction, type)
|
258
|
-
- new_txn.transaction_tag.should_not be_nil
|
259
|
-
-
|
260
|
-
- found_txn = tr.submit(basic_find_transaction(:transaction_tag => new_txn.transaction_tag), :json)
|
261
|
-
- found_txn.should_not be_nil
|
262
|
-
- found_txn.transaction_tag.should == new_txn.transaction_tag
|
263
|
-
- end
|
264
|
-
- end
|
265
|
-
-
|
266
|
-
-end
|
267
|
-
|
268
|
-
Index: spec/request_spec.rb
|
269
|
-
===================================================================
|
270
|
-
--- spec/request_spec.rb (revision 6047)
|
271
|
-
+++ spec/request_spec.rb (working copy)
|
272
|
-
@@ -70,7 +70,7 @@
|
273
|
-
|
274
|
-
resp.exact_resp_code.should == "00"
|
275
|
-
resp.exact_message.should == "Transaction Normal"
|
276
|
-
- resp.bank_message.should == "APPROVED"
|
277
|
-
+ resp.bank_message.downcase.should match(/approved/)
|
278
|
-
resp.transaction_tag.should_not be_nil
|
279
|
-
end
|
280
|
-
|
281
|
-
@@ -81,7 +81,7 @@
|
282
|
-
|
283
|
-
resp.exact_resp_code.should == "00"
|
284
|
-
resp.exact_message.should == "Transaction Normal"
|
285
|
-
- resp.bank_message.should == "APPROVED"
|
286
|
-
+ resp.bank_message.downcase.should match(/approved/)
|
287
|
-
resp.transaction_tag.should_not be_nil
|
288
|
-
end
|
289
|
-
end
|
290
|
-
@@ -95,6 +95,9 @@
|
291
|
-
|
292
|
-
txn = basic_new_transaction
|
293
|
-
@transaction_tag = @transporter.submit(txn, :json).transaction_tag
|
294
|
-
+ puts "Sleeping for replication: #{REPLICATION_TIME}s"
|
295
|
-
+ sleep(REPLICATION_TIME) # need time for replication to take place on the host
|
296
|
-
+ puts "Awake"
|
297
|
-
end
|
298
|
-
|
299
|
-
it "should work without a specified transport_type" do
|
300
|
-
@@ -103,7 +106,7 @@
|
301
|
-
|
302
|
-
resp.exact_resp_code.should == "00"
|
303
|
-
resp.exact_message.should == "Transaction Normal"
|
304
|
-
- resp.bank_message.should == "APPROVED"
|
305
|
-
+ resp.bank_message.downcase.should match(/approved/)
|
306
|
-
resp.transaction_tag.should_not be_nil
|
307
|
-
end
|
308
|
-
|
309
|
-
@@ -116,7 +119,7 @@
|
310
|
-
resp.cc_number == "4111111111111"
|
311
|
-
resp.exact_resp_code.should == "00"
|
312
|
-
resp.exact_message.should == "Transaction Normal"
|
313
|
-
- resp.bank_message.should == "APPROVED"
|
314
|
-
+ resp.bank_message.downcase.should match(/approved/)
|
315
|
-
end
|
316
|
-
end
|
317
|
-
|
318
|
-
Index: spec/spec_helper.rb
|
319
|
-
===================================================================
|
320
|
-
--- spec/spec_helper.rb (revision 6048)
|
321
|
-
+++ spec/spec_helper.rb (working copy)
|
322
|
-
@@ -3,6 +3,8 @@
|
323
|
-
require 'spec'
|
324
|
-
require 'lib/exact4r'
|
325
|
-
|
326
|
-
+REPLICATION_TIME = 20
|
327
|
-
+
|
328
|
-
def basic_params(options = {})
|
329
|
-
{
|
330
|
-
:transaction_type => :purchase,
|
331
|
-
@@ -18,8 +20,7 @@
|
332
|
-
def basic_find_transaction(options = {})
|
333
|
-
params = {
|
334
|
-
:transaction_type => :transaction_details,
|
335
|
-
- :gateway_id => "AD0008-01",
|
336
|
-
- :password => "7nfcpc7n"
|
337
|
-
+ :gateway_id => "A00049-01", :password => "test1"
|
338
|
-
}.merge(options)
|
339
|
-
|
340
|
-
::EWS::Transaction::Request.new(params)
|
341
|
-
@@ -33,8 +34,7 @@
|
342
|
-
:cc_number => "4111111111111111",
|
343
|
-
:cc_expiry => "1005",
|
344
|
-
:reference_no => "987987",
|
345
|
-
- :gateway_id => "AD0008-01",
|
346
|
-
- :password => "7nfcpc7n"
|
347
|
-
+ :gateway_id => "A00049-01", :password => "test1"
|
348
|
-
}.merge(options)
|
349
|
-
|
350
|
-
::EWS::Transaction::Request.new(params)
|
351
|
-
Index: README
|
352
|
-
===================================================================
|
353
|
-
--- README (revision 6047)
|
354
|
-
+++ README (working copy)
|
355
|
-
@@ -4,6 +4,13 @@
|
356
|
-
|
357
|
-
== Getting Started
|
358
|
-
|
359
|
-
+To submit requests to our transaction processing service, you must first have a Gateway ID,
|
360
|
-
+and a password. Test logins are as follows:
|
361
|
-
+
|
362
|
-
+ Account 1: :gateway_id => "A00049-01", :password => "test1"
|
363
|
-
+ Account 2: :gateway_id => "A00427-01", :password => "testus"
|
364
|
-
+
|
365
|
-
+
|
366
|
-
=1. Submit a transaction
|
367
|
-
|
368
|
-
require 'rubygems'
|