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 =
[: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"})
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::CURRENCIES_WITHOUT_FRACTIONS, Gateway::DEBIT_CARDS, Gateway::RECURRING_DEPRECATION_MESSAGE, Gateway::STANDARD_ERROR_CODE

Instance Attribute Summary

Attributes inherited from Gateway

#options

Instance Method Summary collapse

Methods inherited from Gateway

card_brand, #card_brand, #generate_unique_id, inherited, non_fractional_currency?, supported_countries, #supported_countries, supported_countries=, supports?, #test?

Methods included from CreditCardFormatting

#format

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)



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

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

  super
end

Instance Method Details

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



81
82
83
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 81

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



89
90
91
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 89

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



85
86
87
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 85

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



97
98
99
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 97

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

#scrub(transcript) ⇒ Object



136
137
138
139
140
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 136

def scrub(transcript)
  transcript.
    gsub(%r((<Card_Number>).+(</Card_Number>)), '\1[FILTERED]\2').
    gsub(%r((<VerificationStr2>).+(</VerificationStr2>)), '\1[FILTERED]\2')
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



128
129
130
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 128

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

#supports_network_tokenization?Boolean



142
143
144
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 142

def supports_network_tokenization?
  true
end

#supports_scrubbing?Boolean



132
133
134
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 132

def supports_scrubbing?
  true
end

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



101
102
103
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 101

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

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



93
94
95
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 93

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