class ActiveMerchant::Billing::SecurePayGateway
Constants
- API_VERSION
- AUTHORIZATION_CODE
- AVS_ERRORS
- AVS_REASON_CODES
- CARDHOLDER_AUTH_CODE
- CARD_CODE_ERRORS
- FRAUD_REVIEW
- TRANSACTION_ALREADY_ACTIONED
Public Class Methods
new(options = {})
click to toggle source
Calls superclass method
ActiveMerchant::Billing::Gateway::new
# File lib/active_merchant/billing/gateways/secure_pay.rb, line 29 def initialize(options = {}) requires!(options, :login, :password) super end
Public Instance Methods
purchase(money, paysource, options = {})
click to toggle source
# File lib/active_merchant/billing/gateways/secure_pay.rb, line 34 def purchase(money, paysource, options = {}) post = {} add_currency_code(post, money, options) add_invoice(post, options) add_payment_source(post, paysource, options) add_address(post, options) add_customer_data(post, options) add_duplicate_window(post) commit('AUTH_CAPTURE', money, post) end
Private Instance Methods
add_address(post, options)
click to toggle source
# File lib/active_merchant/billing/gateways/secure_pay.rb, line 155 def add_address(post, options) if address = options[:billing_address] || options[:address] post[:address] = address[:address1].to_s post[:company] = address[:company].to_s post[:phone] = address[:phone].to_s post[:zip] = address[:zip].to_s post[:city] = address[:city].to_s post[:country] = address[:country].to_s post[:state] = address[:state].blank? ? 'n/a' : address[:state] end if address = options[:shipping_address] post[:ship_to_first_name] = address[:first_name].to_s post[:ship_to_last_name] = address[:last_name].to_s post[:ship_to_address] = address[:address1].to_s post[:ship_to_company] = address[:company].to_s post[:ship_to_phone] = address[:phone].to_s post[:ship_to_zip] = address[:zip].to_s post[:ship_to_city] = address[:city].to_s post[:ship_to_country] = address[:country].to_s post[:ship_to_state] = address[:state].blank? ? 'n/a' : address[:state] end end
add_creditcard(post, creditcard, options = {})
click to toggle source
# File lib/active_merchant/billing/gateways/secure_pay.rb, line 119 def add_creditcard(post, creditcard, options = {}) post[:card_num] = creditcard.number post[:card_code] = creditcard.verification_value if creditcard.verification_value? post[:exp_date] = expdate(creditcard) post[:first_name] = creditcard.first_name post[:last_name] = creditcard.last_name end
add_currency_code(post, money, options)
click to toggle source
# File lib/active_merchant/billing/gateways/secure_pay.rb, line 110 def add_currency_code(post, money, options) post[:currency_code] = options[:currency] || currency(money) end
add_customer_data(post, options)
click to toggle source
# File lib/active_merchant/billing/gateways/secure_pay.rb, line 131 def add_customer_data(post, options) if options.has_key? :email post[:email] = options[:email] post[:email_customer] = false end if options.has_key? :customer post[:cust_id] = options[:customer] if Float(options[:customer]) rescue nil end post[:customer_ip] = options[:ip] if options.has_key? :ip post[:cardholder_authentication_value] = options[:cardholder_authentication_value] if options.has_key? :cardholder_authentication_value post[:authentication_indicator] = options[:authentication_indicator] if options.has_key? :authentication_indicator end
add_duplicate_window(post)
click to toggle source
x_duplicate_window won’t be sent by default, because sending it changes the response. “If this field is present in the request with or without a value, an enhanced duplicate transaction response will be sent.” (as of 2008-12-30) www.authorize.net/support/AIM_guide_SCC.pdf
# File lib/active_merchant/billing/gateways/secure_pay.rb, line 151 def add_duplicate_window(post) post[:duplicate_window] = duplicate_window if duplicate_window end
add_invoice(post, options)
click to toggle source
# File lib/active_merchant/billing/gateways/secure_pay.rb, line 114 def add_invoice(post, options) post[:invoice_num] = options[:order_id] post[:description] = options[:description] end
add_payment_source(params, source, options = {})
click to toggle source
# File lib/active_merchant/billing/gateways/secure_pay.rb, line 127 def add_payment_source(params, source, options = {}) add_creditcard(params, source, options) end
commit(action, money, parameters)
click to toggle source
# File lib/active_merchant/billing/gateways/secure_pay.rb, line 48 def commit(action, money, parameters) parameters[:amount] = amount(money) unless action == 'VOID' url = (test? ? self.test_url : self.live_url) data = ssl_post(url, post_data(action, parameters)) response = parse(data) response[:action] = action message = message_from(response) Response.new( success?(response), message, response, test: test?, authorization: response[:transaction_id], fraud_review: fraud_review?(response), avs_result: { code: response[:avs_result_code] }, cvv_result: response[:card_code] ) end
fraud_review?(response)
click to toggle source
# File lib/active_merchant/billing/gateways/secure_pay.rb, line 75 def fraud_review?(response) response[:response_code] == FRAUD_REVIEW end
message_from(results)
click to toggle source
# File lib/active_merchant/billing/gateways/secure_pay.rb, line 179 def message_from(results) if results[:response_code] == DECLINED return CVVResult.messages[results[:card_code]] if CARD_CODE_ERRORS.include?(results[:card_code]) return AVSResult.messages[results[:avs_result_code]] if AVS_REASON_CODES.include?(results[:response_reason_code]) && AVS_ERRORS.include?(results[:avs_result_code]) end (results[:response_reason_text] ? results[:response_reason_text].chomp('.') : '') end
parse(body)
click to toggle source
# File lib/active_merchant/billing/gateways/secure_pay.rb, line 79 def parse(body) fields = split(body) { response_code: fields[RESPONSE_CODE].to_i, response_reason_code: fields[RESPONSE_REASON_CODE], response_reason_text: fields[RESPONSE_REASON_TEXT], avs_result_code: fields[AVS_RESULT_CODE], transaction_id: fields[TRANSACTION_ID], card_code: fields[CARD_CODE_RESPONSE_CODE], authorization_code: fields[AUTHORIZATION_CODE], cardholder_authentication_code: fields[CARDHOLDER_AUTH_CODE] } end
post_data(action, parameters = {})
click to toggle source
# File lib/active_merchant/billing/gateways/secure_pay.rb, line 94 def post_data(action, parameters = {}) post = {} post[:version] = API_VERSION post[:login] = @options[:login] post[:tran_key] = @options[:password] post[:relay_response] = 'FALSE' post[:type] = action post[:delim_data] = 'TRUE' post[:delim_char] = ',' post[:encap_char] = '$' post[:solution_ID] = application_id if application_id post.merge(parameters).collect { |key, value| "x_#{key}=#{CGI.escape(value.to_s)}" }.join('&') end
split(response)
click to toggle source
# File lib/active_merchant/billing/gateways/secure_pay.rb, line 188 def split(response) response.split(',') end
success?(response)
click to toggle source
# File lib/active_merchant/billing/gateways/secure_pay.rb, line 71 def success?(response) response[:response_code] == APPROVED && TRANSACTION_ALREADY_ACTIONED.exclude?(response[:response_reason_code]) end