authorizenet 1.9.4 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. checksums.yaml +5 -5
  2. data/lib/app/helpers/authorize_net_helper.rb +2 -3
  3. data/lib/authorize_net.rb +11 -56
  4. data/lib/authorize_net/api/LogHelper.rb +97 -0
  5. data/lib/authorize_net/api/SensitiveDataFilter.rb +92 -0
  6. data/lib/authorize_net/api/api_transaction.rb +95 -90
  7. data/lib/authorize_net/api/constants.yml +1 -1
  8. data/lib/authorize_net/api/schema.rb +1353 -994
  9. data/lib/authorize_net/api/transaction.rb +104 -102
  10. data/lib/authorize_net/authorize_net.rb +20 -27
  11. data/lib/authorize_net/response.rb +9 -15
  12. data/lib/authorize_net/transaction.rb +18 -26
  13. data/lib/authorize_net/xml_response.rb +36 -54
  14. data/lib/authorize_net/xml_transaction.rb +115 -134
  15. metadata +59 -73
  16. data/lib/authorize_net/addresses/address.rb +0 -29
  17. data/lib/authorize_net/addresses/shipping_address.rb +0 -26
  18. data/lib/authorize_net/aim/response.rb +0 -131
  19. data/lib/authorize_net/aim/transaction.rb +0 -190
  20. data/lib/authorize_net/arb/fields.rb +0 -24
  21. data/lib/authorize_net/arb/paging.rb +0 -33
  22. data/lib/authorize_net/arb/response.rb +0 -34
  23. data/lib/authorize_net/arb/sorting.rb +0 -43
  24. data/lib/authorize_net/arb/subscription.rb +0 -72
  25. data/lib/authorize_net/arb/subscription_detail.rb +0 -14
  26. data/lib/authorize_net/arb/subscription_list_response.rb +0 -43
  27. data/lib/authorize_net/arb/transaction.rb +0 -177
  28. data/lib/authorize_net/cim/customer_profile.rb +0 -19
  29. data/lib/authorize_net/cim/payment_profile.rb +0 -37
  30. data/lib/authorize_net/cim/response.rb +0 -116
  31. data/lib/authorize_net/cim/transaction.rb +0 -727
  32. data/lib/authorize_net/customer.rb +0 -27
  33. data/lib/authorize_net/email_receipt.rb +0 -24
  34. data/lib/authorize_net/fields.rb +0 -779
  35. data/lib/authorize_net/key_value_response.rb +0 -117
  36. data/lib/authorize_net/key_value_transaction.rb +0 -291
  37. data/lib/authorize_net/line_item.rb +0 -25
  38. data/lib/authorize_net/order.rb +0 -42
  39. data/lib/authorize_net/payment_methods/credit_card.rb +0 -62
  40. data/lib/authorize_net/payment_methods/echeck.rb +0 -72
  41. data/lib/authorize_net/reporting/batch.rb +0 -19
  42. data/lib/authorize_net/reporting/batch_statistics.rb +0 -19
  43. data/lib/authorize_net/reporting/fds_filter.rb +0 -11
  44. data/lib/authorize_net/reporting/response.rb +0 -163
  45. data/lib/authorize_net/reporting/returned_item.rb +0 -46
  46. data/lib/authorize_net/reporting/transaction.rb +0 -133
  47. data/lib/authorize_net/reporting/transaction_details.rb +0 -25
  48. data/lib/authorize_net/sim/hosted_payment_form.rb +0 -38
  49. data/lib/authorize_net/sim/hosted_receipt_page.rb +0 -37
  50. data/lib/authorize_net/sim/response.rb +0 -142
  51. data/lib/authorize_net/sim/transaction.rb +0 -138
  52. data/lib/generators/authorize_net/direct_post/direct_post_generator.rb +0 -53
  53. data/lib/generators/authorize_net/direct_post/templates/README-AuthorizeNet +0 -49
  54. data/lib/generators/authorize_net/direct_post/templates/config.yml.erb +0 -8
  55. data/lib/generators/authorize_net/direct_post/templates/config.yml.rails3.erb +0 -8
  56. data/lib/generators/authorize_net/direct_post/templates/controller.rb.erb +0 -31
  57. data/lib/generators/authorize_net/direct_post/templates/initializer.rb +0 -4
  58. data/lib/generators/authorize_net/direct_post/templates/layout.erb +0 -18
  59. data/lib/generators/authorize_net/direct_post/templates/payment.erb +0 -10
  60. data/lib/generators/authorize_net/direct_post/templates/payment.rails3.erb +0 -10
  61. data/lib/generators/authorize_net/direct_post/templates/receipt.erb +0 -1
  62. data/lib/generators/authorize_net/direct_post/templates/relay_response.erb +0 -1
  63. data/lib/generators/authorize_net/sim/sim_generator.rb +0 -47
  64. data/lib/generators/authorize_net/sim/templates/README-AuthorizeNet +0 -52
  65. data/lib/generators/authorize_net/sim/templates/config.yml.erb +0 -8
  66. data/lib/generators/authorize_net/sim/templates/config.yml.rails3.erb +0 -8
  67. data/lib/generators/authorize_net/sim/templates/controller.rb.erb +0 -21
  68. data/lib/generators/authorize_net/sim/templates/initializer.rb +0 -4
  69. data/lib/generators/authorize_net/sim/templates/layout.erb +0 -18
  70. data/lib/generators/authorize_net/sim/templates/payment.erb +0 -6
  71. data/lib/generators/authorize_net/sim/templates/payment.rails3.erb +0 -6
  72. data/lib/generators/authorize_net/sim/templates/thank_you.erb +0 -1
  73. data/lib/generators/generator_extensions.rb +0 -75
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: authorizenet
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.4
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Authorize.Net
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-17 00:00:00.000000000 Z
11
+ date: 2021-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 4.2.6
19
+ version: 5.2.4.5
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 4.2.6
26
+ version: 5.2.4.5
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: nokogiri
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -48,52 +48,94 @@ dependencies:
48
48
  name: roxml
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - '='
51
+ - - ">="
52
52
  - !ruby/object:Gem::Version
53
53
  version: 3.3.1
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - '='
58
+ - - ">="
59
59
  - !ruby/object:Gem::Version
60
60
  version: 3.3.1
61
+ - !ruby/object:Gem::Dependency
62
+ name: rexml
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: 3.2.0
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 3.2.0
75
+ - !ruby/object:Gem::Dependency
76
+ name: appraisal
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
61
89
  - !ruby/object:Gem::Dependency
62
90
  name: rake
63
91
  requirement: !ruby/object:Gem::Requirement
64
92
  requirements:
65
93
  - - "~>"
66
94
  - !ruby/object:Gem::Version
67
- version: '0.8'
95
+ version: '12.3'
68
96
  - - ">="
69
97
  - !ruby/object:Gem::Version
70
- version: 0.8.7
98
+ version: 12.3.3
71
99
  type: :development
72
100
  prerelease: false
73
101
  version_requirements: !ruby/object:Gem::Requirement
74
102
  requirements:
75
103
  - - "~>"
76
104
  - !ruby/object:Gem::Version
77
- version: '0.8'
105
+ version: '12.3'
78
106
  - - ">="
79
107
  - !ruby/object:Gem::Version
80
- version: 0.8.7
108
+ version: 12.3.3
81
109
  - !ruby/object:Gem::Dependency
82
110
  name: rspec
83
111
  requirement: !ruby/object:Gem::Requirement
84
112
  requirements:
85
113
  - - "~>"
86
114
  - !ruby/object:Gem::Version
87
- version: '2.1'
115
+ version: 3.9.0
88
116
  type: :development
89
117
  prerelease: false
90
118
  version_requirements: !ruby/object:Gem::Requirement
91
119
  requirements:
92
120
  - - "~>"
93
121
  - !ruby/object:Gem::Version
94
- version: '2.1'
122
+ version: 3.9.0
95
123
  - !ruby/object:Gem::Dependency
96
- name: appraisal
124
+ name: simplecov
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ - !ruby/object:Gem::Dependency
138
+ name: scrutinizer-ocular
97
139
  requirement: !ruby/object:Gem::Requirement
98
140
  requirements:
99
141
  - - ">="
@@ -115,74 +157,18 @@ extra_rdoc_files: []
115
157
  files:
116
158
  - lib/app/helpers/authorize_net_helper.rb
117
159
  - lib/authorize_net.rb
118
- - lib/authorize_net/addresses/address.rb
119
- - lib/authorize_net/addresses/shipping_address.rb
120
- - lib/authorize_net/aim/response.rb
121
- - lib/authorize_net/aim/transaction.rb
160
+ - lib/authorize_net/api/LogHelper.rb
161
+ - lib/authorize_net/api/SensitiveDataFilter.rb
122
162
  - lib/authorize_net/api/api_transaction.rb
123
163
  - lib/authorize_net/api/constants.yml
124
164
  - lib/authorize_net/api/schema.rb
125
165
  - lib/authorize_net/api/transaction.rb
126
- - lib/authorize_net/arb/fields.rb
127
- - lib/authorize_net/arb/paging.rb
128
- - lib/authorize_net/arb/response.rb
129
- - lib/authorize_net/arb/sorting.rb
130
- - lib/authorize_net/arb/subscription.rb
131
- - lib/authorize_net/arb/subscription_detail.rb
132
- - lib/authorize_net/arb/subscription_list_response.rb
133
- - lib/authorize_net/arb/transaction.rb
134
166
  - lib/authorize_net/authorize_net.rb
135
- - lib/authorize_net/cim/customer_profile.rb
136
- - lib/authorize_net/cim/payment_profile.rb
137
- - lib/authorize_net/cim/response.rb
138
- - lib/authorize_net/cim/transaction.rb
139
- - lib/authorize_net/customer.rb
140
- - lib/authorize_net/email_receipt.rb
141
- - lib/authorize_net/fields.rb
142
- - lib/authorize_net/key_value_response.rb
143
- - lib/authorize_net/key_value_transaction.rb
144
- - lib/authorize_net/line_item.rb
145
- - lib/authorize_net/order.rb
146
- - lib/authorize_net/payment_methods/credit_card.rb
147
- - lib/authorize_net/payment_methods/echeck.rb
148
- - lib/authorize_net/reporting/batch.rb
149
- - lib/authorize_net/reporting/batch_statistics.rb
150
- - lib/authorize_net/reporting/fds_filter.rb
151
- - lib/authorize_net/reporting/response.rb
152
- - lib/authorize_net/reporting/returned_item.rb
153
- - lib/authorize_net/reporting/transaction.rb
154
- - lib/authorize_net/reporting/transaction_details.rb
155
167
  - lib/authorize_net/response.rb
156
- - lib/authorize_net/sim/hosted_payment_form.rb
157
- - lib/authorize_net/sim/hosted_receipt_page.rb
158
- - lib/authorize_net/sim/response.rb
159
- - lib/authorize_net/sim/transaction.rb
160
168
  - lib/authorize_net/transaction.rb
161
169
  - lib/authorize_net/xml_response.rb
162
170
  - lib/authorize_net/xml_transaction.rb
163
171
  - lib/authorizenet.rb
164
- - lib/generators/authorize_net/direct_post/direct_post_generator.rb
165
- - lib/generators/authorize_net/direct_post/templates/README-AuthorizeNet
166
- - lib/generators/authorize_net/direct_post/templates/config.yml.erb
167
- - lib/generators/authorize_net/direct_post/templates/config.yml.rails3.erb
168
- - lib/generators/authorize_net/direct_post/templates/controller.rb.erb
169
- - lib/generators/authorize_net/direct_post/templates/initializer.rb
170
- - lib/generators/authorize_net/direct_post/templates/layout.erb
171
- - lib/generators/authorize_net/direct_post/templates/payment.erb
172
- - lib/generators/authorize_net/direct_post/templates/payment.rails3.erb
173
- - lib/generators/authorize_net/direct_post/templates/receipt.erb
174
- - lib/generators/authorize_net/direct_post/templates/relay_response.erb
175
- - lib/generators/authorize_net/sim/sim_generator.rb
176
- - lib/generators/authorize_net/sim/templates/README-AuthorizeNet
177
- - lib/generators/authorize_net/sim/templates/config.yml.erb
178
- - lib/generators/authorize_net/sim/templates/config.yml.rails3.erb
179
- - lib/generators/authorize_net/sim/templates/controller.rb.erb
180
- - lib/generators/authorize_net/sim/templates/initializer.rb
181
- - lib/generators/authorize_net/sim/templates/layout.erb
182
- - lib/generators/authorize_net/sim/templates/payment.erb
183
- - lib/generators/authorize_net/sim/templates/payment.rails3.erb
184
- - lib/generators/authorize_net/sim/templates/thank_you.erb
185
- - lib/generators/generator_extensions.rb
186
172
  homepage: https://github.com/AuthorizeNet/sdk-ruby
187
173
  licenses:
188
174
  - https://github.com/AuthorizeNet/sdk-ruby/blob/master/LICENSE.txt
@@ -195,7 +181,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
195
181
  requirements:
196
182
  - - ">="
197
183
  - !ruby/object:Gem::Version
198
- version: 2.2.2
184
+ version: 2.4.0
199
185
  required_rubygems_version: !ruby/object:Gem::Requirement
200
186
  requirements:
201
187
  - - ">="
@@ -203,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
203
189
  version: 1.3.6
204
190
  requirements: []
205
191
  rubyforge_project:
206
- rubygems_version: 2.5.1
192
+ rubygems_version: 2.7.6
207
193
  signing_key:
208
194
  specification_version: 4
209
195
  summary: Authorize.Net Payments SDK
@@ -1,29 +0,0 @@
1
- module AuthorizeNet
2
-
3
- # Models an address.
4
- class Address
5
-
6
- include AuthorizeNet::Model
7
-
8
- attr_accessor :first_name, :last_name, :company, :street_address, :city, :state, :zip, :country, :phone, :fax, :customer_address_id
9
-
10
- def to_hash
11
- hash = {
12
- :first_name => @first_name,
13
- :last_name => @last_name,
14
- :company => @company,
15
- :address => @street_address,
16
- :city => @city,
17
- :state => @state,
18
- :zip => @zip,
19
- :country => @country,
20
- :phone => @phone,
21
- :fax => @fax,
22
- :customer_address_id => @customer_address_id
23
- }
24
- hash.delete_if {|k, v| v.nil?}
25
- end
26
-
27
- end
28
-
29
- end
@@ -1,26 +0,0 @@
1
- module AuthorizeNet
2
-
3
- # Models a shipping address.
4
- class ShippingAddress < Address
5
-
6
- include AuthorizeNet::Model
7
-
8
- def to_hash
9
- hash = {
10
- :ship_to_first_name => @first_name,
11
- :ship_to_last_name => @last_name,
12
- :ship_to_company => @company,
13
- :ship_to_address => @street_address,
14
- :ship_to_city => @city,
15
- :ship_to_state => @state,
16
- :ship_to_zip => @zip,
17
- :ship_to_country => @country,
18
- :ship_to_phone => @phone,
19
- :ship_to_fax => @fax
20
- }
21
- hash.delete_if {|k, v| v.nil?}
22
- end
23
-
24
- end
25
-
26
- end
@@ -1,131 +0,0 @@
1
- module AuthorizeNet::AIM
2
-
3
- # The AIM response class. Handles parsing the response from the gateway.
4
- class Response < AuthorizeNet::KeyValueResponse
5
-
6
- # Our MD5 digest generator.
7
- @@digest = OpenSSL::Digest.new('md5')
8
-
9
- include AuthorizeNet::AIM::Fields
10
-
11
- # Fields to convert to/from booleans.
12
- @@boolean_fields = [:tax_exempt]
13
-
14
- # Fields to convert to/from BigDecimal.
15
- @@decimal_fields = [:amount, :tax, :freight, :duty, :requested, :balance_on_card]
16
-
17
-
18
- # Constructs a new response object from a +raw_response+ and the +transaction+ that generated
19
- # the +raw_response+. You don't typically construct this object yourself, as AuthorizeNet::AIM::Transaction
20
- # will build one for you when it makes the request to the gateway.
21
- def initialize(raw_response, transaction)
22
- @version = transaction.version
23
- raise "AuthorizeNet gem only supports AIM version 3.1" unless @version.to_s == '3.1'
24
- @raw_response = raw_response
25
- @fields = {}
26
- @transaction = transaction
27
- custom_field_names = transaction.custom_fields.keys.collect(&:to_s).sort.collect(&:to_sym)
28
- @custom_fields = {}
29
- split_on = transaction.delimiter
30
- if @raw_response.kind_of?(Net::HTTPOK) || @raw_response.kind_of?(Nokogiri::XML::Element)
31
- if @raw_response.kind_of?(Net::HTTPOK)
32
- raw_data = @raw_response.body
33
- else
34
- raw_data = @raw_response.text
35
- end
36
- unless transaction.encapsulation_character.nil?
37
- split_on = transaction.encapsulation_character + split_on + transaction.encapsulation_character
38
- raw_data = raw_data[1..raw_data.length - 2]
39
- end
40
- raw_data.split(split_on).each_with_index do |field, index|
41
- if transaction.cp_version.nil?
42
- field_desc = FIELDS
43
- else
44
- field_desc = CP_FIELDS
45
- end
46
- if index < field_desc.length
47
- @fields[field_desc[index]] = field
48
- else
49
- @custom_fields[custom_field_names[index - field_desc.length]] = field
50
- end
51
- end
52
- @fields.delete(nil)
53
- @fields.each do |k, v|
54
- if @@boolean_fields.include?(k)
55
- @fields[k] = value_to_boolean(v)
56
- elsif @@decimal_fields.include?(k)
57
- @fields[k] = value_to_decimal(v)
58
- end
59
- end
60
- end
61
- end
62
-
63
- # Returns True if the MD5 hash found in the response payload validates using
64
- # the supplied api_login and secret merchant_value (THIS IS NOT YOUR API KEY).
65
- def valid_md5?(api_login, merchant_value)
66
- if @fields[:md5_hash].nil?
67
- return false
68
- end
69
- @@digest.hexdigest("#{merchant_value}#{api_login}#{@fields[:transaction_id]}#{@transaction.fields[:amount]}").downcase == @fields[:md5_hash].downcase
70
- end
71
-
72
- # Returns the current API version that we are adhering to.
73
- def version
74
- @version
75
- end
76
-
77
- # Check to see if the response indicated success. Success is defined as a 200 OK response indicating
78
- # that the transaction was approved.
79
- def success?
80
- !connection_failure? && approved?
81
- end
82
-
83
- # Returns true if we failed to open a connection to the gateway or got back a non-200 OK HTTP response.
84
- def connection_failure?
85
- !@raw_response.kind_of?(Net::HTTPOK) && !@raw_response.kind_of?(Nokogiri::XML::Element)
86
- end
87
-
88
- # Returns the underlying Net::HTTPResponse object. This has the original response body along with
89
- # headers and such. Note that if an exception is generated while making the request (which happens
90
- # if there is no internet connection for example), you will get the exception object here instead of
91
- # a Net::HTTPResponse object.
92
- def raw
93
- @raw_response
94
- end
95
-
96
- # Returns the AuthorizeNet::Transaction instance that owns this response.
97
- def transaction
98
- @transaction
99
- end
100
-
101
- # Returns the transaction's authorization code. This should be shown to the
102
- # end user.
103
- def authorization_code
104
- @fields[:authorization_code]
105
- end
106
-
107
- # Returns the transaction's authorization id. You will need this for future void, refund
108
- # and prior authorization capture requests.
109
- def transaction_id
110
- @fields[:transaction_id]
111
- end
112
-
113
- # Returns the customer id from the response.
114
- def customer_id
115
- @fields[:customer_id]
116
- end
117
-
118
- # Returns a response code (from AVSResponseCode) indicating the result of any Address Verification
119
- # Service checks.
120
- def avs_response
121
- @fields[:avs_response]
122
- end
123
-
124
- # Returns the credit card type used in the transaction. The values returned can be found in CardType.
125
- def card_type
126
- @fields[:card_type]
127
- end
128
-
129
- end
130
-
131
- end
@@ -1,190 +0,0 @@
1
- module AuthorizeNet::AIM
2
-
3
- # The AIM transaction class. Handles building the transaction payload and
4
- # transmitting it to the gateway.
5
- class Transaction < AuthorizeNet::KeyValueTransaction
6
-
7
- # The default options for the constructor.
8
- @@option_defaults = {
9
- :transaction_type => Type::AUTHORIZE_AND_CAPTURE,
10
- :gateway => :production,
11
- :test => false,
12
- :allow_split => false,
13
- :delimiter => ',',
14
- :encapsulation_character => nil,
15
- :verify_ssl => true,
16
- :device_type => DeviceType::UNKNOWN,
17
- :market_type => MarketType::RETAIL
18
- }
19
-
20
- # Fields to convert to/from booleans.
21
- @@boolean_fields = [:tax_exempt, :test_request, :recurring_billing, :allow_partial_auth, :delim_data, :email_customer, :relay_response]
22
-
23
- # Fields to convert to/from BigDecimal.
24
- @@decimal_fields = [:amount]
25
-
26
- # Constructs an AIM transaction. You can use the new AIM transaction object
27
- # to issue a request to the payment gateway and parse the response into a new
28
- # AuthorizeNet::AIM::Response object.
29
- #
30
- # +api_login_id+:: Your API login ID, as a string.
31
- # +api_transaction_key+:: Your API transaction key, as a string.
32
- # +options+:: A hash of options. See below for values.
33
- #
34
- # Options
35
- # +transaction_type+:: The type of transaction to perform. Defaults to AuthorizeNet::Type::AUTHORIZE_AND_CAPTURE. This value is only used if run is called directly.
36
- # +gateway+:: The gateway to submit the transaction to. Can be a URL string, an AuthorizeNet::AIM::Transaction::Gateway constant, or one of the convenience symbols :sandbox, :test, :card_present_test, :card_present_live, :card_present_sandbox, :card_present_production, :production, or :live (:test is an alias for :sandbox, :card_present_test is an alias for :card_present_sandbox, :card_present_production is an alias for :card_present_live, and :live is an alias for :production).
37
- # +test+:: A boolean indicating if the transaction should be run in test mode or not (defaults to false).
38
- # +allow_split+:: A boolean indicating if split transactions should be allowed (defaults to false).
39
- # +delimiter+:: A single character (as a string) that will be used to delimit the response from the gateway. Defaults to ','.
40
- # +encapsulation_character+:: A single character (as a string) that will be used to encapsulate each field in the response from the gateway. Defaults to nil.
41
- # +verify_ssl+:: A boolean indicating if the SSL certificate of the +gateway+ should be verified. Defaults to true.
42
- # +device_type+:: A constant from DeviceType indicating the type of POS device used in a card present transaction. Defaults to DeviceType::UNKNOWN.
43
- # +market_type+:: A constant from MarketType indicating your industry. Used for card present transactions. Defaults to MarketType::RETAIL.
44
- #
45
- def initialize(api_login_id, api_transaction_key, options = {})
46
- super()
47
- options = @@option_defaults.merge(options)
48
- @api_login_id = api_login_id
49
- @api_transaction_key = api_transaction_key
50
- @test_mode = options[:test]
51
- @response ||= nil
52
- @delimiter = options[:delimiter]
53
- @type = options[:transaction_type]
54
- @cp_version = nil
55
- case options[:gateway]
56
- when :sandbox, :test
57
- @gateway = Gateway::TEST
58
- when :production, :live
59
- @gateway = Gateway::LIVE
60
- when :card_present_live, :card_present_production
61
- @gateway = Gateway::CARD_PRESENT_LIVE
62
- @cp_version = '1.0'
63
- when :card_present_test, :card_present_sandbox
64
- @gateway = Gateway::CARD_PRESENT_TEST
65
- @cp_version = '1.0'
66
- else
67
- @gateway = options[:gateway]
68
- end
69
- @allow_split_transaction = options[:allow_split]
70
- @encapsulation_character = options[:encapsulation_character]
71
- @verify_ssl = options[:verify_ssl]
72
- @market_type = options[:market_type]
73
- @device_type = options[:device_type]
74
- @solution_id = options[:solution_id]
75
- end
76
-
77
- # Checks if the transaction has been configured for test mode or not. Return TRUE if the
78
- # transaction is a test transaction, FALSE otherwise. All transactions run against the sandbox
79
- # are considered test transactions.
80
- def test?
81
- super || @gateway == Gateway::TEST
82
- end
83
-
84
- # Returns TRUE if split transactions are allowed, FALSE otherwise.
85
- def split_transaction_allowed?
86
- !!@allow_split_transaction
87
- end
88
-
89
- # Returns the current encapsulation character unless there is none, in which case Nil is returned.
90
- def encapsulation_character
91
- @encapsulation_character
92
- end
93
-
94
- # Returns the gateway to be used for this transaction.
95
- def gateway
96
- @gateway
97
- end
98
-
99
- # Checks to see if the transaction has a response (meaning it has been submitted to the gateway).
100
- # Returns TRUE if a response is present, FALSE otherwise.
101
- def has_response?
102
- !@response.nil?
103
- end
104
-
105
- # Retrieve the response object (or Nil if transaction hasn't been sent to the gateway).
106
- def response
107
- @response
108
- end
109
-
110
- # Returns the current delimiter we are using to parse the fields returned by the
111
- # gateway.
112
- def delimiter
113
- @delimiter
114
- end
115
-
116
- # Sets the delimiter used to parse the response from the gateway.
117
- def delimiter=(delimiter)
118
- @delimiter = delimiter
119
- end
120
-
121
- # Submits the transaction to the gateway for processing. Returns a response object. If the transaction
122
- # has already been run, it will return nil.
123
- def run
124
- make_request
125
- end
126
-
127
- # Returns the current card present API version that we are adhering to.
128
- def cp_version
129
- @cp_version
130
- end
131
-
132
- def solution_id
133
- @solution_id
134
- end
135
-
136
- #:enddoc:
137
- protected
138
-
139
- # An internal method that builds the POST body, submits it to the gateway, and constructs a Response object with the response.
140
- def make_request
141
- if has_response?
142
- return nil
143
- end
144
- url = URI.parse(@gateway)
145
- fields = @fields.merge(:type => @type, :delim_char => @delimiter, :delim_data => "TRUE", :login => @api_login_id, :tran_key => @api_transaction_key, :relay_response => "FALSE")
146
-
147
- if @cp_version.nil?
148
- fields.merge!(:version => @version)
149
- else
150
- fields.merge!(:cp_version => @cp_version, :market_type => @market_type, :device_type => @device_type, :response_format => "1")
151
- end
152
- fields[:test_request] = boolean_to_value(@test_mode)
153
- fields[:allow_partial_auth] = 'TRUE' if @allow_split_transaction
154
- fields[:encap_char] = @encapsulation_character unless @encapsulation_character.nil?
155
- fields[:solution_id] = @solution_id unless @solution_id.nil?
156
- fields.each do |k, v|
157
- if @@boolean_fields.include?(k)
158
- fields[k] = boolean_to_value(v)
159
- elsif @@decimal_fields.include?(k)
160
- fields[k] = decimal_to_value(v)
161
- end
162
- end
163
- data = fields.collect do |key, val|
164
- self.to_param(key, val)
165
- end
166
- custom_field_keys = @custom_fields.keys.collect(&:to_s).sort.collect(&:to_sym)
167
- for key in custom_field_keys
168
- data += [self.to_param(key, @custom_fields[key.to_sym], '')]
169
- end
170
- data.flatten!
171
- request = Net::HTTP::Post.new(url.path)
172
- request.content_type = 'application/x-www-form-urlencoded'
173
- request.body = data.join("&")
174
- connection = Net::HTTP.new(url.host, url.port)
175
- connection.use_ssl = true
176
- if @verify_ssl
177
- connection.verify_mode = OpenSSL::SSL::VERIFY_PEER
178
- else
179
- connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
180
- end
181
- begin
182
- @response = AuthorizeNet::AIM::Response.new((connection.start {|http| http.request(request)}), self)
183
- rescue
184
- @response = AuthorizeNet::AIM::Response.new($!, self)
185
- end
186
- end
187
-
188
- end
189
-
190
- end