Merchant account

In order to use iDEAL you will need to get an iDEAL merchant account from your bank. Every bank offers âcomplete paymentâ services, which can obfuscate the right choice. The payment product that you will want to get, in order to use this gateway class, is a bare bones iDEAL account.

Generate private keys and certificates

Messages to, and from, the acquirer, are all signed in order to prove their authenticity. This means that you will have to have a certificate to sign your messages going to the acquirer and you will need to have the certificate of the acquirer to verify its signed messages.

The latter can be downloaded from your acquirer after registration. The former, however, can be a certificate signed by a CA authority or a self-signed certificate.

With the ING bank you upload your private certificate with your iDEAL Dashboard. Be aware that there are two dashboards, one dashboard for the test environment and one dashboard for the production environment!

Test

Test the gem

You can run the tests from this gem with (inside the active_merchant_ideal directory):

1

raketest

Run the remote tests

Create .active_merchant directory in your own home directory

Copy test/fixtures.yml to the .active_merchant directory

Fill in your own merchant id, passphrase and the correct locations to your private key and certificates.

For running the seven prescribed remote test transactions (ING bank) which are needed to activate the iDEAL account use

1

raketest:remote

Example (Rails)

First configure the gateway

Put the following code in, for instance, an initializer:

12345678

IdealGateway.live_url='https://ideal.secure-ing.com:443/ideal/iDeal'IdealGateway.merchant_id='00123456789'IdealGateway.passphrase='the_private_key_passphrase'# CERTIFICATE_ROOT points to a directory where the key and certificates are locatedIdealGateway.private_key_file=File.join(CERTIFICATE_ROOT,'private_key.pem')IdealGateway.private_certificate_file=File.join(CERTIFICATE_ROOT,'private_certificate.cer')IdealGateway.ideal_certificate_file=File.join(CERTIFICATE_ROOT,'ideal.cer')

Controller

First you’ll need to setup a transaction and redirect the consumer there so she can make the payment:

12345678910111213141516171819202122232425262728293031

classPurchasesController<ActionController::Basedefcreate# â?¬10.00 in cents.purchase=@user.purchases.build(:price=>1000)# We want an id for the URL.purchase.save(false)purchase_options={:issuer_id=>params[:purchase][:issuer_id],:order_id=>purchase.id,:return_url=>purchase_url(purchase),:description=>'A Dutch windmill'}# Save the purchase instance so that the consumer# can return to its resource url to finish the transaction.purchase.update_attributes!(purchase_options)gateway=ActiveMerchant::Billing::IdealGateway.newtransaction_response=gateway.setup_purchase(purchase.price,purchase_options)iftransaction_response.success?# Store the transaction_id that the acquirer# has created to identify the transaction.purchase.update_attributes!(:transaction_id=>transaction_response.transaction_id)# Redirect the consumer to the issuerâ??s payment page.redirect_totransaction_response.service_urlendendend

After the consumer is done with the payment she will be redirected to the :return_url. It’s now your responsibility as merchant to check if the payment has been made:

1234567891011

classPurchasesController<ActionController::Basedefshowgateway=ActiveMerchant::Billing::IdealGateway.newtransaction_status=gateway.capture(@purchase.transaction_id)iftransaction_status.success?@purchase.update_attributes!(:paid=>true)flash[:notice]="Congratulations, you are now the proud owner of a Dutch windmill!"endendend

History

In 2006 an iDEAL payment library was written in Ruby for a web shop build in Rails for selling mobile phone credits. It was basically a translation of the PHP example given by the iDEAL organization (see iDEAL Advanced Integration Manual PHP). Is was released as the ideal-on-rails plugin.

In 2007 this code was refactored as a patch for the ActiveMerchant library, this was mainly done by Fingertips for a client project. This patch was never accepted due to the fact it was too different (and maybe too obscure) from the ‘normal’ credit card gateways.

In 2009 Fingertips forked the ActiveMerchant library and added an iDEAL gateway (presumable based on the first ActiveMerchant patch) to a new ideal branch.

In 2010 this code was extracted and converted into a separate gem, so it can be more easily used in combination with the latest version of ActiveMerchant. This library is just an extraction, nothing more and nothing less. There are no fundamental changes between the code from the ideal branch and the code of this gem.