class ActiveMerchant::Billing::Gateway
Description¶ ↑
The Gateway
class is the base class for all ActiveMerchant
gateway implementations.
The standard list of gateway functions that most concrete gateway subclasses implement is:
-
purchase(money, credit_card, options = {})
-
authorize(money, credit_card, options = {})
-
capture(money, authorization, options = {})
-
void(identification, options = {})
-
refund(money, identification, options = {})
-
verify(credit_card, options = {})
Some gateways also support features for storing credit cards:
-
store(credit_card, options = {})
-
unstore(identification, options = {})
Gateway
Options¶ ↑
The options hash consists of the following options:
-
:order_id
- The order number -
:ip
- The IP address of the customer making the purchase -
:customer
- The name, customer number, or other information that identifies the customer -
:invoice
- The invoice number -
:merchant
- The name or description of the merchant offering the product -
:description
- A description of the transaction -
:email
- The email address of the customer -
:currency
- The currency of the transaction. Only important when you are using a currency that is not the default with a gateway that supports multiple currencies. -
:billing_address
- A hash containing the billing address of the customer. -
:shipping_address
- A hash containing the shipping address of the customer.
The :billing_address
, and :shipping_address
hashes can have the following keys:
-
:name
- The full name of the customer. -
:company
- The company name of the customer. -
:address1
- The primary street address of the customer. -
:address2
- Additional line of address information. -
:city
- The city of the customer. -
:state
- The state of the customer. The 2 digit code for US and Canadian addresses. The full name of the state or province for foreign addresses. -
:country
- The [ISO 3166-1-alpha-2 code](www.iso.org/iso/country_codes/iso_3166_code_lists/english_country_names_and_code_elements.htm) for the customer. -
:zip
- The zip or postal code of the customer. -
:phone
- The phone number of the customer.
Implementing new gateways¶ ↑
Constants
- CREDIT_DEPRECATION_MESSAGE
- RECURRING_DEPRECATION_MESSAGE
- STANDARD_ERROR_CODE
Standardized
Error
Codes¶ ↑:incorrect_number - Card number does not comply with ISO/IEC 7812 numbering standard :invalid_number - Card number was not matched by processor :invalid_expiry_date - Expiry date does not match correct formatting :invalid_cvc - Security codes does not match correct format (3-4 digits) :expired_card - Card number is expired :incorrect_cvc - Security code was not matched by the processor :incorrect_zip - Zip code is not in correct format :incorrect_address -
Billing
address info was not matched by the processor :incorrect_pin - Card PIN is incorrect :card_declined - Card number declined by processor :processing_error - Processor error :call_issuer - Transaction requires voice authentication, call issuer :pickup_card - Issuer requests that you pickup the card from merchant :test_mode_live_card - Card was declined. Request was in test mode, but used a non test card. :unsupported_feature - Transaction failed due to gateway or merchantconfiguration not supporting a feature used, such as network tokenization.
Attributes
Public Class Methods
# File lib/active_merchant/billing/gateway.rb, line 151 def self.card_brand(source) result = source.respond_to?(:brand) ? source.brand : source.type result.to_s.downcase end
# File lib/active_merchant/billing/gateway.rb, line 104 def self.inherited(subclass) super @@implementations << subclass end
Initialize a new gateway.
See the documentation for the gateway you will be using to make sure there are no other required options.
# File lib/active_merchant/billing/gateway.rb, line 181 def initialize(options = {}) @options = options end
# File lib/active_merchant/billing/gateway.rb, line 165 def self.supported_countries @supported_countries ||= [] end
# File lib/active_merchant/billing/gateway.rb, line 156 def self.supported_countries=(country_codes) country_codes.each do |country_code| unless ActiveMerchant::Country.find(country_code) raise ActiveMerchant::InvalidCountryCodeError, "No country could be found for the country #{country_code}" end end @supported_countries = country_codes.dup end
Use this method to check if your gateway of interest supports a credit card of some type
# File lib/active_merchant/billing/gateway.rb, line 147 def self.supports?(card_type) supported_cardtypes.include?(card_type.to_sym) end
Public Instance Methods
# File lib/active_merchant/billing/gateway.rb, line 209 def add_field_to_post_if_present(post, options, field) post[field] = options[field] if options[field] end
# File lib/active_merchant/billing/gateway.rb, line 203 def add_fields_to_post_if_present(post, options, fields) fields.each do |field| add_field_to_post_if_present(post, options, field) end end
# File lib/active_merchant/billing/gateway.rb, line 173 def card_brand(source) self.class.card_brand(source) end
# File lib/active_merchant/billing/gateway.rb, line 109 def generate_unique_id SecureRandom.hex(16) end
# File lib/active_merchant/billing/gateway.rb, line 195 def scrub(transcript) raise 'This gateway does not support scrubbing.' end
# File lib/active_merchant/billing/gateway.rb, line 169 def supported_countries self.class.supported_countries end
# File lib/active_merchant/billing/gateway.rb, line 199 def supports_network_tokenization? false end
Does this gateway know how to scrub sensitive information out of HTTP transcripts?
# File lib/active_merchant/billing/gateway.rb, line 191 def supports_scrubbing? false end
Are we running in test mode?
# File lib/active_merchant/billing/gateway.rb, line 186 def test? (@options.has_key?(:test) ? @options[:test] : Base.test?) end