Class: AuthorizeNet::AIM::Response
- Inherits:
-
KeyValueResponse
- Object
- Response
- KeyValueResponse
- AuthorizeNet::AIM::Response
- Includes:
- Fields
- Defined in:
- lib/authorize_net/aim/response.rb
Overview
The AIM response class. Handles parsing the response from the gateway.
Constant Summary collapse
- @@digest =
Our MD5 digest generator.
OpenSSL::Digest::Digest.new('md5')
- @@boolean_fields =
Fields to convert to/from booleans.
[:tax_exempt]
- @@decimal_fields =
Fields to convert to/from BigDecimal.
[:amount, :tax, :freight, :duty, :requested, :balance_on_card]
Constants included from Fields
Fields::CP_FIELDS, Fields::FIELDS
Constants included from TypeConversions
TypeConversions::API_FIELD_PREFIX
Instance Method Summary collapse
-
#authorization_code ⇒ Object
Returns the transaction’s authorization code.
-
#avs_response ⇒ Object
Returns a response code (from AVSResponseCode) indicating the result of any Address Verification Service checks.
-
#card_type ⇒ Object
Returns the credit card type used in the transaction.
-
#connection_failure? ⇒ Boolean
Returns true if we failed to open a connection to the gateway or got back a non-200 OK HTTP response.
-
#customer_id ⇒ Object
Returns the customer id from the response.
-
#initialize(raw_response, transaction) ⇒ Response
constructor
Constructs a new response object from a
raw_response
and thetransaction
that generated theraw_response
. -
#raw ⇒ Object
Returns the underlying Net::HTTPResponse object.
-
#success? ⇒ Boolean
Check to see if the response indicated success.
-
#transaction ⇒ Object
Returns the AuthorizeNet::Transaction instance that owns this response.
-
#transaction_id ⇒ Object
Returns the transaction’s authorization id.
-
#valid_md5?(api_login, merchant_value) ⇒ Boolean
Returns True if the MD5 hash found in the response payload validates using the supplied api_login and secret merchant_value (THIS IS NOT YOUR API KEY).
-
#version ⇒ Object
Returns the current API version that we are adhering to.
Methods inherited from KeyValueResponse
#approved?, #custom_fields, #declined?, #error?, #fields, #held?, #response_code, #response_reason_code, #response_reason_text
Methods included from TypeConversions
#boolean_to_value, #date_to_value, #datetime_to_value, #decimal_to_value, #integer_to_value, #to_external_field, #to_internal_field, #to_param, #value_to_boolean, #value_to_date, #value_to_datetime, #value_to_decimal, #value_to_integer
Constructor Details
#initialize(raw_response, transaction) ⇒ Response
Constructs a new response object from a raw_response
and the transaction
that generated the raw_response
. You don’t typically construct this object yourself, as AuthorizeNet::AIM::Transaction will build one for you when it makes the request to the gateway.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/authorize_net/aim/response.rb', line 21 def initialize(raw_response, transaction) @version = transaction.version raise "AuthorizeNet gem only supports AIM version 3.1" unless @version.to_s == '3.1' @raw_response = raw_response @fields = {} @transaction = transaction custom_field_names = transaction.custom_fields.keys.collect(&:to_s).sort.collect(&:to_sym) @custom_fields = {} split_on = transaction.delimiter if @raw_response.kind_of?(Net::HTTPOK) || @raw_response.kind_of?(Nokogiri::XML::Element) if @raw_response.kind_of?(Net::HTTPOK) raw_data = @raw_response.body else raw_data = @raw_response.text end unless transaction.encapsulation_character.nil? split_on = transaction.encapsulation_character + split_on + transaction.encapsulation_character raw_data = raw_data[1..raw_data.length - 2] end raw_data.split(split_on).each_with_index do |field, index| if transaction.cp_version.nil? field_desc = FIELDS else field_desc = CP_FIELDS end if index < field_desc.length @fields[field_desc[index]] = field else @custom_fields[custom_field_names[index - field_desc.length]] = field end end @fields.delete(nil) @fields.each do |k, v| if @@boolean_fields.include?(k) @fields[k] = value_to_boolean(v) elsif @@decimal_fields.include?(k) @fields[k] = value_to_decimal(v) end end end end |
Instance Method Details
#authorization_code ⇒ Object
Returns the transaction’s authorization code. This should be shown to the end user.
103 104 105 |
# File 'lib/authorize_net/aim/response.rb', line 103 def @fields[:authorization_code] end |
#avs_response ⇒ Object
Returns a response code (from AVSResponseCode) indicating the result of any Address Verification Service checks.
120 121 122 |
# File 'lib/authorize_net/aim/response.rb', line 120 def avs_response @fields[:avs_response] end |
#card_type ⇒ Object
Returns the credit card type used in the transaction. The values returned can be found in CardType.
125 126 127 |
# File 'lib/authorize_net/aim/response.rb', line 125 def card_type @fields[:card_type] end |
#connection_failure? ⇒ Boolean
Returns true if we failed to open a connection to the gateway or got back a non-200 OK HTTP response.
84 85 86 |
# File 'lib/authorize_net/aim/response.rb', line 84 def connection_failure? !@raw_response.kind_of?(Net::HTTPOK) && !@raw_response.kind_of?(Nokogiri::XML::Element) end |
#customer_id ⇒ Object
Returns the customer id from the response.
114 115 116 |
# File 'lib/authorize_net/aim/response.rb', line 114 def customer_id @fields[:customer_id] end |
#raw ⇒ Object
Returns the underlying Net::HTTPResponse object. This has the original response body along with headers and such. Note that if an exception is generated while making the request (which happens if there is no internet connection for example), you will get the exception object here instead of a Net::HTTPResponse object.
92 93 94 |
# File 'lib/authorize_net/aim/response.rb', line 92 def raw @raw_response end |
#success? ⇒ Boolean
Check to see if the response indicated success. Success is defined as a 200 OK response indicating that the transaction was approved.
79 80 81 |
# File 'lib/authorize_net/aim/response.rb', line 79 def success? !connection_failure? && approved? end |
#transaction ⇒ Object
Returns the AuthorizeNet::Transaction instance that owns this response.
97 98 99 |
# File 'lib/authorize_net/aim/response.rb', line 97 def transaction @transaction end |
#transaction_id ⇒ Object
Returns the transaction’s authorization id. You will need this for future void, refund and prior authorization capture requests.
109 110 111 |
# File 'lib/authorize_net/aim/response.rb', line 109 def transaction_id @fields[:transaction_id] end |
#valid_md5?(api_login, merchant_value) ⇒ Boolean
Returns True if the MD5 hash found in the response payload validates using the supplied api_login and secret merchant_value (THIS IS NOT YOUR API KEY).
65 66 67 68 69 70 |
# File 'lib/authorize_net/aim/response.rb', line 65 def valid_md5?(api_login, merchant_value) if @fields[:md5_hash].nil? return false end @@digest.hexdigest("#{merchant_value}#{api_login}#{@fields[:transaction_id]}#{@transaction.fields[:amount]}").downcase == @fields[:md5_hash].downcase end |
#version ⇒ Object
Returns the current API version that we are adhering to.
73 74 75 |
# File 'lib/authorize_net/aim/response.rb', line 73 def version @version end |