26
jul

voorbereidingen iDeal Basic

Voordat jouw iDeal account (of dat van je klant) wordt geactiveerd om “in het echie” betalingen te ontvangen, zijn er een aantal stappen die je moet volgen. Onderstaand verhaal gaat uit van iDeal Basic als betaalmodule en PHP als programmeertaal.

1. sleutel

Log in op de iDeal produktie omgeving (dashboard) en upload jouw geheime sleutel. Meestal staat er al een geheime sleutel klaar (b.v. onder de tab “Configuratie”) en hoef je alleen op de “Upload”-button te drukken. Vervolgens zie je een groen vinkje verschijnen.

2. notificatie

Hier kun je ervoor kiezen om de notificaties van de betalingen via email of via XML te ontvangen. Ontvangen via XML heeft zo zijn voordelen. Lees daarom ook de iDeal XML post.

Je kunt hier ook je de URL’s opgeven waar bezoekers terecht moeten komen na een transactie. Dat betekent dat ze in ieder geval op de knop “naar winkel” moeten drukken. Wat gebeurt er als dat niet doen? Ook hierover meer in de iDeal XML post.

Afhankelijk van het resultaat komen ze vervolgens uit bij de hier opgegeven success URL, fout URL of annuleer URL. Je kunt deze ook in je code definiëren. Kies je daarvoor, dan worden de URL’s in je dashboard genegeerd.

Je kunt voor de 3 verschillende resultaten een en dezelfde URL gebruiken, maar met een verschillende querystring (b.v. “betalingsresultaat.php?result=success”) om dan vervolgens in je code deze querystring uit te lezen.

3. herhalen

Herhaal bovenstaande 2 stappen in de test omgeving.

4. testbetalingen

De bank verwacht dat je vervolgens 7 proefbetalingen in de testomgeving doet, van 1 euro tot en met 7 euro. Hiermee boots je 7 verschillende situaties na:

  1. Success: de betaling is helemaal goed verlopen, je komt terecht op de success URL
  2. Cancelled: de betaling is door de bezoeker afgebroken, je komt terecht op de annuleer URL
  3. Expired: de betaling is verlopen, je komt terecht op de fout URL
  4. Open: de betaling staat nog open, je komt terecht op de fout URL
  5. Failure: de betaling is mislukt door bijvoorbeeld te weinig saldo, je komt terecht op de fout URL
  6. Directory Request: de lijst van gelieerde banken wordt opgehaald. Eigenlijk vindt deze test al plaats zodra je de testbetaling van 1 euro hebt gedaan.
  7. Format error: de data of het formaat daarvan is niet goed, je kunt nu niet op de knop “naar winkel” drukken en blijft in de iDeal betaalmodule

Wat de bovenstaande termen precies inhouden is op dit moment niet zo heel belangrijk. Je moet je derhalve niet af laten schrikken door waarschuwingen (in rood) tijdens het uitvoeren van de testbetalingen. Dat is juist de bedoeling.

Hoe voer je deze 7 testcases uit? Download daarvoor dit PHP-script. Dit script is getest met zeven succesvol verlopen testtransacties bij de ING bank. Er zijn 3 variabelen in het script, die je moet aanpassen aan jouw eigen situatie:

$bankUrl: dit is de URL van jouw (klants) iDeal Basic test dashboard
$key: de geheime sleutel die je in stap 3 hebt aangemaakt (d.w.z. de TEST sleutel!)
$merchantID: dit heb je van de bank (of van je klant) gekregen

Upload nu het script naar je server en roep het op in je browser. Vul het bedrag ‘1′ in en druk op de submit-button. Je ziet een overzicht van hetgeen je gaat versturen. Druk nogmaals op de submit-button. Nu volgt een iDeal-scherm. Kies hier voor “Issuer Simulator” bij de optie “Selecteer uw bank”.

Druk vervolgens op “Betalen”. Tijdens elke test krijg je een melding “Controleer uw merchantReturnURL“. Dit kun je negeren door op “Bevestigen” te drukken. Uiteindelijk krijg je de melding dat de betaling successvol is en druk je op de knop “naar winkel”.

Herhaal deze procedure voor de bedragen 2, 3, 4, 5 en 7. In theorie mag je het bedrag 6 (de Directory Request-test) overslaan, omdat die al plaatsvindt zodra je de eerste test (van 1 euro) doet. Het kan echter geen kwaad om ook de betaling van 6 euro te doen.

5. controle

Je kunt nu in de test omgeving kijken of de 7 tests zijn geslaagd. Vervolgens is het een kwestie van afwachten tot de test omgeving gesynchroniseerd wordt met de produktie omgeving. Dat duurt even. Zodra in het test dashboard de tab “Activering” grijs is geworden (niet meer aanklikbaar), ben je klaar om echte betalingen te ontvangen.

26
jul

xml notificatie iDeal Basic

Zodra er via iDeal Basic afgerekend gaat worden, verlaat de bezoeker jouw website om naar de iDeal website van de aangesloten bank te gaan. Jij wilt uiteraard het resultaat van de betaling in combinatie met het juiste ordernummer in de database terugzien, om te weten of je deze klant daadwerkelijk moet gaan leveren. Hieronder staan 2 manieren om dit voor elkaar te krijgen (uitgaande van PHP als programmeertaal).

sessie

Je kunt het ordernummer in een sessie zetten en de status van de betaling uitlezen via de return URL die je in het iDeal Dashboard OF in je code hebt opgegeven. Als je voor je success URL, je fout URL en je annuleer URL dezelfde pagina gebruikt, maar met een verschillende querystring, dan gebruik je deze querystring in combinatie met de sessie. Voorbeeld:

  • Je maakt een uniek ordernummer (van bijv. 12 karakters) aan:
    $_SESSION["ordernumber"] = substr($GLOBALS["order_prefix"].mt_rand(),0,12);
  • Dit stuur je mee naar iDeal als (verplicht!) hidden veld:
    <input type="hidden" name="purchaseID" value="<echo $_SESSION["ordernumber"]; ?>”>
  • De return URL’s die je hebt opgegeven zijn bijvoorbeeld:
    idealbetaling.php?result=success“, “idealbetaling.php?result=failure” en “idealbetaling.php?result=cancelled
  • In het script idealbetaling.php lees je uiteindelijk $_SESSION["ordernumber"] in combinatie met $_GET["result"] uit, om daarmee je database te updaten

Er zijn 2 absolute nadelen aan deze methode:

  • sessies kennen timeouts: als de klant besluit zijn bestelling pas af te rekenen, nadat hij een heel lange lunchpauze heeft gehad, dan is de inhoud van $_SESSION["ordernumber"] leeg.
  • als de klant na de afronding van zijn betaling NIET op de knop “Naar winkel” drukt, maar zijn browser afsluit, dan komt hij niet op de return URL terecht.

xml notificatie

Een nettere manier om het ordernummer (oftwel: purchaseID) te vangen is via xml notificatie. iDeal stuurt een XML bericht naar een door jouw opgegeven pagina. In dit bericht staan zowel het ordernummer als het resultaat van de betaling. Helaas kunnen iDeal helpdesken je niet altijd wat een dergelijke bericht inhoudt.

Na lang zoeken, vond ik uiteindelijk een pagina op Whelp.nl van Theo Bakker, die mij een heel stuk op weg heeft geholpen.

  • Download dit bestand, pas het aan met de juiste database verbinding en upload het naar jouw webserver.
  • Login op het iDeal Dashboard en geef onder de “Configuratie”-tab aan dat je notificatie via XML moet plaatsvinden. In het veld “notificatie URL” verwijs je naar het script dat je zojuist hebt geupload.
  • Bij elke betaling die gedaan wordt, stuurt iDeal nu een ruw XML bericht naar de notificatie URL, die daar automatisch de status en het purchaseID uitpeutert en inleest in jouw database.

Het script is in een live situatie getest. Mocht je problemen tegenkomen, laat het even weten.