Class: ActiveMerchant::Billing::FirstdataE4Gateway

Inherits:
Gateway
  • Object
show all
Defined in:
lib/active_merchant/billing/gateways/firstdata_e4.rb

Constant Summary collapse

TRANSACTIONS =
{
  sale:          '00',
  authorization: '01',
  verify:        '05',
  capture:       '32',
  void:          '33',
  credit:        '34',
  store:         '05'
}
POST_HEADERS =
{
  'Accepts' => 'application/xml',
  'Content-Type' => 'application/xml'
}
SUCCESS =
'true'
SENSITIVE_FIELDS =
%i[verification_str2 expiry_date card_number]
BRANDS =
{
  visa: 'Visa',
  master: 'Mastercard',
  american_express: 'American Express',
  jcb: 'JCB',
  discover: 'Discover'
}
E4_BRANDS =
BRANDS.merge({ mastercard: 'Mastercard' })
DEFAULT_ECI =
'07'
STANDARD_ERROR_CODE_MAPPING =
{
  # Bank error codes: https://firstdata.zendesk.com/entries/471297-First-Data-Global-Gateway-e4-Bank-Response-Codes
  '201' => STANDARD_ERROR_CODE[:incorrect_number],
  '531' => STANDARD_ERROR_CODE[:invalid_cvc],
  '503' => STANDARD_ERROR_CODE[:invalid_cvc],
  '811' => STANDARD_ERROR_CODE[:invalid_cvc],
  '605' => STANDARD_ERROR_CODE[:invalid_expiry_date],
  '522' => STANDARD_ERROR_CODE[:expired_card],
  '303' => STANDARD_ERROR_CODE[:card_declined],
  '530' => STANDARD_ERROR_CODE[:card_declined],
  '401' => STANDARD_ERROR_CODE[:call_issuer],
  '402' => STANDARD_ERROR_CODE[:call_issuer],
  '501' => STANDARD_ERROR_CODE[:pickup_card],
  # Ecommerce error codes -- https://firstdata.zendesk.com/entries/451980-ecommerce-response-codes-etg-codes
  '22' => STANDARD_ERROR_CODE[:invalid_number],
  '25' => STANDARD_ERROR_CODE[:invalid_expiry_date],
  '31' => STANDARD_ERROR_CODE[:incorrect_cvc],
  '44' => STANDARD_ERROR_CODE[:incorrect_zip],
  '42' => STANDARD_ERROR_CODE[:processing_error]
}

Constants inherited from Gateway

Gateway::CREDIT_DEPRECATION_MESSAGE, Gateway::RECURRING_DEPRECATION_MESSAGE, Gateway::STANDARD_ERROR_CODE

Instance Attribute Summary

Attributes inherited from Gateway

#options

Instance Method Summary collapse

Methods inherited from Gateway

#add_field_to_post_if_present, #add_fields_to_post_if_present, #card_brand, card_brand, #generate_unique_id, inherited, #supported_countries, supported_countries, supported_countries=, supports?, #test?

Methods included from CreditCardFormatting

#format, #strftime_yyyymm

Methods included from PostsData

included, #raw_ssl_request, #ssl_get, #ssl_post, #ssl_request

Constructor Details

#initialize(options = {}) ⇒ FirstdataE4Gateway

Create a new FirstdataE4Gateway

The gateway requires that a valid login and password be passed in the options hash.

Options

  • :login – The EXACT ID. Also known as the Gateway ID.

    (Found in your administration terminal settings)
    
  • :password – The terminal password (not your account password)



76
77
78
79
80
81
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 76

def initialize(options = {})
  requires!(options, :login, :password)
  @options = options

  super
end

Instance Method Details

#authorize(money, credit_card_or_store_authorization, options = {}) ⇒ Object



83
84
85
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 83

def authorize(money, credit_card_or_store_authorization, options = {})
  commit(:authorization, build_sale_or_authorization_request(money, credit_card_or_store_authorization, options))
end

#capture(money, authorization, options = {}) ⇒ Object



91
92
93
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 91

def capture(money, authorization, options = {})
  commit(:capture, build_capture_or_credit_request(money, authorization, options))
end

#purchase(money, credit_card_or_store_authorization, options = {}) ⇒ Object



87
88
89
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 87

def purchase(money, credit_card_or_store_authorization, options = {})
  commit(:sale, build_sale_or_authorization_request(money, credit_card_or_store_authorization, options))
end

#refund(money, authorization, options = {}) ⇒ Object



99
100
101
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 99

def refund(money, authorization, options = {})
  commit(:credit, build_capture_or_credit_request(money, authorization, options))
end

#scrub(transcript) ⇒ Object



143
144
145
146
147
148
149
150
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 143

def scrub(transcript)
  transcript.
    gsub(%r((<Card_Number>).+(</Card_Number>)), '\1[FILTERED]\2').
    gsub(%r((<VerificationStr2>).+(</VerificationStr2>)), '\1[FILTERED]\2').
    gsub(%r((<Password>).+(</Password>))i, '\1[FILTERED]\2').
    gsub(%r((<CAVV>).+(</CAVV>)), '\1[FILTERED]\2').
    gsub(%r((Card Number : ).*\d)i, '\1[FILTERED]')
end

#store(credit_card, options = {}) ⇒ Object

Tokenize a credit card with TransArmor

The TransArmor token and other card data necessary for subsequent transactions is stored in the response’s authorization attribute. The authorization string may be passed to authorize and purchase instead of a ActiveMerchant::Billing::CreditCard instance.

TransArmor support must be explicitly activated on your gateway account by FirstData. If your authorization string is empty, contact FirstData support for account setup assistance.

Example

# Generate token
result = gateway.store(credit_card)
if result.success?
  my_record.update_attributes(:authorization => result.authorization)
end

# Use token
result = gateway.purchase(1000, my_record.authorization)

firstdata.zendesk.com/entries/21303361-transarmor-tokenization



130
131
132
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 130

def store(credit_card, options = {})
  commit(:store, build_store_request(credit_card, options), credit_card)
end

#supports_network_tokenization?Boolean

Returns:

  • (Boolean)


152
153
154
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 152

def supports_network_tokenization?
  true
end

#supports_scrubbing?Boolean

Returns:

  • (Boolean)


139
140
141
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 139

def supports_scrubbing?
  true
end

#verify(credit_card, options = {}) ⇒ Object



103
104
105
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 103

def verify(credit_card, options = {})
  commit(:verify, build_sale_or_authorization_request(0, credit_card, options))
end

#verify_credentialsObject



134
135
136
137
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 134

def verify_credentials
  response = void('0')
  response.message != 'Unauthorized Request. Bad or missing credentials.'
end

#void(authorization, options = {}) ⇒ Object



95
96
97
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 95

def void(authorization, options = {})
  commit(:void, build_capture_or_credit_request(money_from_authorization(authorization), authorization, options))
end