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
