Hallo slimmerikken,
Jullie hebben vast meer verstand van PHP-programmeren dan ik. Mijn kennis dáárvan is namelijk zeer beperkt.
Nu wil ik graag mijn ooit functioneren iDeal-betalingsmogelijkheid nieuw leven inblazen.

De PSP (Payment Service Provider) wil echter in de FORM een checksum, die ik ook na lang proberen niet goed krijg. Hij blijft 'checksum error' retourneren.
Wat ik heb gedaan in mijn cgi-bestanden en daarvan dus de ideal.php is het volgende.
Kan iemand dit corrigeren als ik stom bezig ben geweest? Alsjeblieft....

Aan het einde van de php (dus net voor ?> ) heb ik, de SHA1 zo gedeclareerd:

$controle = SHA1('EUR' + '<?php echo $tempgrandtotX100 ?>' + 'MIJN MERCHANT ID' + 'MIJN RETURNURL' + '<?php echo $invoiceNo ?>' + 'MIJN MERCHANT SECRET');
(Met hoofdletters geschreven zijn de dingen die ik heb ingevuld natuurlijk.)

Vervolgens roep ik CONTROLE aan in de FORM voor de betaling:


<form action="https://www.qantanipayments.com/frontend/" method=post>
<INPUT type="hidden" NAME="merchantid" value="MIJN MERCHANT ID " />
<INPUT type="hidden" NAME="key" value="MIJN MERCHANT KEY" />
<INPUT type="hidden" NAME="checksum" value='<?php echo $controle ?>' />
<input type='hidden' name="amount" value='<?php echo $tempgrandtotX100 ?>' />
<INPUT type="hidden" NAME="ordernumber" value='<?php echo $invoiceNo ?>' />
<INPUT type="hidden" NAME="language" VALUE="NL" />
<INPUT type="hidden" NAME="return" VALUE="MIJN RETURNURL" />
<INPUT type="hidden" NAME="currency" VALUE="EUR" />
<INPUT type="hidden" NAME="description" VALUE="Boeken" />
<INPUT type="hidden" NAME="itemNumber1" VALUE="9089730000" />
<INPUT type="hidden" NAME="itemDescription1" VALUE="Boeken" />
<INPUT type="hidden" NAME="itemQuantity1" VALUE="1" />
<INPUT type="hidden" NAME="itemPrice1" value='<?php echo $tempgrandtotX100 ?>' />
<INPUT type="hidden" NAME="validUntil" VALUE="2020-12-31T12:00:00:0000Z" />
<font size="5">
<INPUT type="submit" NAME="submit" VALUE="Verstuur" id="submit" />
</font>
</form>


Ik krijg steeds 'checksum error' als antwoord.

De $tempgrandtotX100 en $invoiceNo komen uit eerdere onderdelen (basket.php) van de bestelprocedure en dat heeft altijd gewerkt, toen ik nog een direct basix iDeal-abonnement had.

Dit soort dingen zijn over het algemeen niet zo 1-2-3 op te lossen, zonder precies te weten hoe die checksum bepaald moet worden.

Ik zie bijvoorbeeld dat er een return url meegegeven moet worden, dan is direct de vraag: moet die worden gecodeerd? En zo ja, hoe? Vaak zal je er bijvoorbeeld een encodeurl overheen moeten halen, soms alleen niet helemaal via de php methode, maar via een RFC standaard. Zonder daarvan de details te kennen is het onbegonnen werk om te proberen het aan de praat te krijgen.
Beste Erwin,
In de eerste plaats mijn dank voor je snelle reactie.
Ik snap het probleem van de returnurl. Naar mijn mening hoeft die niet te worden gecodeerd.
In de documentatie van de PSP staat bijvoorbeeld dit bij wijze van voorbeeld:

SHA1('[currency]' + '[amount]' + '[merchantid]' + '[returnurl]' + '[ordernumber]' + '[merchantsecret]')
We nemen de volgende parameters:
currency = EUR
amount = 19.95
merchantid = 1
returnurl = http://www.mijnwebsite.nl/betaalpagina.php
odernumber = 1000
merchantsecret = 12345
SHA1( 'EUR' + '19.95' + '1' + 'http://www.mijnwebsite.nl/betaalpagina.php'; + '1000' + '12345' )
=
SHA1( 'EUR19.951http://www.mijnwebsite.nl/betaalpagina.php100012345'; )
=
989ab3fefd30104b4002fd53bf5950dfcd69744c

Waarbij de laatste regel natuurlijk de checksum is.

Voor ik uiteindelijk jullie hulp inriep, dacht dat het alleen maar een kwestie van de juiste syntax was.
Sorry als ik je teveel aan het werk zet.
Aristos
Hi SanThe,
Dat helpt helaas niet (zie ook het voorbeelddocument van de PSP).
Krijg alleen maar PARSE ERRORS dan.

Bedankt voor de moeite natuurlijk,
Aristos
elk PHP statement dien je af te sluiten met een puntkomma ( ; ).

<?php echo $tempgrandtotX100 ?>

wordt dan

<?php echo $tempgrandtotX100; ?>
Aristos Bouius op 15/07/2014 14:31:27

Krijg alleen maar PARSE ERRORS dan.


Welke?
@Frank
Een opmerking die ik hier wel vaker langs zie komen, maar dat maakt het nog geen waarheid.

@Aristos
In het voorbeeld staat "amount = 19.95", jouw variabele heet $tempgrandtotX100, doe je het keer 100? Klopt dat dan nog wel?

En verder, heeft de provider wellicht een test omgeving, om te controleren wat de checksum zou moeten zijn?

Erwin,

Misschien heb je gelijk dat in DEZE situatie de ; niet perse noodzakelijk is (ik zou het niet eens weten) maar vermeld er dan ook bij dat als er meer dan één statement tussen de php tags staat dat het dan voor alle regels (behalve de laatste misschien?) wel degelijk noodzakelijk is. En dan denk ik vervolgens: leer en doe het dan gewoon goed en wees consequent.
Consequent is aan het einde van een regel, maar in dit geval is het niet aan het einde van een regel:

<p>Mijn naam is <?php echo $username ?>!</p>

Ok, persoonlijk, maar bovenstaande vind ik toch echt logischer dan dit:

<p>Mijn naam is <?php echo $username; ?>!</p>

je sluit hier de regel namelijk nog niet, dat komt pas na de laatste html tag.

Anyway, je opmerking klopt gewoon niet. Ik kan met je mee gaan dat het voor een specifieke situatie is, maar dan wel dat het voor elke laatste regel voor het sluiten van de php tags is.
@Frank:
Die puntkomma was niet noodzakelijk toen ik hetzelfde script heb gebruikt voor mijn iDealabonnement bij de Postbank. Het heeft altijd perfect gewerkt zo.
Nu lijkt het alleen die checksum die niet werkt (... hopenlijk is het niet meer...)

@Erwin:
Ja, van dat totaalbedrag dat klopt. In het voorafgaande script wordt steeds met $tempgrandtot gewerkt (centen dus), maar om het goede totaalbedrag te krijgen is deze variable $tempgrandtotX100 in het leven geroepen. Heeft altijd perfect gewerkt.
- van een testomgeving voor de checksum weet is niks. Die gegenereerde checksum wordt vergeleken met de checksum die aan de serverkant wordt gemaakt en vergeleken, waarna een TRUE of FALSE wordt gegeven.


@SanThe:
Die PARSE ERROR staat niet gespecificeerd. Alleen maar 'parse error in line 205'

Ik test overigens door een betaling naar de PSP te sturen in de TESTomgeving. Zodra het werkt, kan ik het op LIVE zetten.

Vreselijk bedankt tot nu toe allemaal, hoewel de oplossing er nog niet is.

Aristos

Reageren