lib/active_merchant/billing/gateways/bogus.rb
module ActiveMerchant #:nodoc:
module Billing #:nodoc:
# Bogus Gateway
class BogusGateway < Gateway
AUTHORIZATION = '53433'
AUTHORIZATION_EMV_SUCCESS = '8A023030'
AUTHORIZATION_EMV_DECLINE = '8A023035'
SUCCESS_MESSAGE = 'Bogus Gateway: Forced success'
FAILURE_MESSAGE = 'Bogus Gateway: Forced failure'
NUMBER_ERROR_MESSAGE = 'Bogus Gateway: Use CreditCard number ending in 1 for success, 2 for exception and anything else for error'
AMOUNT_ERROR_MESSAGE = 'Bogus Gateway: Use amount ending in 00 for success, 05 for failure and anything else for exception'
UNSTORE_ERROR_MESSAGE = 'Bogus Gateway: Use trans_id ending in 1 for success, 2 for exception and anything else for error'
CAPTURE_ERROR_MESSAGE = 'Bogus Gateway: Use authorization number ending in 1 for exception, 2 for error and anything else for success'
VOID_ERROR_MESSAGE = 'Bogus Gateway: Use authorization number ending in 1 for exception, 2 for error and anything else for success'
REFUND_ERROR_MESSAGE = 'Bogus Gateway: Use trans_id number ending in 1 for exception, 2 for error and anything else for success'
CHECK_ERROR_MESSAGE = 'Bogus Gateway: Use bank account number ending in 1 for success, 2 for exception and anything else for error'
self.supported_countries = []
self.supported_cardtypes = [:bogus]
self.homepage_url = 'http://example.com'
self.display_name = 'Bogus'
def authorize(money, paysource, options = {})
if paysource.respond_to?(:emv?) && paysource.emv?
authorize_emv(money, paysource, options)
else
authorize_swipe(money, paysource, options)
end
end
def purchase(money, paysource, options = {})
if paysource.respond_to?(:emv?) && paysource.emv?
purchase_emv(money, paysource, options)
else
purchase_swipe(money, paysource, options)
end
end
def credit(money, paysource, options = {})
if paysource.is_a?(String)
ActiveMerchant.deprecated CREDIT_DEPRECATION_MESSAGE
return refund(money, paysource, options)
end
money = amount(money)
case normalize(paysource)
when /1$/
Response.new(true, SUCCESS_MESSAGE, { paid_amount: money }, test: true)
when /2$/
Response.new(false, FAILURE_MESSAGE, { paid_amount: money, error: FAILURE_MESSAGE }, test: true, error_code: STANDARD_ERROR_CODE[:processing_error])
else
raise Error, error_message(paysource)
end
end
def refund(money, reference, options = {})
money = amount(money)
case reference
when /1$/
raise Error, REFUND_ERROR_MESSAGE
when /2$/
Response.new(false, FAILURE_MESSAGE, { paid_amount: money, error: FAILURE_MESSAGE }, test: true, error_code: STANDARD_ERROR_CODE[:processing_error])
else
Response.new(true, SUCCESS_MESSAGE, { paid_amount: money }, test: true)
end
end
def capture(money, reference, options = {})
money = amount(money)
case reference
when /1$/
raise Error, CAPTURE_ERROR_MESSAGE
when /2$/
Response.new(false, FAILURE_MESSAGE, { paid_amount: money, error: FAILURE_MESSAGE }, test: true, error_code: STANDARD_ERROR_CODE[:processing_error])
else
Response.new(true, SUCCESS_MESSAGE, { paid_amount: money }, test: true)
end
end
def void(reference, options = {})
case reference
when /1$/
raise Error, VOID_ERROR_MESSAGE
when /2$/
Response.new(false, FAILURE_MESSAGE, { authorization: reference, error: FAILURE_MESSAGE }, test: true, error_code: STANDARD_ERROR_CODE[:processing_error])
else
Response.new(true, SUCCESS_MESSAGE, { authorization: reference }, test: true)
end
end
def verify(credit_card, options = {})
authorize(0, credit_card, options)
end
def store(paysource, options = {})
case normalize(paysource)
when /1$/
Response.new(true, SUCCESS_MESSAGE, { billingid: '1' }, test: true, authorization: AUTHORIZATION)
when /2$/
Response.new(false, FAILURE_MESSAGE, { billingid: nil, error: FAILURE_MESSAGE }, test: true, error_code: STANDARD_ERROR_CODE[:processing_error])
else
raise Error, error_message(paysource)
end
end
def unstore(reference, options = {})
case reference
when /1$/
Response.new(true, SUCCESS_MESSAGE, {}, test: true)
when /2$/
Response.new(false, FAILURE_MESSAGE, { error: FAILURE_MESSAGE }, test: true, error_code: STANDARD_ERROR_CODE[:processing_error])
else
raise Error, UNSTORE_ERROR_MESSAGE
end
end
private
def authorize_emv(money, paysource, options = {})
money = amount(money)
case money
when /00$/
Response.new(true, SUCCESS_MESSAGE, { authorized_amount: money }, test: true, authorization: AUTHORIZATION, emv_authorization: AUTHORIZATION_EMV_SUCCESS)
when /05$/
Response.new(false, FAILURE_MESSAGE, { authorized_amount: money, error: FAILURE_MESSAGE }, test: true, error_code: STANDARD_ERROR_CODE[:processing_error], emv_authorization: AUTHORIZATION_EMV_DECLINE)
else
raise Error, error_message(paysource)
end
end
def authorize_swipe(money, paysource, options = {})
money = amount(money)
case normalize(paysource)
when /1$/, AUTHORIZATION
Response.new(true, SUCCESS_MESSAGE, { authorized_amount: money }, test: true, authorization: AUTHORIZATION)
when /2$/
Response.new(false, FAILURE_MESSAGE, { authorized_amount: money, error: FAILURE_MESSAGE }, test: true, error_code: STANDARD_ERROR_CODE[:processing_error])
else
raise Error, error_message(paysource)
end
end
def purchase_emv(money, paysource, options = {})
money = amount(money)
case money
when /00$/
Response.new(true, SUCCESS_MESSAGE, { paid_amount: money }, test: true, authorization: AUTHORIZATION, emv_authorization: AUTHORIZATION_EMV_SUCCESS)
when /05$/
Response.new(false, FAILURE_MESSAGE, { paid_amount: money, error: FAILURE_MESSAGE }, test: true, error_code: STANDARD_ERROR_CODE[:processing_error], emv_authorization: AUTHORIZATION_EMV_DECLINE)
else
raise Error, error_message(paysource)
end
end
def purchase_swipe(money, paysource, options = {})
money = amount(money)
case normalize(paysource)
when /1$/, AUTHORIZATION
Response.new(true, SUCCESS_MESSAGE, { paid_amount: money }, test: true, authorization: AUTHORIZATION)
when /2$/
Response.new(false, FAILURE_MESSAGE, { paid_amount: money, error: FAILURE_MESSAGE }, test: true, error_code: STANDARD_ERROR_CODE[:processing_error])
else
raise Error, error_message(paysource)
end
end
def normalize(paysource)
if paysource.respond_to?(:account_number) && (paysource.try(:number).blank? || paysource.number.blank?)
paysource.account_number
elsif paysource.respond_to?(:number)
paysource.number
else
paysource.to_s
end
end
def error_message(paysource)
if paysource.respond_to?(:emv?) && paysource.emv?
AMOUNT_ERROR_MESSAGE
elsif paysource.respond_to?(:account_number)
CHECK_ERROR_MESSAGE
elsif paysource.respond_to?(:number)
NUMBER_ERROR_MESSAGE
end
end
end
end
end