A simple client that talks to the Adyen API

Inline docs

Does not try to be smart, stays close to the documentation while adhering to Ruby conventions.

Setup & Configuration

gem install adyen_client

In your Gemfile:

gem "adyen_client"

Require and configure the client:

require "adyen_client"

# Block style
AdyenClient.configure do |c|
  c.environment = :test
  c.username = "ws_123456@Company.FooBar"
  c.password = "correctbatteryhorsestaple"
  c.cse_public_key = "10001|..."
  c.default_merchant_account = "FooBar123"
  c.default_currency = "EUR"

# Hash style works too, string or symbol keys
AdyenClient.configure(environment: :test, username: "ws_123456@Company.FooBar", ...)

# That comes in handy to configure the client from a YAML file
AdyenClient.configure(YAML.load_file(Rails.root.join("config", "adyen.yml"))[Rails.env.to_s])

# You can override all default_* options for each instance of a client
client = AdyenClient.new(merchant_account: "FooBarSubMerchant123")
eur_client = AdyenClient.new(currency: "EUR")


Simple payment

client = AdyenClient.new
response = client.authorise(amount: 100, encrypted_card: "adyenjs_0_1_15$OlmG...")
if response.authorised?
  puts "( ノ ゚ー゚)ノ"
  puts "(-‸ლ)"

Setup a recurring contract, charge users later

user = User.create(email: "john@doe.com", last_ip: request.remote_ip)

client = AdyenClient.new
response = client.create_recurring_contract(encrypted_card: "adyenjs_0_1_15$OlmG...", shopper: {
  reference: user.id,
  email: user.email,
  ip: user.last_ip # optional but recommended
if response.authorised?
  # now we know the users card is valid
  # something is wrong with the users card or we got an error

Later, we want to charge the user based on that contract.

user = User.find_by_email("john@doe.com")

client = AdyenClient.new
response = client.authorise_recurring_payment(amount: 1699, shopper: { reference: user.id })
if response.authorised?
  # we know the payment is on its way
  # something is wrong, maybe we got an error


All publicly usable methods and classes are documented here.

This library does not try to be too smart, it simply provides a layer of abstraction on top of the Adyen JSON API. Also the default AdyenClient::Response class basically just wraps the JSON response. The only work it does is converting camelCase keys to sneak_case, removing unnecessary object nestings and providing you with a convenience authorised? method.

If you want a more sophisticated response class, you can easily hook up your own. The only method you need to provide is ::parse. It will receive one argument, the HTTParty::Response for the given request.

class MyAdyenResponse
  def self.parse(http_response)
    # ... your fancy code

Hook it up by initialising the client like this: AdyenClient.new(response_class: MyAdyenResponse).

Similar, if you want nothing else than the bare HTTParty::Response, initialise the client with: response_class: nil.


I am very happy to receive pull requests or bug reports for problems with the library. Please make sure you are only reporting an actual issue with the library itself, I cannot help with your payment flow or advise you on anything related to the Adyen API.


I am not associated with Adyen in any way. If you have problems with your adyen account or your payment flow, please contact the very helpful Adyen support using support ät adyen.com.

Please make yourself comfortable with the Adyen documentation on how you want to setup your payment flow.


The MIT License (MIT), Copyright (c) 2015 Lukas Rieder