Active Merchant

De iDeal koppeling is als Active Merchant gateway geimplementeerd. De patch moet nog geaccepteerd worden.

Installatie

Active Merchant plugin

./script/plugin install http://activemerchant.googlecode.com/svn/trunk/active_merchant

iDeal patch toepassen

Download de patch naar de root van je rails applicatie.

patch -p0 < active_merchant_ideal.diff

iDeal globale instellingen

Nodig zijn:

  • Merchant id
  • Acquirer live url en Acquirer test url
  • Ideal certificaat
  • De merchant private key en wachtwoord
  • De merchant public key

Definieer de instellingen alsvolgt:

  ActiveMerchant::Billing::IdealGateway.test_url = "https://acquirer.test.url"
  ActiveMerchant::Billing::IdealGateway.live_url = "https://acquirer.live.url"    

  DEFAULT_IDEAL_OPTIONS = {
    :merchant => "12345789",
    :private_key => "private_key.pem",
    :private_cert => "public_key.cer",
    :ideal_cert => "ideal.cer",
    :password => "password"
  }

De gateway wordt alsvolgt aangemaakt:

  @gateway = Base.gateway(:ideal).new DEFAULT_IDEAL_OPTIONS 

Remote tests draaien

De remote tests maken verbinding met de test omgeving van iDeal en is een goede manier om te controleren dat de configuratie werkt. Zorg ervoor dat de instellingen in vendor/plugins/active_merchant/test/remote_tests/remote_ideal_test.rb overeenkomen met je configuratie en draai de testen.

cd vendor/plugins/active_merchant/
rake test_units
ruby test/remote_tests/remote_ideal_test.rb

Gebruik van iDeal Gateway

Opvragen Issuers

De gateway geeft een array terug die je kunt gebruiken voor een dropdown.

  # Get list of issuers to fill selection list on your payment form:
  response = gateway.issuers
  list = response.issuer_list if response.success?

Transactie Request

Nodig zijn:

  • bedrag: in centen
  • issuer_id: de gekozen bank van de klant
  • expiration period
  • return_url: de return url waarop de klant terugkomt na betaling bij zijn bank
  • order_id: ordernummer zoals die wordt doorgegeven aan de bank
  • currency: 'EUR'
  • omschrijving
  • entrance_code: code die mee gegeven wordt in bij terugkeer via de return_url, zodat de applicatie de sessie terug kan vinden
  options = {
    :issuer_id=>'0001', 
    :expiration_period=>'PT10M', 
    :return_url =>'http://www.return.url', 
    :order_id=>'1234567890123456', 
    :currency=>'EUR', 
    :description => 'Een omschrijving', 
    :entrance_code => '1234'
  }
    
  response = gateway.setup_purchase(amount, options)
  if response.success?
    transaction_id = response.transaction['transactionID']
    redirect_url = response.service_url 
  end

Bewaar transaction_id en redirect de klant naar zijn bank via de service_url.

Status Request

De status van de transactie kun je alsvolgt opvragen:

  response = gateway.capture(:transaction_id => transaction_id)
  if response.success?
    # complete transaction
  elsif !response.transaction.nil?
    status  = response.transaction['status']
    # handle 'Open', 'Failure', 'Expired', 'Cancelled'
  else
    # handle error
  end

Dit doe je meteen als de klant terugkomt in de applicatie via de return_url. Indien de transactie dan nog open staat, kun je middels een cron job pollen naar de status van de transactie.

Afhandelen fouten

Indien een request niet lukt kan iDeal een error response terug geven. Het is dan verplicht de consumerMessage aan de klant door te geven. Deze kun je alsvolgt opvragen:

  if !response.success and !response.error.nil?
    error = response.error
    consumerMessage = error['consumerMessage']
  end