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"})
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::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, #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)


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
# 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((<CAVV>).+(</CAVV>)), '\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


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


150
151
152
# File 'lib/active_merchant/billing/gateways/firstdata_e4.rb', line 150

def supports_network_tokenization?
  true
end

#supports_scrubbing?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