Ogone – (SHA-1 IN & SHA-1 OUT)

30/08/2010 | 07:25 | Code

Deze week serieus gevloekt op Ogone. Ze hebben namelijk hun concatenatie van strings aangepast om die SHA-1 IN & SHA-1 OUT hash te maken. Zonder iets van deftige communicatie aan de webdevelopers hebben ze dit op 10 mei 2010 toegepast op alle hun sindsdien nieuw geregistreerde accounts – ik wist allesinds van niets :-) .

De reden waarom ze dit hebben aangepast is voor een betere beveiliging van de verstuurde data. Nu allemaal goed en wel zolang je geen automatisch systeem hebt die Ogone automatisch gaat configureren voor & door klanten en dus die hashes automatisch gaat opbouwen. Laat staan dat er dan nog eens een modulair platform is waar klanten Ogone kunnen activeren waardoor je nog eens een update mag gaan schrijven voor veel websites… nu het is nu zo… genoeg gejankt. Tijd voor de oplossing! Om jullie veel zoekwerk te besparen heb ik eens kort samengevat wat er nu precies gewijzigd is en hoe je dit eenvoudigst kunt gaan oplossen.

SHA-1 IN:

Vroeger:

$sha1In = sha1($orderID.$amount.$currency.$pspid.$YourOwnSecretString);

Nu:

Je neemt alle inputfields die je gebruikt bij het formulier naar Ogone. Zoals onderstaand formulier:

Nogmaals samengevat gaan we dus alles verzamelen die we naar Ogone gaan versturen. Een lijst van parameters die je moet toevoegen aan uw hash kan je hier vinden (zoek naar hoofdstuk 15.1). Om dan definitief uw string te maken gaan we alles concateneren op basis van NAME=value+(sha-1 in passwordkey). Opgepast de name moet uppercase zijn en de parameters moeten alfabetisch toegevoegd worden en parameters met een lege value mogen niet toegevoegd worden!

Als resultaat kom je dan bijvoorbeeld zoiets uit:

ACCEPTURL=http://project/ogone/accept/payment/74MySecretPassWord!!AMOUNT=3600MySecretPassWord!!CANCELURL=http://project/ogone/cancelled/payment/74MySecretPassWord!!CN=Pieter CappelleMySecretPassWord!!CURRENCY=EURMySecretPassWord!!DECLINEURL=http://project/ogone/declined/payment/74MySecretPassWord!!EMAIL=snakehit@gmail.com.MySecretPassWord!!EXCEPTIONURL=http://project/ogone/exception/payment/74MySecretPassWord!!LANGUAGE=nl_NLMySecretPassWord!!ORDERID=74MySecretPassWord!!OWNERADDRESS=Segersstraat 16MySecretPassWord!!OWNERCTY=BelgiëMySecretPassWord!!OWNERTOWN=IzegemMySecretPassWord!!OWNERZIP=8870MySecretPassWord!!PSPID=XXXXXMySecretPassWord!!TITLE=ProjectMySecretPassWord!!TP=http://project/ogoneMySecretPassWord!!

Om dan de SHA-1 string te bekomen de PHP functie sha1() met bovenstaande string aanroepen en dit meesturen naar Ogone in het veld SHASign.

  • Krijg je de foutmelding ‘unknown order/0/s‘ wilt dit zeggen dat je geen SHA-1 string hebt meegestuurd. Wat je dus wel degelijk moet doen…
  • Krijg je de melding ‘unknown order/1/s‘ dan wil dit zeggen dat de SHA-1 IN hash die Ogone gemaakt heeft niet overeenkomt met de hash die jij gemaakt hebt. Er dus ergens iets foutgelopen bij het maken van uw hash.

SHA-1 OUT:

Vroeger:

$sha1In = sha1($_REQUEST['orderID'].$_REQUEST['currency'].$_REQUEST['amount'].$_REQUEST['PM'].$_REQUEST['ACCEPTANCE'].$_REQUEST['STATUS'].$_REQUEST['CARDNO'].$_REQUEST['PAYID'].$_REQUEST['NCERROR'].$_REQUEST['BRAND'].$ogoneFeedbackPassword);

Nu:

Het nieuwe systeem is gebaseerd op hetzelfde systeem als de SHA-1 IN hash. Bij de return van Ogone (dus na de betaling) ontvang je een resum parameters. Die parameters kan je opvragen in de $_REQUEST[] . (Om de parameters terug te krijgen van Ogone is het noodzakelijk dat je in hun control panel gaat gaan aanvinken dat ze na de betaling de parameters moeten terugsturen.) Als resultaat krijg je dan zoiets:

Array
(
    [controller] => ogone
    [action] => accept
    [payment] => 75
    [orderID] => 75
    [currency] => EUR
    [amount] => 36
    [PM] => CreditCard
    [ACCEPTANCE] => test123
    [STATUS] => 5
    [CARDNO] => XXXXXXXXXXXX1111
    [ED] => 0114
    [CN] => Pieter Cappelle
    [TRXDATE] => 08/27/10
    [PAYID] => 8048783
    [NCERROR] => 0
    [BRAND] => VISA
    [IPCTY] => BE
    [CCCTY] => US
    [ECI] => 7
    [CVCCheck] => NO
    [AAVCheck] => NO
    [VC] => NO
    [IP] => 81.82.XXX.220
    [SHASIGN] => 375CB7CCFAC268E049020BC1D105DC0EBC0C5687
    [PHPSESSID] => 418da012a96bc9bbbcc2e289ace555cf
)

Deze parameters moet je dan opnieuw alfabetisch gaan concateneren. Opgepast! Bovenstaande resultaten kunnen verschillend zijn van uw resultaten. Opnieuw ga naar de lijst van parameters die je moet toevoegen aan uw hash. Die lijst kan je hier vinden (zoek naar hoofdstuk 15.2). Deze parameters moeten allemaal toegevoegd worden aan uw hash. Als 2de opmerking – het password dat je hier gebruikt is uw SHA-1 OUT handtekening die je hebt ingegeven bij Ogone.

Als resultaat kom je dan bijvoorbeeld zoiets uit:

AAVCHECK=NOMySecretPassWord!!ACCEPTANCE=test123MySecretPassWord!!AMOUNT=36MySecretPassWord!!BRAND=VISAMySecretPassWord!!CARDNO=XXXXXXXXXXXX1111MySecretPassWord!!CCCTY=USMySecretPassWord!!CN=Pieter CappelleMySecretPassWord!!CURRENCY=EURMySecretPassWord!!CVCCHECK=NOMySecretPassWord!!ECI=7MySecretPassWord!!ED=0114MySecretPassWord!!IP=81.82.194.220MySecretPassWord!!IPCTY=BEMySecretPassWord!!NCERROR=0SecretPassWord!!ORDERID=75MySecretPassWord!!PAYID=8048783MySecretPassWord!!PM=CreditCardMySecretPassWord!!STATUS=5MySecretPassWord!!TRXDATE=08/25/10MySecretPassWord!!VC=NOMySecretPassWord!!

Om dan de SHA-1 string te bekomen de PHP functie sha1() met bovenstaande string aanroepen en dit vergelijken met de verkregen SHASIGN van Ogone. Als deze gelijk zijn is de transactie goed gelukt. Komen deze niet overeen is er een probleem!


Mocht je vragen (of opmerkingen) hebben stel ze gerust :-)


Update (28/12/2010)

In bovenstaande blogpost ontbreekt nog het volgende:  ik ben vergeten te vermelden dat de SHA-sign (dus de SHA-1 IN en SHA-1 OUT) die je genereert in hoofdletters moet worden doorgestuurd. Dus na het aanroepen van de sha1() functie moet je er nog eens strtoupper() bij doen.


Update (21/01/2011)
In de commentaren van dit artikel kan je lezen dat een veelgemaakte fout is om de SHA string niet te laten eindigen op de passwordkey. Je kan dan heel lang zitten zoeken op het probleem zonder dat je het echt ziet. Dus zeker en vast eens checken!


Update (02/09/2011)
1) Nog een vaak voorkomende fout is dat bij de SHA1-OUT enkel en alleen de ingevulde values moeten teruggestuurd worden. Het kan dus gebeuren dat je in uw REQUEST parameters ook lege values hebt. Deze moeten niet toegevoegd worden aan de string. Wel opletten met een getal zoals NUL/0. Dit is niet leeg, dus (not empty) !empty zal niet voldoende zijn voor deze controle!

2) Maak altijd gebruik van de template orderstandard_utf8.asp, dit zorgt ervoor dat alles doorgestuurd wordt in UTF-8. Indien je dit niet gaat dan dit problemen geven bij namen zoals Pierré. Test dus zeker en vast eens uw Ogone implementatie met speciale karakters.

Bouw – Glazen deur

10/08/2010 | 08:05 | Bouw

Voor we ook nog maar enige bouwplannen hadden we al beslist dat we graag een glazen deur in ons huis hadden gehad. Waar konden we beter terecht dan bij Glorieux (waar Veerle haar vader werkt) voor zo’n glazen deur. Na eens binnen springen in hun toonzaal en onze keuze gemaakt te hebben was alles in orde. De deur werd geleverd en geplaatst op 05/07/2010.

Bouw – Sanitair

10/08/2010 | 07:45 | Bouw

Het plaatsen van het sanitair. Montage van de hangwc’s, ophangen van de boiler, ophangen van de radiatoren.

Bouw – Zelfklussen!

9/08/2010 | 08:10 | Bouw

Het is al enkele weken geleden dat ik nog aan het bloggen ben geslagen over de bouw. De reden hiervoor is namelijk dat we verhuisd zijn naar de woning. In een reeks op één volgende blogposts zal ik nog bloggen over de laatste werken tot en met de oplevering ;-) . Enkele weekends voor de oplevering zijn Jo (Veerle haar vader) en ik aan het klussen geslagen in ons huis.

Wat hebben we allemaal gedaan:

  • Plaatsen van de douche in de badkamer
  • Laminaat leggen op de slaapkamers en in de gang boven
  • Plaatsen van het zolderluik
  • De zolder aan de bovenzijde dicht gemaakt met OSB
  • Buiten al het kruid weggedaan (thx Thomas & Fauve & Ma)
  • Bekabeling voorzien voor surround systeem
  • Fiaences geplaatst in het WC beneden
  • De hangwc’s uitbekleed met waterdichte multiplex
  • Ophangen van het badkamermeubel & wc-meubel
  • Plaatsen van alle spotjes in en rondom het huis
  • Leggen van netwerkbekabeling & coaxbekabeling naar alle slaapkamers
  • Graven van de putten voor de nutsvoorziening (thx Wouter)

Redelijk wat dus ;-) – hieronder dus ook enkele foto’s van ons geklus!

Merci aan al diegene die zijn komen helpen! Zonder jullie zou het zeker niet zo goed gelukt zijn! :-)

Feriolo 2010

9/08/2010 | 08:02 | All

Veerle en ik zijn op reis geweest in het verlof. Jep, totaal onverwacht. Niets gepland, niets bekeken – toch zijn we op reis geweest naar Italië. Het is allemaal begonnen met die ene keer in Decathlon. We gingen achter een voetbaltruitje voor mij (voor een komend voetbaltornooi). Bij het naar de kassa gaan stonden de tentjes zo mooi te glimlachen naar ons. We hebben dan ook maar een tentje gekocht. Elk jaar gaan Veerle haar ouders naar een camping in Italië. Snel eventjes gebeld of er nog plaats was en jep. Weg waren we! De wagen vol getjokt met al het materiaal en met een kleine 1000km voor de boeg ‘s nachts om 12uur vertrokken. Gans de nacht gereden en om 10uur zaten we op de camping! Geen file gehad aan de Gotthardtunnel – dus goed kunnen doorrijden.

6 dagen in Feriolo vertoefd. Genoten van het goede weer, veel gegeten en gedronken. Geen enkele regenbui gehad. Ideaal dus om tot rust te komen.

Bij de terugrit redelijk wat file gehad aan de Gotthard tunnel. Kleine 2uur moeten aanschuiven in de hitte. We hebben afgezien, mijn auto heeft afgezien maar we hebben het overleefd! Om 16uur vertrokken in Italië en om 4uur ‘s nachts waren we terug thuis in Izegem. We kunnen er weer volledig tegen aan ;-)

Volgend jaar opnieuw? (maar dan met boot!?)