class ActiveMerchant::Billing::OppGateway
Public Class Methods
new(options={})
click to toggle source
Calls superclass method
ActiveMerchant::Billing::Gateway::new
# File lib/active_merchant/billing/gateways/opp.rb, line 121 def initialize(options={}) requires!(options, :user_id, :password, :entity_id) super end
Public Instance Methods
capture(money, authorization, options={})
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 140 def capture(money, authorization, options={}) # capture CP execute_referencing('CP', money, authorization, options) end
purchase(money, payment, options={})
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 126 def purchase(money, payment, options={}) # debit if payment.is_a?(String) options[:registrationId] = payment end execute_dbpa(options[:risk_workflow] ? 'PA.CP': 'DB', money, payment, options) end
refund(money, authorization, options={})
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 145 def refund(money, authorization, options={}) # refund RF execute_referencing('RF', money, authorization, options) end
scrub(transcript)
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 170 def scrub(transcript) transcript. gsub(%r((authentication\.password=)\w+), '\1[FILTERED]'). gsub(%r((card\.number=)\d+), '\1[FILTERED]'). gsub(%r((card\.cvv=)\d+), '\1[FILTERED]') end
store(credit_card, options = {})
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 162 def store(credit_card, options = {}) execute_store(credit_card, options.merge(store: true)) end
supports_scrubbing?()
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 166 def supports_scrubbing? true end
verify(credit_card, options={})
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 155 def verify(credit_card, options={}) MultiResponse.run(:use_first_response) do |r| r.process { authorize(100, credit_card, options) } r.process(:ignore_result) { void(r.authorization, options) } end end
void(authorization, options={})
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 150 def void(authorization, options={}) # reversal RV execute_referencing('RV', nil, authorization, options) end
Private Instance Methods
add_3d_secure(post, options)
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 279 def add_3d_secure(post, options) return unless options[:eci] && options[:cavv] && options[:xid] post[:threeDSecure] = { eci: options[:eci], verificationId: options[:cavv], xid: options[:xid] } end
add_address(post, options)
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 229 def add_address(post, options) if billing_address = options[:billing_address] || options[:address] address(post, billing_address, 'billing') end if shipping_address = options[:shipping_address] address(post, shipping_address, 'shipping') if shipping_address[:name] firstname, lastname = shipping_address[:name].split(' ') post[:shipping] = { givenName: firstname, surname: lastname } end end end
add_authentication(post)
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 207 def add_authentication(post) post[:authentication] = { entityId: @options[:entity_id], password: @options[:password], userId: @options[:user_id]} end
add_customer_data(post, payment, options)
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 211 def add_customer_data(post, payment, options) if options[:customer] post[:customer] = { merchantCustomerId: options[:customer][:merchant_customer_id], givenName: options[:customer][:givenname] || payment.first_name, surname: options[:customer][:surname] || payment.last_name, birthDate: options[:customer][:birth_date], phone: options[:customer][:phone], mobile: options[:customer][:mobile], email: options[:customer][:email] || options[:email], companyName: options[:customer][:company_name], identificationDocType: options[:customer][:identification_doctype], identificationDocId: options[:customer][:identification_docid], ip: options[:customer][:ip] || options[:ip] } end end
add_invoice(post, money, options)
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 253 def add_invoice(post, money, options) post[:amount] = amount(money) post[:currency] = options[:currency] || currency(money) unless post[:paymentType] == 'RV' post[:descriptor] = options[:description] || options[:descriptor] post[:merchantInvoiceId] = options[:merchantInvoiceId] || options[:order_id] post[:merchantTransactionId] = options[:merchant_transaction_id] || generate_unique_id end
add_options(post, options)
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 289 def add_options(post, options) post[:createRegistration] = options[:create_registration] if options[:create_registration] && !options[:registrationId] post[:testMode] = options[:test_mode] if test? && options[:test_mode] options.each { |key, value| post[key] = value if key.to_s.match('customParameters\[[a-zA-Z0-9\._]{3,64}\]') } post['customParameters[SHOPPER_pluginId]'] = 'activemerchant' post['customParameters[custom_disable3DSecure]'] = options[:disable_3d_secure] if options[:disable_3d_secure] end
add_payment_method(post, payment, options)
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 261 def add_payment_method(post, payment, options) return if payment.is_a?(String) if options[:registrationId] post[:card] = { cvv: payment.verification_value, } else post[:paymentBrand] = payment.brand.upcase post[:card] = { holder: payment.name, number: payment.number, expiryMonth: '%02d' % payment.month, expiryYear: payment.year, cvv: payment.verification_value, } end end
address(post, address, prefix)
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 242 def address(post, address, prefix) post[prefix] = { street1: address[:address1], street2: address[:address2], city: address[:city], state: address[:state], postcode: address[:zip], country: address[:country], } end
build_url(url, authorization, options)
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 297 def build_url(url, authorization, options) if options[:store] url.gsub(/payments/, 'registrations') elsif options[:registrationId] "#{url.gsub(/payments/, 'registrations')}/#{options[:registrationId]}/payments" elsif authorization "#{url}/#{authorization}" else url end end
commit(post, authorization, options)
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 309 def commit(post, authorization, options) url = build_url(test? ? test_url : live_url, authorization, options) add_authentication(post) post = flatten_hash(post) response = begin parse( ssl_post( url, post.collect { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join('&'), 'Content-Type' => 'application/x-www-form-urlencoded;charset=UTF-8' ) ) rescue ResponseError => e parse(e.response.body) end success = success_from(response) Response.new( success, message_from(response), response, authorization: authorization_from(response), test: test?, error_code: success ? nil : error_code_from(response) ) end
error_code_from(response)
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 371 def error_code_from(response) response['result']['code'] end
execute_dbpa(txtype, money, payment, options)
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 188 def execute_dbpa(txtype, money, payment, options) post = {} post[:paymentType] = txtype add_invoice(post, money, options) add_payment_method(post, payment, options) add_address(post, options) add_customer_data(post, payment, options) add_options(post, options) add_3d_secure(post, options) commit(post, nil, options) end
execute_referencing(txtype, money, authorization, options)
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 200 def execute_referencing(txtype, money, authorization, options) post = {} post[:paymentType] = txtype add_invoice(post, money, options) commit(post, authorization, options) end
execute_store(payment, options)
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 179 def execute_store(payment, options) post = {} add_payment_method(post, payment, options) add_address(post, options) add_options(post, options) add_3d_secure(post, options) commit(post, nil, options) end
flatten_hash(hash)
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 375 def flatten_hash(hash) hash.each_with_object({}) do |(k, v), h| if v.is_a? Hash flatten_hash(v).map do |h_k, h_v| h["#{k}.#{h_k}".to_sym] = h_v end else h[k] = v end end end
json_error(body)
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 344 def json_error(body) message = "Invalid response received #{body.inspect}" { 'result' => {'description' => message, 'code' => 'unknown' } } end
message_from(response)
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 361 def message_from(response) return 'Failed' unless response['result'] response['result']['description'] end
parse(body)
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 338 def parse(body) JSON.parse(body) rescue JSON::ParserError json_error(body) end
success_from(response)
click to toggle source
# File lib/active_merchant/billing/gateways/opp.rb, line 349 def success_from(response) return false unless response['result'] success_regex = /^(000\.000\.|000\.100\.1|000\.[36])/ if success_regex =~ response['result']['code'] true else false end end