authorizenet 1.9.4 → 1.9.5
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.
- data/lib/app/helpers/authorize_net_helper.rb +2 -3
- data/lib/authorize_net.rb +5 -5
- data/lib/authorize_net/addresses/address.rb +15 -19
- data/lib/authorize_net/addresses/shipping_address.rb +12 -16
- data/lib/authorize_net/aim/response.rb +27 -38
- data/lib/authorize_net/aim/transaction.rb +46 -65
- data/lib/authorize_net/api/api_transaction.rb +85 -90
- data/lib/authorize_net/api/constants.yml +1 -1
- data/lib/authorize_net/api/schema.rb +968 -936
- data/lib/authorize_net/api/transaction.rb +100 -102
- data/lib/authorize_net/arb/fields.rb +21 -21
- data/lib/authorize_net/arb/paging.rb +7 -11
- data/lib/authorize_net/arb/response.rb +7 -15
- data/lib/authorize_net/arb/sorting.rb +6 -10
- data/lib/authorize_net/arb/subscription.rb +27 -31
- data/lib/authorize_net/arb/subscription_detail.rb +1 -5
- data/lib/authorize_net/arb/subscription_list_response.rb +13 -20
- data/lib/authorize_net/arb/transaction.rb +50 -56
- data/lib/authorize_net/authorize_net.rb +20 -27
- data/lib/authorize_net/cim/customer_profile.rb +4 -8
- data/lib/authorize_net/cim/payment_profile.rb +10 -12
- data/lib/authorize_net/cim/response.rb +19 -24
- data/lib/authorize_net/cim/transaction.rb +168 -174
- data/lib/authorize_net/customer.rb +11 -14
- data/lib/authorize_net/email_receipt.rb +8 -12
- data/lib/authorize_net/fields.rb +483 -502
- data/lib/authorize_net/key_value_response.rb +54 -62
- data/lib/authorize_net/key_value_transaction.rb +87 -97
- data/lib/authorize_net/line_item.rb +10 -14
- data/lib/authorize_net/order.rb +21 -25
- data/lib/authorize_net/payment_methods/credit_card.rb +6 -7
- data/lib/authorize_net/payment_methods/echeck.rb +29 -31
- data/lib/authorize_net/reporting/batch.rb +4 -7
- data/lib/authorize_net/reporting/batch_statistics.rb +2 -6
- data/lib/authorize_net/reporting/fds_filter.rb +2 -5
- data/lib/authorize_net/reporting/response.rb +54 -60
- data/lib/authorize_net/reporting/returned_item.rb +11 -12
- data/lib/authorize_net/reporting/transaction.rb +27 -29
- data/lib/authorize_net/reporting/transaction_details.rb +3 -6
- data/lib/authorize_net/response.rb +6 -10
- data/lib/authorize_net/sim/hosted_payment_form.rb +16 -20
- data/lib/authorize_net/sim/hosted_receipt_page.rb +18 -23
- data/lib/authorize_net/sim/response.rb +24 -33
- data/lib/authorize_net/sim/transaction.rb +33 -43
- data/lib/authorize_net/transaction.rb +15 -21
- data/lib/authorize_net/xml_response.rb +36 -54
- data/lib/authorize_net/xml_transaction.rb +115 -134
- data/lib/generators/authorize_net/direct_post/direct_post_generator.rb +5 -6
- data/lib/generators/authorize_net/sim/sim_generator.rb +6 -7
- data/lib/generators/generator_extensions.rb +23 -25
- metadata +127 -81
- checksums.yaml +0 -7
@@ -1,12 +1,11 @@
|
|
1
1
|
module AuthorizeNet::Reporting
|
2
|
-
|
3
2
|
class ReturnedItem
|
4
3
|
include AuthorizeNet::Model
|
5
4
|
|
6
5
|
attr_accessor :id, :date_utc, :date_local, :code, :description, :returned_items
|
7
6
|
|
8
7
|
def date_utc=(time)
|
9
|
-
if time.
|
8
|
+
if time.is_a?(DateTime)
|
10
9
|
@date_utc = time
|
11
10
|
else
|
12
11
|
@date_utc = DateTime.parse(time.to_s)
|
@@ -14,7 +13,7 @@ module AuthorizeNet::Reporting
|
|
14
13
|
end
|
15
14
|
|
16
15
|
def date_local=(time)
|
17
|
-
if time.
|
16
|
+
if time.is_a?(DateTime)
|
18
17
|
@date_local = time
|
19
18
|
else
|
20
19
|
@date_local = DateTime.parse(time.to_s)
|
@@ -22,24 +21,24 @@ module AuthorizeNet::Reporting
|
|
22
21
|
end
|
23
22
|
|
24
23
|
def add_returned_item(id = nil, date_utc = nil, date_local = nil, code = nil, description = nil)
|
25
|
-
if id.
|
24
|
+
if id.is_a?(AuthorizeNet::Reporting::ReturnedItem)
|
26
25
|
returned_item = id
|
27
26
|
else
|
28
|
-
returned_item = AuthorizeNet::Reporting::ReturnedItem.new(
|
27
|
+
returned_item = AuthorizeNet::Reporting::ReturnedItem.new(return_item_id: id, return_item_date_utc: date_utc, return_item_date_local: date_local, return_item_code: code, line_item_description: description)
|
29
28
|
end
|
30
29
|
@returned_items = @returned_items.to_a << returned_item
|
31
30
|
end
|
32
31
|
|
33
32
|
def to_hash
|
34
33
|
hash = {
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
34
|
+
id: @id,
|
35
|
+
date_utc: @date_utc,
|
36
|
+
date_local: @date_local,
|
37
|
+
code: @code,
|
38
|
+
description: @description,
|
39
|
+
returned_items: handle_multivalue_hashing(@returned_items)
|
41
40
|
}
|
42
|
-
hash.delete_if { |
|
41
|
+
hash.delete_if { |_k, v| v.nil? }
|
43
42
|
hash
|
44
43
|
end
|
45
44
|
end
|
@@ -1,65 +1,64 @@
|
|
1
1
|
module AuthorizeNet::Reporting
|
2
|
-
|
3
2
|
# The Reporting API transaction class.
|
4
3
|
class Transaction < AuthorizeNet::XmlTransaction
|
5
|
-
|
6
4
|
include AuthorizeNet::Reporting::Fields
|
7
|
-
|
5
|
+
|
8
6
|
# The class to wrap our response in.
|
9
7
|
@response_class = AuthorizeNet::Reporting::Response
|
10
|
-
|
8
|
+
|
11
9
|
# Fields to convert to/from Date.
|
12
|
-
@@datetime_fields = [
|
13
|
-
|
10
|
+
@@datetime_fields = %i[first_settlement_date last_settlement_date]
|
11
|
+
|
14
12
|
# Constructs a Reporting transaction. You can use the new Reporting transaction object
|
15
13
|
# to issue a request to the payment gateway and parse the response into a new
|
16
14
|
# AuthorizeNet::Reporting::Response object.
|
17
|
-
#
|
15
|
+
#
|
18
16
|
# +api_login_id+:: Your API login ID, as a string.
|
19
17
|
# +api_transaction_key+:: Your API transaction key, as a string.
|
20
18
|
# +options+:: A hash of options. See below for values.
|
21
|
-
#
|
19
|
+
#
|
22
20
|
# Options
|
23
|
-
# +gateway+:: The gateway to submit the transaction to. Can be a URL string, an AuthorizeNet::Reporting::Transaction::Gateway constant, or one of the convenience symbols :sandbox, :test, :production, or :live (:test is an alias for :sandbox, and :live is an alias for :production).
|
21
|
+
# +gateway+:: The gateway to submit the transaction to. Can be a URL string, an AuthorizeNet::Reporting::Transaction::Gateway constant, or one of the convenience symbols :sandbox, :test, :production, or :live (:test is an alias for :sandbox, and :live is an alias for :production).
|
24
22
|
# +verify_ssl+:: A boolean indicating if the SSL certificate of the +gateway+ should be verified. Defaults to true.
|
25
23
|
# +reference_id+:: A string that can be used to identify a particular transaction with its response. Will be echo'd in the response, only if it was provided in the transaction. Defaults to nil.
|
26
24
|
#
|
27
25
|
def initialize(api_login_id, api_transaction_key, options = {})
|
26
|
+
ActiveSupport::Deprecation.warn "use AuthorizeNet::API::Transaction"
|
28
27
|
super
|
29
28
|
end
|
30
|
-
|
29
|
+
|
31
30
|
# Sets up and submits a getSettledBatchListRequest transaction. If this transaction has already been
|
32
31
|
# run, this method will return nil. Otherwise it will return an AuthorizeNet::Reporting::Response object. The
|
33
32
|
# response object will have an array of Batch objects available via its batch_list method if
|
34
33
|
# the request was successful.
|
35
|
-
#
|
34
|
+
#
|
36
35
|
#
|
37
36
|
# +from_date+:: Takes either a DateTime or a String representing a date and time. Only settled batches >= this value will be returned. Defaults to nil (which returns >= 24hrs ago). A to_date must be specified if a from_date is.
|
38
37
|
# +to_date+:: Takes either a DateTime or a String representing a date and time. Only settled batches <= this value will be returned. Defaults to nil. The maximum date range is 31 days, and a from_date must be supplied if a to_date is.
|
39
38
|
# +include_stats+:: Takes a Boolean. Determines if BatchStatistics should be returned with the Batch objects. Defaults to false.
|
40
39
|
#
|
41
40
|
# Typical usage:
|
42
|
-
#
|
41
|
+
#
|
43
42
|
# response = transaction.get_settled_batch_list(DateTime.now() - (1 * 3600 * 48), DateTime.now(), true)
|
44
43
|
# batches = response.batch_list if response.success?
|
45
44
|
#
|
46
45
|
def get_settled_batch_list(from_date = nil, to_date = nil, include_stats = false)
|
47
46
|
@type = Type::REPORT_GET_BATCH_LIST
|
48
|
-
set_fields(
|
47
|
+
set_fields(first_settlement_date: from_date, last_settlement_date: to_date, include_statistics: include_stats)
|
49
48
|
make_request
|
50
49
|
end
|
51
|
-
|
50
|
+
|
52
51
|
# Sets up and submits a getTransactionListRequest transaction. If this transaction has already been
|
53
52
|
# run, this method will return nil. Otherwise it will return an AuthorizeNet::Reporting::Response object. The
|
54
53
|
# response object will have an array of TransactionDetail objects available via its transactions method if
|
55
54
|
# the request was successful. These TransactionDetail objects will not be fully populated. Use get_transaction_details
|
56
55
|
# to get all the details.
|
57
|
-
#
|
56
|
+
#
|
58
57
|
#
|
59
58
|
# +batch_id+:: Takes either a Batch object with its id attribute populated, or a String representing the ID of the batch to retrieve the transaction list from.
|
60
59
|
#
|
61
60
|
# Typical usage:
|
62
|
-
#
|
61
|
+
#
|
63
62
|
# response = transaction.get_transaction_list('123456')
|
64
63
|
# transactions = response.transactions if response.success?
|
65
64
|
#
|
@@ -68,16 +67,16 @@ module AuthorizeNet::Reporting
|
|
68
67
|
handle_batch_id(batch_id)
|
69
68
|
make_request
|
70
69
|
end
|
71
|
-
|
70
|
+
|
72
71
|
# Sets up and submits a getUnsettledTransactionListRequest transaction. If this transaction has already been
|
73
72
|
# run, this method will return nil. Otherwise it will return an AuthorizeNet::Reporting::Response object. The
|
74
73
|
# response object will have an array of TransactionDetail objects available via its transactions method if
|
75
74
|
# the request was successful. These TransactionDetail objects will not be fully populated. Use get_transaction_details
|
76
75
|
# to get all the details.
|
77
|
-
#
|
76
|
+
#
|
78
77
|
#
|
79
78
|
# Typical usage:
|
80
|
-
#
|
79
|
+
#
|
81
80
|
# response = transaction.get_unsettled_transaction_list
|
82
81
|
# transactions = response.transactions if response.success?
|
83
82
|
#
|
@@ -91,12 +90,12 @@ module AuthorizeNet::Reporting
|
|
91
90
|
# response object will have a TransactionDetail object available via its transactions method if
|
92
91
|
# the request was successful. This TransactionDetail object will have more data than the limited version
|
93
92
|
# returned by get_transaction_list.
|
94
|
-
#
|
93
|
+
#
|
95
94
|
#
|
96
95
|
# +transaction_id+:: Takes either a TransactionDetail object with its id attribute populated, or a String representing the ID of the transaction to retrieve the details from.
|
97
96
|
#
|
98
97
|
# Typical usage:
|
99
|
-
#
|
98
|
+
#
|
100
99
|
# response = transaction.get_transaction_details('123456789')
|
101
100
|
# transactions = response.transactions if response.success?
|
102
101
|
#
|
@@ -105,29 +104,28 @@ module AuthorizeNet::Reporting
|
|
105
104
|
handle_transaction_id(transaction_id)
|
106
105
|
make_request
|
107
106
|
end
|
108
|
-
|
107
|
+
|
109
108
|
#:enddoc:
|
110
109
|
protected
|
111
|
-
|
110
|
+
|
112
111
|
# Handles batch id type massaging.
|
113
112
|
def handle_batch_id(id)
|
114
113
|
case id
|
115
114
|
when Batch
|
116
|
-
set_fields(:
|
115
|
+
set_fields(batch_id: id.id.to_s)
|
117
116
|
else
|
118
|
-
set_fields(:
|
117
|
+
set_fields(batch_id: id.to_s)
|
119
118
|
end
|
120
119
|
end
|
121
|
-
|
120
|
+
|
122
121
|
# Handles transaction id type massaging.
|
123
122
|
def handle_transaction_id(id)
|
124
123
|
case id
|
125
124
|
when TransactionDetails
|
126
|
-
set_fields(:
|
125
|
+
set_fields(transaction_id: id.id.to_s)
|
127
126
|
else
|
128
|
-
set_fields(:
|
127
|
+
set_fields(transaction_id: id.to_s)
|
129
128
|
end
|
130
129
|
end
|
131
130
|
end
|
132
|
-
|
133
131
|
end
|
@@ -1,8 +1,6 @@
|
|
1
1
|
module AuthorizeNet::Reporting
|
2
|
-
|
3
2
|
# Models the details of a transaction.
|
4
3
|
class TransactionDetails
|
5
|
-
|
6
4
|
include AuthorizeNet::Model
|
7
5
|
|
8
6
|
attr_accessor :id, :submitted_at, :status, :order, :customer, :account_type,
|
@@ -12,14 +10,13 @@ module AuthorizeNet::Reporting
|
|
12
10
|
:fds_filter_action, :fds_filters, :batch, :prepaid_balance_remaining,
|
13
11
|
:payment_method, :recurring_billing, :bill_to, :ship_to, :auth_amount,
|
14
12
|
:subscription_id, :subscription_paynum, :solution_id, :solution_name, :returns
|
15
|
-
|
13
|
+
|
16
14
|
def submitted_at=(time)
|
17
|
-
if time.
|
15
|
+
if time.is_a?(DateTime)
|
18
16
|
@submitted_at = time
|
19
17
|
else
|
20
18
|
@submitted_at = DateTime.parse(time.to_s)
|
21
19
|
end
|
22
20
|
end
|
23
|
-
|
24
21
|
end
|
25
|
-
end
|
22
|
+
end
|
@@ -1,29 +1,25 @@
|
|
1
1
|
module AuthorizeNet
|
2
|
-
|
3
2
|
# The core, API agnostic response class. You shouldn't instantiate
|
4
3
|
# this one. Instead you should use AuthorizeNet::AIM::Response,
|
5
4
|
# AuthorizeNet::ARB::Response or AuthorizeNet::SIM::Response.
|
6
5
|
class Response
|
7
|
-
|
8
6
|
include AuthorizeNet::TypeConversions
|
9
|
-
|
7
|
+
|
10
8
|
# Fields to convert to/from booleans.
|
11
9
|
@@boolean_fields = []
|
12
10
|
|
13
11
|
# Fields to convert to/from BigDecimal.
|
14
12
|
@@decimal_fields = []
|
15
|
-
|
13
|
+
|
16
14
|
# DO NOT USE. Instantiate AuthorizeNet::AIM::Response or
|
17
15
|
# AuthorizeNet::SIM::Response instead.
|
18
|
-
def initialize
|
19
|
-
raise "#{self.class
|
16
|
+
def initialize
|
17
|
+
raise "#{self.class} should not be instantiated directly."
|
20
18
|
end
|
21
|
-
|
19
|
+
|
22
20
|
# Check to see if the response indicated success.
|
23
21
|
def success?
|
24
22
|
false
|
25
23
|
end
|
26
|
-
|
27
24
|
end
|
28
|
-
|
29
|
-
end
|
25
|
+
end
|
@@ -1,38 +1,34 @@
|
|
1
1
|
module AuthorizeNet::SIM
|
2
|
-
|
3
2
|
# Models a hosted payment form.
|
4
3
|
class HostedPaymentForm
|
5
|
-
|
6
4
|
include AuthorizeNet::Model
|
7
|
-
|
5
|
+
|
8
6
|
attr_accessor :header_html, :footer_html, :color_background, :color_link, :color_text, :logo_url, :background_url, :rename
|
9
|
-
|
7
|
+
|
10
8
|
# Convenience method for adding field rename requests to the transaction. This renames a field shown on
|
11
9
|
# the hosted payment form.
|
12
10
|
def add_rename(field, name)
|
13
11
|
rename = "#{field},#{name}"
|
14
|
-
|
15
|
-
@rename = @rename.to_a << rename
|
16
|
-
else
|
12
|
+
if @rename.nil?
|
17
13
|
@rename = [rename]
|
14
|
+
else
|
15
|
+
@rename = @rename.to_a << rename
|
18
16
|
end
|
19
17
|
end
|
20
|
-
|
18
|
+
|
21
19
|
def to_hash
|
22
20
|
hash = {
|
23
|
-
:
|
24
|
-
:
|
25
|
-
:
|
26
|
-
:
|
27
|
-
:
|
28
|
-
:
|
29
|
-
:
|
30
|
-
:
|
21
|
+
header_html_payment_form: @header_html,
|
22
|
+
footer_html_payment_form: @footer_html,
|
23
|
+
color_background: @color_background,
|
24
|
+
color_link: @color_link,
|
25
|
+
color_text: @color_text,
|
26
|
+
logo_url: @logo_url,
|
27
|
+
background_url: @background_url,
|
28
|
+
rename: @rename
|
31
29
|
}
|
32
|
-
hash.delete_if {|
|
30
|
+
hash.delete_if { |_k, v| v.nil? }
|
33
31
|
hash
|
34
32
|
end
|
35
|
-
|
36
33
|
end
|
37
|
-
|
38
|
-
end
|
34
|
+
end
|
@@ -1,37 +1,32 @@
|
|
1
1
|
module AuthorizeNet::SIM
|
2
|
-
|
3
2
|
# Models a hosted receipt page.
|
4
3
|
class HostedReceiptPage
|
5
|
-
|
6
4
|
# Defines constants for each of the link methods used by the hosted receipt page.
|
7
5
|
module LinkMethod
|
8
|
-
LINK = 'LINK'
|
9
|
-
POST = 'POST'
|
10
|
-
GET = 'GET'
|
6
|
+
LINK = 'LINK'.freeze
|
7
|
+
POST = 'POST'.freeze
|
8
|
+
GET = 'GET'.freeze
|
11
9
|
end
|
12
|
-
|
10
|
+
|
13
11
|
include AuthorizeNet::Model
|
14
|
-
|
12
|
+
|
15
13
|
attr_accessor :header_html, :footer_html, :color_background, :color_link, :color_text, :logo_url, :background_url, :link_method, :link_text, :link_url
|
16
|
-
|
17
|
-
|
14
|
+
|
18
15
|
def to_hash
|
19
16
|
hash = {
|
20
|
-
:
|
21
|
-
:
|
22
|
-
:
|
23
|
-
:
|
24
|
-
:
|
25
|
-
:
|
26
|
-
:
|
27
|
-
:
|
28
|
-
:
|
29
|
-
:
|
17
|
+
header_html_receipt: @header_html,
|
18
|
+
footer_html_receipt: @footer_html,
|
19
|
+
color_background: @color_background,
|
20
|
+
color_link: @color_link,
|
21
|
+
color_text: @color_text,
|
22
|
+
logo_url: @logo_url,
|
23
|
+
background_url: @background_url,
|
24
|
+
receipt_link_method: @link_method,
|
25
|
+
receipt_link_text: @link_text,
|
26
|
+
receipt_link_url: @link_url
|
30
27
|
}
|
31
|
-
hash.delete_if {|
|
28
|
+
hash.delete_if { |_k, v| v.nil? }
|
32
29
|
hash
|
33
30
|
end
|
34
|
-
|
35
31
|
end
|
36
|
-
|
37
|
-
end
|
32
|
+
end
|
@@ -1,20 +1,18 @@
|
|
1
1
|
module AuthorizeNet::SIM
|
2
|
-
|
3
2
|
# The SIM response class. Handles parsing the response from the gateway. Also
|
4
3
|
# provides a few relay response helpers used to implement Direct Post Method.
|
5
4
|
class Response < AuthorizeNet::KeyValueResponse
|
6
|
-
|
7
5
|
# Our MD5 digest generator.
|
8
6
|
@@digest = OpenSSL::Digest.new('md5')
|
9
7
|
|
10
8
|
include AuthorizeNet::SIM::Fields
|
11
|
-
|
9
|
+
|
12
10
|
# Constructs a new response object from a +raw_response+. Provides utility methods
|
13
11
|
# for validating the response as authentic, and for handling the Direct Post Method
|
14
12
|
# relay response.
|
15
|
-
#
|
13
|
+
#
|
16
14
|
# +raw_response+:: The raw response, either a string in POST body or GET query string format, or a hash of key/value pairs.
|
17
|
-
#
|
15
|
+
#
|
18
16
|
# Typical usage:
|
19
17
|
# response = AuthorizeNet::SIM::Response("x_first_name=John&x_last_name=Doe")
|
20
18
|
def initialize(raw_response)
|
@@ -23,30 +21,27 @@ module AuthorizeNet::SIM
|
|
23
21
|
@fields = {}
|
24
22
|
parse_response(@raw_response)
|
25
23
|
end
|
26
|
-
|
27
|
-
|
24
|
+
|
28
25
|
# Returns True if the MD5 hash found in the response payload validates using
|
29
26
|
# the supplied api_login and secret merchant_value (THIS IS NOT YOUR API KEY).
|
30
27
|
def valid_md5?(api_login, merchant_value)
|
31
|
-
if @fields[:MD5_Hash].nil?
|
32
|
-
|
33
|
-
end
|
34
|
-
@@digest.hexdigest("#{merchant_value}#{api_login}#{@fields[:trans_id]}#{@fields[:amount]}").downcase == @fields[:MD5_Hash].downcase
|
28
|
+
return false if @fields[:MD5_Hash].nil?
|
29
|
+
@@digest.hexdigest("#{merchant_value}#{api_login}#{@fields[:trans_id]}#{@fields[:amount]}").casecmp(@fields[:MD5_Hash]).zero?
|
35
30
|
end
|
36
|
-
|
31
|
+
|
37
32
|
# Returns an HTML string that can be returned to the gateway during the Relay Response,
|
38
33
|
# and will send the user on to URL you specify. Takes a hash of options, currently the
|
39
34
|
# only option is :include, which can be True to include all fields returned in the response
|
40
35
|
# as query string parameters, or it can be an array of fields to include.
|
41
36
|
def direct_post_reply(url, options = {})
|
42
|
-
url = direct_post_url(url, options[:include]) if options.
|
43
|
-
js_url = url.
|
44
|
-
html_url = url.gsub('&', '&').
|
37
|
+
url = direct_post_url(url, options[:include]) if options.key?(:include)
|
38
|
+
js_url = url.tr("'", '\'')
|
39
|
+
html_url = url.gsub('&', '&').tr('"', "\"")
|
45
40
|
html = <<-HTML
|
46
41
|
<html><head><script type="text/javascript" charset="utf-8">window.location='#{js_url}';</script><noscript><meta http-equiv="refresh" content="1;url=#{html_url}"></noscript></head><body></body></html>
|
47
42
|
HTML
|
48
43
|
end
|
49
|
-
|
44
|
+
|
50
45
|
# Returns an URL with the fields found in the response and specified in include_fields attached as
|
51
46
|
# part of the URL's query string. If you pass true instead of an array of fields, all fields will be
|
52
47
|
# attached.
|
@@ -68,48 +63,48 @@ HTML
|
|
68
63
|
parsed_url = URI.parse(url)
|
69
64
|
if parsed_url.query.nil?
|
70
65
|
parsed_url.query = ''
|
71
|
-
elsif parsed_url.query.
|
66
|
+
elsif !parsed_url.query.empty?
|
72
67
|
parsed_url.query = parsed_url.query.chomp('&') + '&'
|
73
68
|
end
|
74
|
-
parsed_url.query += ((fields.select { |k| @fields.
|
69
|
+
parsed_url.query += ((fields.select { |k| @fields.key?(k) }).collect { |k| to_param(k, @fields[k]) }).join('&')
|
75
70
|
parsed_url.query.chomp('&')
|
76
71
|
url = parsed_url.to_s
|
77
72
|
end
|
78
73
|
url
|
79
74
|
end
|
80
|
-
|
75
|
+
|
81
76
|
# Check to see if the response indicated success. Success is defined as a valid MD5 hash
|
82
77
|
# and an response code of AuthorizeNet::Response::ResponseCode::APPROVED.
|
83
78
|
def success?(api_login, merchant_value)
|
84
79
|
valid_md5?(api_login, merchant_value) && approved?
|
85
80
|
end
|
86
|
-
|
81
|
+
|
87
82
|
# Returns the transaction's authorization code. This should be shown to the
|
88
83
|
# end user.
|
89
84
|
def authorization_code
|
90
85
|
@fields[:auth_code]
|
91
86
|
end
|
92
|
-
|
87
|
+
|
93
88
|
# Returns the transaction's authorization id. You will need this for future void, refund
|
94
89
|
# and prior authorization capture requests.
|
95
90
|
def transaction_id
|
96
91
|
@fields[:trans_id]
|
97
92
|
end
|
98
|
-
|
93
|
+
|
99
94
|
# Returns the customer id from the response.
|
100
95
|
def customer_id
|
101
96
|
@fields[:cust_id]
|
102
97
|
end
|
103
|
-
|
98
|
+
|
104
99
|
# Returns a response code (from AVSResponseCode) indicating the result of any Address Verification
|
105
|
-
# Service checks.
|
100
|
+
# Service checks.
|
106
101
|
def avs_response
|
107
102
|
@fields[:avs_code]
|
108
103
|
end
|
109
|
-
|
104
|
+
|
110
105
|
#:enddoc:
|
111
106
|
protected
|
112
|
-
|
107
|
+
|
113
108
|
# Internal helper to parse the raw response object. It handles both raw POST bodies and
|
114
109
|
# hashes.
|
115
110
|
def parse_response(raw_response)
|
@@ -125,18 +120,14 @@ HTML
|
|
125
120
|
end
|
126
121
|
when String
|
127
122
|
# convert to hash and re-parse
|
128
|
-
hash = CGI
|
123
|
+
hash = CGI.parse(raw_response)
|
129
124
|
hash.each do |k, v|
|
130
|
-
if v.
|
131
|
-
hash[k] = v[0]
|
132
|
-
end
|
125
|
+
hash[k] = v[0] if v.is_a?(Array) && v.length == 1
|
133
126
|
end
|
134
127
|
parse_response(hash)
|
135
128
|
else
|
136
129
|
parse_response(@raw_response.to_s)
|
137
130
|
end
|
138
131
|
end
|
139
|
-
|
140
132
|
end
|
141
|
-
|
142
|
-
end
|
133
|
+
end
|