Created: 2011-07-06 22:43
Updated: 2018-03-23 18:04
License: mit

First Data Latvia gateway for Active Merchant

Build Status


$ gem install active_merchant_first_data


require "active_merchant_first_data"

gateway =
  pem_password: "5x64jq8n234c"

# Authorize for 10 euros (1000 euro cents)
response = gateway.authorize(1000, client_ip_addr: '')

# Use this url to enter credit card data

# Capture the money
gateway.capture(1000, response.authorization, client_ip_addr: '')

First Data test environment setup

  1. Generate a new certificate

    $ openssl req -newkey rsa:2048 -keyout spec/certs/1234567_key.pem -out spec/certs/1234567_req.pem -subj "/C=lv/" -outform PEM
    Enter PEM pass phrase: 81f174259v45
  2. Request your certificate using 1234567_req.pem

  3. Copy the 3 files you received in e-mail to spec/certs/:

  4. Convert the certificates and keys to 1234567_keystore.pem

    $ openssl pkcs12 -export -in spec/certs/1234567.pem -out spec/certs/1234567_keystore.p12 -certfile spec/certs/ECOMM.pem -inkey spec/certs/1234567_key.pem
    Enter pass phrase for 1234567_key.pem: 81f174259v45
    Enter Export Password: <empty>
    $ openssl pkcs12 -in spec/certs/1234567_keystore.p12 > spec/certs/1234567_keystore.pem
    Enter Import Password: <empty>
    Enter PEM pass phrase: 5x64jq8n234c
  5. Set your WAN IP address

Mocking in (RSpec) tests

Perhaps the best way to mock responses in tests is to disallow remote connections altogether and then control what responses specific requests receive.

For example, to mock response to the #purchase request with WebMock you'd:

before do
  body = {
    "TRANSACTION_ID" => "e+oClP4em8uBDozaZ4CBBbipEcM="
  }.merge(options).map{ |k, v| "#{k}: #{v}" }.join("\n")

  WebMock.stub_request(:post, %r'').
    with(body: hash_including("command" => "v")).
    to_return(body: body)

Peruse first_data_gateway.rb to find out which command letters map to which methods.
Additionally, have a look at spec/cassettes for response body examples.

Cookies help us deliver our services. By using our services, you agree to our use of cookies Learn more