Tutorial: iDEAL Basis

Deze tutorial/handleiding geeft een wat ruimere kijk op de internet betaalmethode "iDEAL" die wordt aangeboden door verschillende grote banken in Nederland. Bij het schrijven van deze tutorial hebben de volgende banken zich reeds aangesloten bij iDEAL.

Verwacht wordt dat de SNS bank zich ook snel zal aansluiten bij iDEAL.

Alle klanten van de aangesloten banken die gebruik kunnen maken van 'internetbankieren' kunnen ook gebruik maken van iDEAL.

Wat is iDEAL (Basis)

iDEAL is de nieuwe internet betaalmethode van de grootste Nederlandse banken. Het voordeel van iDEAL is dat deze met dezelfde interface werkt als "internetbankieren". Hierdoor denkt men de drempel van het online betalen te verlagen.

iDEAL komt in 3 verschillende versies. De basisversie is het meest interessant als je iDEAL zo veel mogelijk wil integreren in je eigen webshop/winkelwagen systeem. Er worden echter ook 2 uitgebreidere versies geboden waarin o.a. een winkelwagen systeem zit verweven. Omdat er aan deze uitgebreidere iDEAL versies ook 'uitgebreidere prijskaartjes' zitten, behandel ik hier alleen iDEAL basis.

Voor meer (algemene) informatie over iDEAL en de verschillende mogelijkheden verwijs ik je graag door naar de website http://www.ideal.nl of http://www.rabobank.nl/ideal.

Ik heb me verdiept in iDEAL voor een klant die een contract heeft gesloten met de Rabobank. Alle voorbeelden richten zich dan ook op de Rabobank omgeving. De classes en functies zouden met het  aanpassen van enkele URL's in het configuratiebestand moeten werken bij andere banken.

Hoe werkt iDEAL Basis

Na dat je iDEAL hebt geintegreerd op je website, zou voor klanten de 'workflow' als volgt zijn:

  1. Een klant wil een bedrag afrekenen op je website met iDEAL (bijvoorbeeld een product uit je webshop).
  2. De bezoeker kies uit een keuzelijst een iDEAL ondersteunende bank waarbij hij/zij een rekening heeft.
  3. De bestelgegevens worden uitgewisseld met de server van de betreffende bank, en de bezoeker wordt doorgesluist naar de inlogpagina van die bank.
  4. De bezoeker logt in met zijn/haar gegevens.
  5. De bezoeker ziet de bestelgegevens van de website die met de server waren uitgewisselt bij punt 3.
  6. De bezoeker bevestigd de bestelling en wordt door weer terugverwezen naar de oorspronkelijke website.
  7. Je website controleert de status van de betaling bij de bank door wederom te communiceren met de server van de bank. Aan de hand van de status bepaald de website hoe verder te gaan.

Wat kost iDEAL Basis

Verschillende banken bieden betalingen via iDEAL op verschillende manieren aan. Afhankelijk van de bank kost dit zo'n 50 tot 90 cent per transactie. Sommige banken rekenen bovenop de kosten per transactie een vast bedrag per maand. Het is dus noodzaak om goed uit te zoeken wat voor jou website het goedkoopste is.

Voor een klant heb ik via de Rabobank een iDEAL contract gesloten. De voorbeelden zouden (na een juiste configuratie) direct moeten werken binnen de Rabobank testomgeving.

Voorbereiding

Vraag bij je bank een iDEAL account aan. Van de bank krijg je vervolgens een gebruikersnaam, wachtwoord en een 'merchant id' (verkoper id). Met je gebruikersnaam en wachtwoord kun je inloggen op het 'ideal dashboard'. Dit 'dashboard' toont o.a. informatie over de status van jou iDEAL account. De URL van het dashboard van de Rabobank testlocatie is http://idealtest.rabobank.nl.

Note: Er worden in feite 2 accounts voor je klaar gemaakt. 1 op de live-locatie, en 1 op de testlocatie. Zorg er voor dat je alleen op de testlocatie werkt!!

Download de benodigde php classes/scripts van http://www.pholeron.nl/projects/ideal/ideal.zip.

Note: De classes heb ik NIET zelf gemaakt, maar via via verkregen van de Rabobank. Ik heb de classes wél deels aangepast zodat deze makkelijker en veiliger te gebruiken zijn. Ook heb ik pagina's toegevoegd om de functionaliteit van de classes te kunnen weergeven.

Voor je de bestanden upload naar je server moet je nog 2 dingen doen:

  1. Je moet voor jezelf een privatekey/certificaat aanmaken en uploaden op je iDEAL dashboard.
  2. Je moet iDEAL nog configureren door enkele variabelen in "ideal/Settings.php" aan te passen.

M.b.v. je privatekey (1024bit) en je certificaat kan je script zich identificeren bij de server. Hierdoor is de 'veiligheid' van het dataverkeer gewaarborgd. Een certificaat kan aangevraagd worden bij VeriSign (tegen betaling natuurlijk), of zelf gegenereerd worden met openssl. Zie hiervoor een van de vele handleidingen online, bijvoorbeeld 'http://slacksite.com/apache/certificate.html'. Noem je privatekey-bestand "priv.pem" en je certificaat-bestand "cert.cer".

Meer informatie over openssl vind je (ook) op http://www.openssl.org.

Note: Suggesties voor betere (Nederlandstalige) websites m.b.t. het maken van certificaten graag als reactie posten :)

Nu je privatekey en je certificaat zijn gemaakt, moet je deze bestanden plaatsen in de map "ideal/security/". In deze map bevinden zich al enkele certificaten van iDEAL. Deze certificaten zijn o.a. nodig voor het identificeren van/aan de ideal server.

Je certificaat moet je vervolgens ook uploaden in je iDEAL dasboard. Zorg er voor dat je het certificaat upload op de test locatie http://idealtest.rabobank.nl (en vergeet niet deze straks ook op de live locatie http://ideal.rabobank.nl te plaatsen).

Voor de configuratie van iDEAL moeten we nu het bestand "ideal/Settings.php" openen. Vul de volgende gegevens in of vul ze aan:

Upload de iDEAL bestanden naar je webserver. Geef het bestand "ideal/logs/ideal.log" lees- en schrijfrechten. Dit bestand registreert de communicatie tussen het script en de iDEAL server.

Voorbeeld (toelichting)

Ik heb een simpel voorbeeld bijgevoegd om de iDEAL activiteiten te demonstreren. Deze voorbeelden vind je terug in de bestanden "step1.php", "step2.php" en "step3.php". Een werkend voorbeeld vind je op http://www.pholeron.nl/projects/ideal/step1.php.

Step1.php
Deze pagina bevat een formulier waarin de ordergegevens staan. Ook wordt op deze pagina de mogelijkheid geboden om een bank te selecteren die iDEAL ondersteund. Deze 'lijst met banken' wordt opgevraagd van de iDEAL server.

Step2.php
Deze pagina communiceert de transactie met de iDEAL server. Wanneer de transactie wordt geaccepteerd, wordt de bezoeker doorverwezen naar de login-pagina van de geselecteerde bank (In de testomgeving zie je in plaats van de login pagina een simpel 'bevestig transactie' scherm). Als de transactie niet wordt geaccepteerd toont de pagina een foutmelding.

Step3.php
Nadat de transactie is voltooid wordt de bezoeker 'teruggestuurt' naar deze pagina (dit is geconfigureert in het bestand "ideal/Settings.php"). Deze pagina controleert vervolgens de status van de transactie. Indien er geen fouten zijn opgetreden heeft de transactie de status 'success' en krijgt de bezoeker een melding dat de betaling is voltooid en de order verwerkt zal worden. Anders wordt een foutmelding getoond.

Note: Bij het terugsturen van de bezoeker krijgt de pagina de GET variabele 'trxid' mee (transaction id). Via deze parameter kan de bijbehorende bestelling weer worden opgezocht en verder worden verwerkt.

Voorbeeld

Start de pagina 'step1.php' met je browser (Je kunt ook mijn testversie gebruiken op http://www.pholeron.nl/projects/ideal/step1.php).

Random worden vereiste transactie gegevens ingevuld.
Selecteer een bank (in de testomgeving zijn er 2 banken beschikbaar: "Test Issuer" en "Test Issuer 2").
De rest lijkt me voor zich spreken..

Note: De omschrijving wordt afgekapt op 32 krakters.

Verplichte testprocedure

De Rabobank 'eist' van haar iDEAL klanten dat deze een testprocedure uitvoeren. Bij deze testprocedure moeten 6 testen worden uitgevoerd (op de testlocatie!).

Alle overige bedragen geven op de testlocatie standaard als resultaat 'status: SUCCESS'.

Pas als deze test transacties zijn voltooid kan men de 'live locatie' activeren voor gebruik via het live-dashboard op http://ideal.rabobank.nl. Vergeet niet om je certificaat in de live-omgeving te uploaden!

Zodra iDEAL geactiveerd is kan men de ACQUIRERURL in "ideal/Settings.php" aanpassen naar de live omgeving (Voor de Rabobank is dit:ssl://ideal.rabobank.nl:443/ideal/iDeal).

Praktijk

Wil je in je website de betaalmogelijkheid "iDEAL" integreren, zorg dan dat je de 3 stappen goed hebt geintegreerd. Ik heb de code van de voorbeeld pagina's dan ook 'zo leeg mogelijk' gelaten zodat het knip- en plakwerk (hopelijk) zo eenvoudig mogelijk zal zijn ;)

Tot slot

Hier nog een overzichtje van belangrijke links m.b.t. iDEAL:

Een werkend voorbeeld (maakt gebruik van de rabobank testlocatie)
http://www.pholeron.nl/projects/ideal/step1.php

De (door mij) aangepaste iDEAL classes en functies:
http://www.pholeron.nl/projects/ideal/ideal.zip

De officiele (niet aangepaste) iDEAL classes en functies.. gebruik op eigen risico ;)
http://www.pholeron.nl/projects/ideal/ideal.rabobank.zip

Officiele iDEAL documentatie van de Rabobank
http://www.pholeron.nl/projects/ideal/documentation.zip

Algemene iDEAL informatie van de Rabobank
http://www.rabobank.nl/ideal

De iDEAL test-server van de Rabobank:
ssl://idealtest.rabobank.nl:443/ideal/iDeal

De iDEAL test-dashboard van de Rabobank
http://idealtest.rabobank.nl

De Rabobank live-server van iDEAL:
ssl://ideal.rabobank.nl:443/ideal/iDeal

De iDEAL live-dashboard van de Rabobank
http://ideal.rabobank.nl

Informatie over certificaten e.d.
http://www.openssl.org
http://slacksite.com/apache/certificate.html