Problemen met IDEAL hash

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Donald Boers

Donald Boers

04/10/2015 12:05:33
Quote Anchor link
Ik ben in de laatste face van het intergreren van IDEAL op mijn website. Op zich werkt alles prima maar ik heb problemen met het samenstellen van de hash. Op het moment dat ik de waardes van een of meerdere producten gewoon in de code opneem werkt het prima:

Voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$key          = '7XMUzl18xxxxxxx';
$merchantID   = '0050xxxxx';
$subID        = '0';
$amount       =  0;
$purchaseID   =  1;
$language     = 'nl';
$currency     = 'EUR';
$description  = 'Bestelling via de Van Veldhoven website';
$paymentType  = 'ideal';
$validUntil   = date('Y-m-d\TH:i:s.000\Z', time()+900);

$itemNumber1      = '1';
$itemDescription1 = 'SRDH 2401 Afdruk 10x15';
$itemQuantity1    = '1';
$itemPrice1       = '200';
$itemNumber1      = '2';
$itemDescription1 = 'SRDH 2420 Afdruk 10x15';
$itemQuantity1    = '1';
$itemPrice1       = '200';
$amount           = $itemPrice1 + $itemPrice2;
        
$shastring = "$key$merchantID$subID$amount$purchaseID$paymentType$validUntil"
            . "$itemNumber1$itemDescription1$itemQuantity1$itemPrice1";

$shastring = preg_replace(
    array("/[ \t\n]/", '/&/i', '/</i', '/>/i', '/&quot/i'),
    array( '', '&', '<', '>', '"'),
    $shastring);

$shasign = sha1($shastring);


Wanneer ik echter over daadwerkelijke producten uit de winkelwagen loop en naar IDEAL ga krijg ik de melding dat de digitale handtekening is niet geldig is

Voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$items   = '';

foreach ($cart_items as $index => $value)
{
    $index                   = $index + 1;
    $itemDescription         = $value['option_name'];
    $itemPrice               = str_replace('.', '', $value['option_price']);
    $itemNumber[$index]      = $index;
    $itemDescription[$index] = $value['option_name'];
    $itemQuantity[$index]    = '1';
    $itemPrice[$index]       = str_replace('.', '', $value['option_price']);
    $amount                 += $itemPrice[$index];
    $items                   = "$itemNumber[$index]$itemDescription[$index]$itemQuantity[$index]$itemPrice[$index]";
}
        
$shastring = "$key$merchantID$subID$amount$purchaseID$paymentType$validUntil$items";

$shastring = preg_replace(
    array("/[ \t\n]/", '/&amp;/i', '/&lt;/i', '/&gt;/i', '/&quot/i'),
    array( '', '&', '<', '>', '"'),
    $shastring);

$shasign = sha1($shastring);


In de source kan ik zien dat de waardes ($itemNumber, $itemDescription, $itemQuantity, $itemPrice en $amount) wel juist worden weergegeven.

Ziet iemand wat ik fout doe? Alvast bedankt
 
PHP hulp

PHP hulp

22/12/2024 15:47:54
 
Thomas van den Heuvel

Thomas van den Heuvel

04/10/2015 14:30:44
Quote Anchor link
De routines voor het opbouwen van je $shastring zijn niet hetzelfde. Waarom maak je van regel 12 t/m 20 in het eerste fragment een array ($cart_items) bijvoorbeeld en maak je voor het berekenen van je hash een functie of methode?

Ook begrijp ik niet waar die ingewikkelde preg_replace voor nodig is als je vervolgens alles toch hasht.

Waarschijnlijk gaat het mis omdat je in je eerste fragment je variabelen verkeerd noemt (regel 16 t/m 20, moet dat niet $itemDescription2 etc. zijn?) en vervolgens het bedrag $amount niet klopt ($itemPrice2 is ongedefinieerd).

Maar je kunt eigenlijk niet garanderen dat de opbouw na deze aanpassingen wel goed gaat omdat je simpelweg (qua code) niet dezelfde routine hanteert. Je gebruikt hier twee afzonderlijke (en op dit moment verschillende) stukken code voor...
Gewijzigd op 04/10/2015 14:31:45 door Thomas van den Heuvel
 
Donald Boers

Donald Boers

04/10/2015 15:26:19
Quote Anchor link
Hoi Thomas. Hartelijk dank voor je reactie.. Ik zag dat ik in het statische fragment het een en ander niet goed had gedaan. Vandaar hier nogmaals compleet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
$key          = '7XMUxxxxxxxxxx';
$merchantID   = '0050xxxxxx';
$subID        = '0';
$amount       = 0;
$purchaseID   = 1;
$language       = 'nl';
$currency     = 'EUR';
$description  = 'Bestelling via de Van Veldhoven website';
$paymentType  = 'ideal';
$validUntil   = date('Y-m-d\TH:i:s.000\Z', time()+900);
$urlSuccess   = 'http://www.vanveldhovenfotografie.nl/shop/bestelling_succes/'.$klant_id;
$urlCancel    = 'http://www.vanveldhovenfotografie.nl/shop/bestelling_geannuleerd/'.$klant_id;
$urlError     = 'http://www.vanveldhovenfotografie.nl/shop/bestelling_fout/'.$klant_id;

$itemNumber1      = '1';
$itemDescription1 = 'SRDH 2401 Afdruk 10x15';
$itemQuantity1    = '1';
$itemPrice1       = '200';
$itemNumber2      = '2';
$itemDescription2 = 'SRDH 2420 Afdruk 10x15';
$itemQuantity2    = '1';
$itemPrice2       = '200';
$amount           = $itemPrice1 + $itemPrice2;
        
$shastring = "$key$merchantID$subID$amount$purchaseID$paymentType$validUntil"
            . "$itemNumber1$itemDescription1$itemQuantity1$itemPrice1$itemNumber2$itemDescription2$itemQuantity2$itemPrice2";

$shastring = preg_replace(
    array("/[ \t\n]/", '/&amp;/i', '/&lt;/i', '/&gt;/i', '/&quot/i'),
    array( '', '&', '<', '>', '"'),
    $shastring);

$shasign = sha1($shastring);

<form method="post" action="https://ideal.secure-ing.com/ideal/mpiPayInitIng.do" name="betalings-form">
    <input type="hidden" name="merchantID" value="<?php echo $merchantID; ?>">
    <input type="hidden" name="subID" value="<?php echo $subID; ?>">
    <input type="hidden" name="amount" value="<?php echo $amount; ?>">
    <input type="hidden" name="purchaseID" value="<?php echo $purchaseID; ?>">
    <input type="hidden" name="language" value="<?php echo $language; ?>">
    <input type="hidden" name="currency" value="<?php echo $currency; ?>">
    <input type="hidden" name="description" value="<?php echo $description; ?>">
    <input type="hidden" name="hash" value="<?php echo $shasign; ?>">
    <input type="hidden" name="paymentType" value="<?php echo $paymentType; ?>">
    <input type="hidden" name="validUntil" value="<?php echo $validUntil; ?>">
    <input type="hidden" name="itemNumber1" value="<?php echo $itemNumber1; ?>">
    <input type="hidden" name="itemDescription1" value="<?php echo $itemDescription1; ?>">
    <input type="hidden" name="itemQuantity1" value="<?php echo $itemQuantity1; ?>">
    <input type="hidden" name="itemPrice1" value="<?php echo $itemPrice1; ?>">
    <input type="hidden" name="itemNumber2" value="<?php echo $itemNumber2; ?>">
    <input type="hidden" name="itemDescription2" value="<?php echo $itemDescription2; ?>">
    <input type="hidden" name="itemQuantity2" value="<?php echo $itemQuantity2; ?>">
    <input type="hidden" name="itemPrice2" value="<?php echo $itemPrice2; ?>">          
    <input type="hidden" name="urlSuccess" value="<?php echo $urlSuccess; ?>">
    <input type="hidden" name="urlCancel" value="<?php echo $urlCancel; ?>">
    <input type="hidden" name="urlError" value="<?php echo $urlError; ?>">    
    <input name="betalen-button" type="submit" value="Ideal betaling">
</form>    


Zoals gezegd. Dit werkt. Maar hoe krijg ik dit werkend met values uit de database? Dan heb ik toch een loop nodig om de waardes van de prodcten in het winkelmandje aan de $shastring toe te voegen?

Toevoeging op 04/10/2015 15:40:21:

Thomas van den Heuvel op 04/10/2015 14:30:44:
Ook begrijp ik niet waar die ingewikkelde preg_replace voor nodig is als je vervolgens alles toch hasht.

Dat staat in de IDEAL Basis Handleiding
Gewijzigd op 04/10/2015 15:34:15 door Donald Boers
 
Thomas van den Heuvel

Thomas van den Heuvel

04/10/2015 20:06:19
Quote Anchor link
Oh, stuur je ook al die zut onversleuteld over zodat aan die kant deze hash opnieuw berekend wordt en wordt vergeleken met de hash die jij hebt gestuurd om te kijken of er niet is geknoeid met de bestelling ofzo?

Moet dat trouwens niet $items .= '...' zijn in plaats van $items = '...'? Je overschrijft nu elke iteratie van de loop $items, terwijl alle item-informatie uiteindelijk in $items moet zitten?

Het zou nog steeds makkelijker zijn als je voor de opbouw van de hash één routine gebruikt.
Gewijzigd op 04/10/2015 20:06:39 door Thomas van den Heuvel
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.