authorizenet 1.8.0
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.
- checksums.yaml +7 -0
- data/lib/app/helpers/authorize_net_helper.rb +24 -0
- data/lib/authorize_net.rb +92 -0
- data/lib/authorize_net/addresses/address.rb +29 -0
- data/lib/authorize_net/addresses/shipping_address.rb +26 -0
- data/lib/authorize_net/aim/response.rb +131 -0
- data/lib/authorize_net/aim/transaction.rb +184 -0
- data/lib/authorize_net/arb/response.rb +34 -0
- data/lib/authorize_net/arb/subscription.rb +72 -0
- data/lib/authorize_net/arb/transaction.rb +146 -0
- data/lib/authorize_net/authorize_net.rb +154 -0
- data/lib/authorize_net/cim/customer_profile.rb +19 -0
- data/lib/authorize_net/cim/payment_profile.rb +37 -0
- data/lib/authorize_net/cim/response.rb +110 -0
- data/lib/authorize_net/cim/transaction.rb +678 -0
- data/lib/authorize_net/customer.rb +27 -0
- data/lib/authorize_net/email_receipt.rb +24 -0
- data/lib/authorize_net/fields.rb +736 -0
- data/lib/authorize_net/key_value_response.rb +117 -0
- data/lib/authorize_net/key_value_transaction.rb +291 -0
- data/lib/authorize_net/line_item.rb +25 -0
- data/lib/authorize_net/order.rb +42 -0
- data/lib/authorize_net/payment_methods/credit_card.rb +74 -0
- data/lib/authorize_net/payment_methods/echeck.rb +72 -0
- data/lib/authorize_net/reporting/batch.rb +19 -0
- data/lib/authorize_net/reporting/batch_statistics.rb +19 -0
- data/lib/authorize_net/reporting/fds_filter.rb +11 -0
- data/lib/authorize_net/reporting/response.rb +127 -0
- data/lib/authorize_net/reporting/transaction.rb +116 -0
- data/lib/authorize_net/reporting/transaction_details.rb +25 -0
- data/lib/authorize_net/response.rb +27 -0
- data/lib/authorize_net/sim/hosted_payment_form.rb +38 -0
- data/lib/authorize_net/sim/hosted_receipt_page.rb +37 -0
- data/lib/authorize_net/sim/response.rb +142 -0
- data/lib/authorize_net/sim/transaction.rb +138 -0
- data/lib/authorize_net/transaction.rb +66 -0
- data/lib/authorize_net/xml_response.rb +172 -0
- data/lib/authorize_net/xml_transaction.rb +275 -0
- data/lib/authorizenet.rb +4 -0
- data/lib/generators/authorize_net/direct_post_generator.rb +51 -0
- data/lib/generators/authorize_net/sim_generator.rb +47 -0
- metadata +104 -0
@@ -0,0 +1,27 @@
|
|
1
|
+
module AuthorizeNet
|
2
|
+
|
3
|
+
# The core, API agnostic response class. You shouldn't instantiate this one.
|
4
|
+
# Instead you should use AuthorizeNet::AIM::Response, AuthorizeNet::ARB::Response or AuthorizeNet::SIM::Response.
|
5
|
+
class Response
|
6
|
+
|
7
|
+
include AuthorizeNet::TypeConversions
|
8
|
+
|
9
|
+
# Fields to convert to/from booleans.
|
10
|
+
@@boolean_fields = []
|
11
|
+
|
12
|
+
# Fields to convert to/from BigDecimal.
|
13
|
+
@@decimal_fields = []
|
14
|
+
|
15
|
+
# DO NOT USE. Instantiate AuthorizeNet::AIM::Response or AuthorizeNet::SIM::Response instead.
|
16
|
+
def initialize()
|
17
|
+
raise "#{self.class.to_s} should not be instantiated directly."
|
18
|
+
end
|
19
|
+
|
20
|
+
# Check to see if the response indicated success.
|
21
|
+
def success?
|
22
|
+
false
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module AuthorizeNet::SIM
|
2
|
+
|
3
|
+
# Models a hosted payment form.
|
4
|
+
class HostedPaymentForm
|
5
|
+
|
6
|
+
include AuthorizeNet::Model
|
7
|
+
|
8
|
+
attr_accessor :header_html, :footer_html, :color_background, :color_link, :color_text, :logo_url, :background_url, :rename
|
9
|
+
|
10
|
+
# Convenience method for adding field rename requests to the transaction. This renames a field shown on
|
11
|
+
# the hosted payment form.
|
12
|
+
def add_rename(field, name)
|
13
|
+
rename = "#{field},#{name}"
|
14
|
+
unless @rename.nil?
|
15
|
+
@rename = @rename.to_a << rename
|
16
|
+
else
|
17
|
+
@rename = [rename]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_hash
|
22
|
+
hash = {
|
23
|
+
:header_html_payment_form => @header_html,
|
24
|
+
:footer_html_payment_form => @footer_html,
|
25
|
+
:color_background => @color_background,
|
26
|
+
:color_link => @color_link,
|
27
|
+
:color_text => @color_text,
|
28
|
+
:logo_url => @logo_url,
|
29
|
+
:background_url => @background_url,
|
30
|
+
:rename => @rename
|
31
|
+
}
|
32
|
+
hash.delete_if {|k, v| v.nil?}
|
33
|
+
hash
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module AuthorizeNet::SIM
|
2
|
+
|
3
|
+
# Models a hosted receipt page.
|
4
|
+
class HostedReceiptPage
|
5
|
+
|
6
|
+
# Defines constants for each of the link methods used by the hosted receipt page.
|
7
|
+
module LinkMethod
|
8
|
+
LINK = 'LINK'
|
9
|
+
POST = 'POST'
|
10
|
+
GET = 'GET'
|
11
|
+
end
|
12
|
+
|
13
|
+
include AuthorizeNet::Model
|
14
|
+
|
15
|
+
attr_accessor :header_html, :footer_html, :color_background, :color_link, :color_text, :logo_url, :background_url, :link_method, :link_text, :link_url
|
16
|
+
|
17
|
+
|
18
|
+
def to_hash
|
19
|
+
hash = {
|
20
|
+
:header_html_receipt => @header_html,
|
21
|
+
:footer_html_receipt => @footer_html,
|
22
|
+
:color_background => @color_background,
|
23
|
+
:color_link => @color_link,
|
24
|
+
:color_text => @color_text,
|
25
|
+
:logo_url => @logo_url,
|
26
|
+
:background_url => @background_url,
|
27
|
+
:receipt_link_method => @link_method,
|
28
|
+
:receipt_link_text => @link_text,
|
29
|
+
:receipt_link_url => @link_url
|
30
|
+
}
|
31
|
+
hash.delete_if {|k, v| v.nil?}
|
32
|
+
hash
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
module AuthorizeNet::SIM
|
2
|
+
|
3
|
+
# The SIM response class. Handles parsing the response from the gateway. Also
|
4
|
+
# provides a few relay response helpers used to implement Direct Post Method.
|
5
|
+
class Response < AuthorizeNet::KeyValueResponse
|
6
|
+
|
7
|
+
# Our MD5 digest generator.
|
8
|
+
@@digest = OpenSSL::Digest::Digest.new('md5')
|
9
|
+
|
10
|
+
include AuthorizeNet::SIM::Fields
|
11
|
+
|
12
|
+
# Constructs a new response object from a +raw_response+. Provides utility methods
|
13
|
+
# for validating the response as authentic, and for handling the Direct Post Method
|
14
|
+
# relay response.
|
15
|
+
#
|
16
|
+
# +raw_response+:: The raw response, either a string in POST body or GET query string format, or a hash of key/value pairs.
|
17
|
+
#
|
18
|
+
# Typical usage:
|
19
|
+
# response = AuthorizeNet::SIM::Response("x_first_name=John&x_last_name=Doe")
|
20
|
+
def initialize(raw_response)
|
21
|
+
@raw_response = raw_response
|
22
|
+
@custom_fields = {}
|
23
|
+
@fields = {}
|
24
|
+
parse_response(@raw_response)
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
# Returns True if the MD5 hash found in the response payload validates using
|
29
|
+
# the supplied api_login and secret merchant_value (THIS IS NOT YOUR API KEY).
|
30
|
+
def valid_md5?(api_login, merchant_value)
|
31
|
+
if @fields[:MD5_Hash].nil?
|
32
|
+
return false
|
33
|
+
end
|
34
|
+
@@digest.hexdigest("#{merchant_value}#{api_login}#{@fields[:trans_id]}#{@fields[:amount]}").downcase == @fields[:MD5_Hash].downcase
|
35
|
+
end
|
36
|
+
|
37
|
+
# Returns an HTML string that can be returned to the gateway during the Relay Response,
|
38
|
+
# and will send the user on to URL you specify. Takes a hash of options, currently the
|
39
|
+
# only option is :include, which can be True to include all fields returned in the response
|
40
|
+
# as query string parameters, or it can be an array of fields to include.
|
41
|
+
def direct_post_reply(url, options = {})
|
42
|
+
url = direct_post_url(url, options[:include]) if options.has_key?(:include)
|
43
|
+
js_url = url.gsub("'", '\'')
|
44
|
+
html_url = url.gsub('&', '&').gsub('"', "\"")
|
45
|
+
html = <<-HTML
|
46
|
+
<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
|
+
HTML
|
48
|
+
end
|
49
|
+
|
50
|
+
# Returns an URL with the fields found in the response and specified in include_fields attached as
|
51
|
+
# part of the URL's query string. If you pass true instead of an array of fields, all fields will be
|
52
|
+
# attached.
|
53
|
+
def direct_post_url(base_url, include_fields = true)
|
54
|
+
url = base_url
|
55
|
+
if include_fields
|
56
|
+
fields = []
|
57
|
+
case include_fields
|
58
|
+
when TrueClass
|
59
|
+
fields = FIELDS.collect do |k|
|
60
|
+
k_str = k.to_s
|
61
|
+
k_str[2..k_str.length].to_sym
|
62
|
+
end
|
63
|
+
when Array
|
64
|
+
fields = include_fields
|
65
|
+
else
|
66
|
+
fields = include_fields.to_a
|
67
|
+
end
|
68
|
+
parsed_url = URI.parse(url)
|
69
|
+
if parsed_url.query.nil?
|
70
|
+
parsed_url.query = ''
|
71
|
+
elsif parsed_url.query.length != 0
|
72
|
+
parsed_url.query = parsed_url.query.chomp('&') + '&'
|
73
|
+
end
|
74
|
+
parsed_url.query += ((fields.select { |k| @fields.has_key?(k) }).collect { |k| self.to_param(k, @fields[k]) }).join('&')
|
75
|
+
parsed_url.query.chomp('&')
|
76
|
+
url = parsed_url.to_s
|
77
|
+
end
|
78
|
+
url
|
79
|
+
end
|
80
|
+
|
81
|
+
# Check to see if the response indicated success. Success is defined as a valid MD5 hash
|
82
|
+
# and an response code of AuthorizeNet::Response::ResponseCode::APPROVED.
|
83
|
+
def success?(api_login, merchant_value)
|
84
|
+
valid_md5?(api_login, merchant_value) && approved?
|
85
|
+
end
|
86
|
+
|
87
|
+
# Returns the transaction's authorization code. This should be shown to the
|
88
|
+
# end user.
|
89
|
+
def authorization_code
|
90
|
+
@fields[:auth_code]
|
91
|
+
end
|
92
|
+
|
93
|
+
# Returns the transaction's authorization id. You will need this for future void, refund
|
94
|
+
# and prior authorization capture requests.
|
95
|
+
def transaction_id
|
96
|
+
@fields[:trans_id]
|
97
|
+
end
|
98
|
+
|
99
|
+
# Returns the customer id from the response.
|
100
|
+
def customer_id
|
101
|
+
@fields[:cust_id]
|
102
|
+
end
|
103
|
+
|
104
|
+
# Returns a response code (from AVSResponseCode) indicating the result of any Address Verification
|
105
|
+
# Service checks.
|
106
|
+
def avs_response
|
107
|
+
@fields[:avs_code]
|
108
|
+
end
|
109
|
+
|
110
|
+
#:enddoc:
|
111
|
+
protected
|
112
|
+
|
113
|
+
# Internal helper to parse the raw response object. It handles both raw POST bodies and
|
114
|
+
# hashes.
|
115
|
+
def parse_response(raw_response)
|
116
|
+
case raw_response
|
117
|
+
when Hash
|
118
|
+
raw_response.each do |k, v|
|
119
|
+
k = k.to_sym
|
120
|
+
if FIELDS.include?(k)
|
121
|
+
@fields[to_internal_field(k)] = v # remove x_ from sym and stick in @fields
|
122
|
+
else
|
123
|
+
@custom_fields[k] = v
|
124
|
+
end
|
125
|
+
end
|
126
|
+
when String
|
127
|
+
# convert to hash and re-parse
|
128
|
+
hash = CGI::parse(raw_response)
|
129
|
+
hash.each do |k, v|
|
130
|
+
if v.kind_of?(Array) && v.length == 1
|
131
|
+
hash[k] = v[0]
|
132
|
+
end
|
133
|
+
end
|
134
|
+
parse_response(hash)
|
135
|
+
else
|
136
|
+
parse_response(@raw_response.to_s)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
@@ -0,0 +1,138 @@
|
|
1
|
+
module AuthorizeNet::SIM
|
2
|
+
|
3
|
+
# The SIM transaction class. Handles building the transaction payload and
|
4
|
+
# generating a set of hidden form fields to be POSTed to the gateway.
|
5
|
+
class Transaction < AuthorizeNet::KeyValueTransaction
|
6
|
+
|
7
|
+
RANDOM_SEQUENCE_MAX = (1 << 32) - 1
|
8
|
+
|
9
|
+
# Our MD5 digest generator.
|
10
|
+
@@digest = OpenSSL::Digest::Digest.new('md5')
|
11
|
+
|
12
|
+
# The default options for the constructor.
|
13
|
+
@@option_defaults = {
|
14
|
+
:sequence => nil,
|
15
|
+
:timestamp => nil,
|
16
|
+
:test => false,
|
17
|
+
:hosted_payment_form => false,
|
18
|
+
:relay_response => true,
|
19
|
+
:relay_url => nil,
|
20
|
+
:transaction_type => Type::AUTHORIZE_AND_CAPTURE
|
21
|
+
}
|
22
|
+
|
23
|
+
# Constructs a SIM transaction. You can use the new SIM transaction object
|
24
|
+
# to build the hidden field payload needed to process a SIM transaction with
|
25
|
+
# the gateway. In particular, this class handles generating the MD5 fingerprint
|
26
|
+
# used to authenticate transactions at the gateway. Since the fingerprint includes
|
27
|
+
# the amount to charge, you should not construct this object until you know EXACTLY
|
28
|
+
# how much you want to charge (or authorize).
|
29
|
+
#
|
30
|
+
# +api_login_id+:: Your API login ID, as a string.
|
31
|
+
# +api_transaction_key+:: Your API transaction key, as a string.
|
32
|
+
# +amount+:: The amount of the transaction, as a string, Float or BigDecimal.
|
33
|
+
# +options+:: A hash of options. See below for values.
|
34
|
+
#
|
35
|
+
# Options
|
36
|
+
# +sequence+:: The sequence number of the transaction as a string or Fixnum. This is usually something like an invoice number. If none is provided, the SDK generates one at random.
|
37
|
+
# +timestamp+:: The time the transaction was initiated as a string or Fixnum. This needs to be within 15 minutes of when the gateway receives the transaction. If no value is provided, the SDK defaults it to Time.now().
|
38
|
+
# +test+:: A boolean indicating if the transaction should be run in test mode or not (defaults to false).
|
39
|
+
# +hosted_payment_form+:: A boolean indicating if the transaction should use a hosted payment form (defaults to false).
|
40
|
+
# +relay_response+:: A boolean indicating if the transaction should use the relay response feature to return a receipt to the customer (defaults to true). Direct Post Method requires using a relay response.
|
41
|
+
# +relay_url+:: A string of the URL that the gateway should hit to get the relay response (defaults to nil).
|
42
|
+
# +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.
|
43
|
+
#
|
44
|
+
def initialize(api_login_id, api_transaction_key, amount, options = {})
|
45
|
+
super()
|
46
|
+
@api_transaction_key = api_transaction_key
|
47
|
+
@api_login_id = api_login_id
|
48
|
+
@amount = decimal_to_value(amount)
|
49
|
+
options = @@option_defaults.merge(options)
|
50
|
+
@sequence = options[:sequence]
|
51
|
+
@timestamp = options[:timestamp]
|
52
|
+
@test_mode = options[:test]
|
53
|
+
@hosted_payment_form = options[:hosted_payment_form]
|
54
|
+
@relay_url = options[:relay_url]
|
55
|
+
@type = options[:transaction_type]
|
56
|
+
unless @relay_url.nil?
|
57
|
+
@relay_response = true
|
58
|
+
else
|
59
|
+
@relay_response = !!options[:relay_response]
|
60
|
+
end
|
61
|
+
@delim_data = !@relay_response
|
62
|
+
end
|
63
|
+
|
64
|
+
# Calculates and returns the HMAC-MD5 fingerprint needed to authenticate the transaction
|
65
|
+
# with the SIM gateway.
|
66
|
+
def fingerprint
|
67
|
+
if @timestamp.nil?
|
68
|
+
@timestamp = Time.now.to_i
|
69
|
+
end
|
70
|
+
|
71
|
+
if @sequence.nil?
|
72
|
+
@sequence = rand(RANDOM_SEQUENCE_MAX)
|
73
|
+
end
|
74
|
+
OpenSSL::HMAC.hexdigest(@@digest, @api_transaction_key, "#{@api_login_id.to_s.rstrip}^#{@sequence.to_s.rstrip}^#{@timestamp.to_s.rstrip}^#{@amount.to_s.rstrip}^")
|
75
|
+
end
|
76
|
+
|
77
|
+
# Returns all the fields needed for the fingerprint. These must all be passed to the SIM
|
78
|
+
# exactly as returned. And these values are time sensitive.
|
79
|
+
def fingerprint_fields
|
80
|
+
{
|
81
|
+
:login => @api_login_id,
|
82
|
+
:fp_hash => fingerprint,
|
83
|
+
:fp_sequence => @sequence,
|
84
|
+
:fp_timestamp => @timestamp,
|
85
|
+
:amount => @amount
|
86
|
+
}
|
87
|
+
end
|
88
|
+
|
89
|
+
# Returns all the fields (including custom) exactly as they should be named
|
90
|
+
# in the SIM form. Fields with multiple values are returned with an array
|
91
|
+
# for the key's value.
|
92
|
+
def form_fields
|
93
|
+
form_fields = {}
|
94
|
+
form_fields[:x_test_request] = boolean_to_value(@test_mode)
|
95
|
+
if @hosted_payment_form
|
96
|
+
form_fields[:x_show_form] = 'PAYMENT_FORM'
|
97
|
+
end
|
98
|
+
if @relay_response && !@relay_url.nil?
|
99
|
+
form_fields[:x_relay_url] = @relay_url
|
100
|
+
end
|
101
|
+
fields.merge(:type => @type, :version => @version, :delim_data => boolean_to_value(@delim_data), :relay_response => boolean_to_value(@relay_response)).each do |k, v|
|
102
|
+
form_fields[to_external_field(k)] = v
|
103
|
+
end
|
104
|
+
fingerprint_fields.each do |k, v|
|
105
|
+
form_fields[to_external_field(k)] = v
|
106
|
+
end
|
107
|
+
form_fields.merge(custom_fields)
|
108
|
+
end
|
109
|
+
|
110
|
+
|
111
|
+
# Takes an instance of AuthorizeNet::SIM::HostedPaymentForm and adds it to the transaction. Note that
|
112
|
+
# many of the fields in AuthorizeNet::SIM::HostedPaymentForm are shared with those in
|
113
|
+
# AuthorizeNet::SIM::HostedReceiptPage. For the duplicate fields, which ever value
|
114
|
+
# is added to the transaction last will be the one used.
|
115
|
+
def set_hosted_payment_form(form)
|
116
|
+
@fields.merge!(form.to_hash)
|
117
|
+
@hosted_payment_form = true
|
118
|
+
end
|
119
|
+
|
120
|
+
# Takes an instance of AuthorizeNet::SIM::HostedReceiptPage and adds it to the transaction. Note that
|
121
|
+
# many of the fields in AuthorizeNet::SIM::HostedReceiptPage are shared with those in
|
122
|
+
# AuthorizeNet::SIM::HostedPaymentForm. For the duplicate fields, which ever value
|
123
|
+
# is added to the transaction last will be the one used. If you set a hosted payment receipt,
|
124
|
+
# the relay response will be disabled.
|
125
|
+
def set_hosted_payment_receipt(form)
|
126
|
+
@fields.merge!(form.to_hash)
|
127
|
+
@relay_response = false
|
128
|
+
@delim_data = true
|
129
|
+
end
|
130
|
+
|
131
|
+
# An alias for form_fields.
|
132
|
+
def run
|
133
|
+
form_fields
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module AuthorizeNet
|
2
|
+
|
3
|
+
# The core, API agnostic transaction class. You shouldn't instantiate this one.
|
4
|
+
# Instead you should use AuthorizeNet::AIM::Transaction, AuthorizeNet::SIM::Transaction or AuthorizeNet::ARB::Transaction.
|
5
|
+
class Transaction
|
6
|
+
|
7
|
+
include AuthorizeNet::TypeConversions
|
8
|
+
|
9
|
+
# Fields to convert to/from booleans.
|
10
|
+
@@boolean_fields = []
|
11
|
+
|
12
|
+
# Fields to convert to/from BigDecimal.
|
13
|
+
@@decimal_fields = []
|
14
|
+
|
15
|
+
# DO NOT USE. Instantiate AuthorizeNet::AIM::Transaction, AuthorizeNet::SIM::Transaction or AuthorizeNet::ARB::Transaction instead.
|
16
|
+
def initialize()
|
17
|
+
@fields ||= {}
|
18
|
+
end
|
19
|
+
|
20
|
+
# Sets arbitrary API fields, overwriting existing values if they exist. Takes a hash of key/value pairs,
|
21
|
+
# where the keys are the field names without the "x_" prefix. You can set a field to Nil to unset it. If
|
22
|
+
# the value is an array, each value in the array will be added. For example, set_fields({:line_item =>
|
23
|
+
# ["item1<|>golf balls<|><|>2<|>18.95<|>Y", "item2<|>golf bag<|>Wilson golf carry bag, red<|>1<|>39.99<|>"]})
|
24
|
+
# would generate two x_line_item fields in the transaction. One for each value in the array.
|
25
|
+
def set_fields(fields = {})
|
26
|
+
@fields.merge!(fields)
|
27
|
+
@fields.reject! {|k, v| v.nil?}
|
28
|
+
@fields
|
29
|
+
end
|
30
|
+
|
31
|
+
# Returns the current hash of API fields.
|
32
|
+
def fields
|
33
|
+
@fields
|
34
|
+
end
|
35
|
+
|
36
|
+
# Takes an instance of AuthorizeNet::Address and adds it to the transaction.
|
37
|
+
def set_address(address)
|
38
|
+
@fields.merge!(address.to_hash)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Takes an instance of AuthorizeNet::ShippingAddress and adds it to the transaction.
|
42
|
+
def set_shipping_address(address)
|
43
|
+
@fields.merge!(address.to_hash)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Takes an instance of AuthorizeNet::Customer and adds it to the transaction.
|
47
|
+
def set_customer(customer)
|
48
|
+
@fields.merge!(customer.to_hash)
|
49
|
+
end
|
50
|
+
|
51
|
+
#:enddoc:
|
52
|
+
protected
|
53
|
+
|
54
|
+
# Internal method to handle multiple types of payment arguments.
|
55
|
+
def handle_payment_argument(payment)
|
56
|
+
case payment
|
57
|
+
when AuthorizeNet::CreditCard, AuthorizeNet::ECheck
|
58
|
+
set_fields(payment.to_hash)
|
59
|
+
else
|
60
|
+
set_fields(:card_num => payment)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|