require 'nokogiri' module ActiveMerchant #:nodoc: module Billing #:nodoc: # See https://helpdesk.worldnettps.com/support/solutions/articles/1000167298-integrator-guide class WorldNetGateway < Gateway self.test_url = 'https://testpayments.worldnettps.com/merchant/xmlpayment' self.live_url = 'https://payments.worldnettps.com/merchant/xmlpayment' self.homepage_url = 'http://worldnettps.com/' self.display_name = 'WorldNet' self.supported_countries = %w(IE GB US) self.default_currency = 'EUR' CARD_TYPES = { visa: 'VISA', master: 'MASTERCARD', discover: 'DISCOVER', american_express: 'AMEX', maestro: 'MAESTRO', diners_club: 'DINERS', jcb: 'JCB', secure_card: 'SECURECARD' }.freeze self.supported_cardtypes = CARD_TYPES.keys def initialize(options = {}) requires!(options, :terminal_id, :secret) options[:terminal_type] ||= 2 # eCommerce super end def purchase(money, payment, options = {}) requires!(options, :order_id) post = {} add_invoice(post, money, options) add_payment(post, payment) add_address(post, payment, options) add_customer_data(post, options) commit('PAYMENT', post) end def authorize(money, payment, options = {}) requires!(options, :order_id) post = {} add_invoice(post, money, options) add_payment(post, payment) add_address(post, payment, options) add_customer_data(post, options) commit('PREAUTH', post) end def capture(money, authorization, options = {}) post = {} add_invoice(post, money, options) post[:uniqueref] = authorization commit('PREAUTHCOMPLETION', post) end def refund(money, authorization, options = {}) requires!(options, :operator, :reason) post = {} post[:uniqueref] = authorization add_invoice(post, money, options) post[:operator] = options[:operator] post[:reason] = options[:reason] commit('REFUND', post) end def void(authorization, _options = {}) post = {} post[:uniqueref] = authorization commit('VOID', post) end 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 def store(payment, options = {}) requires!(options, :order_id) post = {} post[:merchantref] = options[:order_id] add_payment(post, payment) commit('SECURECARDREGISTRATION', post) end def unstore(payment, options = {}) requires!(options, :order_id) post = {} post[:merchantref] = options[:order_id] add_card_reference(post, payment) commit('SECURECARDREMOVAL', post) end def supports_scrubbing? true end def scrub(transcript) transcript .gsub(%r{(\d{6})\d+(\d{4})}, '\1...\2') .gsub(%r{()\d+(