Problemen met IDEAL hash
Voorbeeld:
Code (php)
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
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', '/"/i'),
array( '', '&', '<', '>', '"'),
$shastring);
$shasign = sha1($shastring);
$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', '/"/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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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]/", '/&/i', '/</i', '/>/i', '/"/i'),
array( '', '&', '<', '>', '"'),
$shastring);
$shasign = sha1($shastring);
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]/", '/&/i', '/</i', '/>/i', '/"/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
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
Code (php)
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
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]/", '/&/i', '/</i', '/>/i', '/"/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>
$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]/", '/&/i', '/</i', '/>/i', '/"/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
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