lib/active_merchant/billing/gateways/authorize_net.rb in activemerchant-1.116.0 vs lib/active_merchant/billing/gateways/authorize_net.rb in activemerchant-1.117.0
- old
+ new
@@ -255,10 +255,12 @@
add_customer_data(xml, payment, options)
add_market_type_device_type(xml, payment, options)
add_settings(xml, payment, options)
add_user_fields(xml, amount, options)
add_ship_from_address(xml, options)
+ add_processing_options(xml, options)
+ add_subsequent_auth_information(xml, options)
end
end
def add_cim_auth_purchase(xml, transaction_type, amount, payment, options)
add_order_id(xml, options)
@@ -406,11 +408,11 @@
String(key).split('_').inject([]) { |buffer, e| buffer.push(buffer.empty? ? e : e.capitalize) }.join
end
def add_settings(xml, source, options)
xml.transactionSettings do
- if options[:recurring]
+ if options[:recurring] || subsequent_recurring_transaction?(options)
xml.setting do
xml.settingName('recurringBilling')
xml.settingValue('true')
end
end
@@ -700,10 +702,34 @@
def add_extra_options_for_cim(xml, options)
xml.extraOptions("x_delim_char=#{options[:delimiter]}") if options[:delimiter]
end
+ def add_processing_options(xml, options)
+ return unless options[:stored_credential]
+
+ xml.processingOptions do
+ if options[:stored_credential][:initial_transaction]
+ xml.isFirstSubsequentAuth 'true'
+ # xml.isFirstRecurringPayment 'true' if options[:stored_credential][:reason_type] == 'recurring'
+ elsif options[:stored_credential][:initiator] == 'cardholder'
+ xml.isStoredCredentials 'true'
+ else
+ xml.isSubsequentAuth 'true'
+ end
+ end
+ end
+
+ def add_subsequent_auth_information(xml, options)
+ return unless options.dig(:stored_credential, :reason_type) == 'unscheduled'
+
+ xml.subsequentAuthInformation do
+ xml.reason options[:stored_credential_reason_type_override] if options[:stored_credential_reason_type_override]
+ xml.originalNetworkTransId options[:stored_credential][:network_transaction_id] if options[:stored_credential][:network_transaction_id]
+ end
+ end
+
def create_customer_payment_profile(credit_card, options)
commit(:cim_store_update, options) do |xml|
xml.customerProfileId options[:customer_profile_id]
xml.paymentProfile do
add_billing_address(xml, credit_card, options)
@@ -760,9 +786,13 @@
if %w[US CA].include?(address[:country])
address[:state] || 'NC'
else
address[:state] || 'n/a'
end
+ end
+
+ def subsequent_recurring_transaction?(options)
+ options.dig(:stored_credential, :reason_type) == 'recurring' && !options.dig(:stored_credential, :initial_transaction)
end
def headers
{ 'Content-Type' => 'text/xml' }
end