IDEAL loop maken
Ik heb 'enig' ervaring met PHP maar totaal geen ervaring met IDEAL.
Ik heb nu al 5 forums geraadpleegt maar niemand die mij eventueel via MSN kan assisteren of echt daadwerkelijk kan helpen op MSN helaas.
Ik hoop dat hier iemand mij kan helpen, het zij op dit forum hetzij via MSN wat natuurlijk helemaal super zou zijn.
Hieronder de 'posts' van de andere forums zodat jullie alles even kunnen lezen.
------------------------------------------------------
Beste mensen.
Ben nu al enkele dagen bezig met het fixen van mijn ideal wat mij tot op
heden helaas nog niet gelukt is. Ik heb contact gehad met de klantenservice
en die vertellen mij het volgende:
Waarschijnlijk gaat het mis doordat sommige klanten niet terugkeren op uw website. (Men klikt direct na de melding succesvolle betaling op ‘het rode kruisje’). Standaard wordt bij terugkeer de merchanturl aan geroepen met uw statreq call. Als men niet terugkeert, dan wordt deze url ook niet aangeroepen.
-------------------------------------------------------
Om dit te ondervangen kunt u een loop inbouwen in uw website, dat zodra een klant de bank gekozen (transreq.php) heeft u een loop start om na 15 minuten de statreq.php aan te roepen. Is de XML <status> nog steeds OPEN, dan dient de loop na 15 minuten opnieuw statreq aan te roepen, net zo lang tot een andere status ontvangt. In dit geval moet de loop stoppen. U kunt nu checken op status is SUCCES of andere status (mislukt zoals CANCELED, EXPIRED, FAILURE etc.) en verder verwerken in uw backoffice applicatie.
Om flooding te voorkomen adviseren we een loop voor max 2 dagen, het eerste uur om het kwartier en de resterende 47 om het uur. Als er dan nog geen status bekend is, dient u contact met ons op te nemen om uit te zoeken wat er aan de hand is.
-------------------------------------------------------
Deze loop gaat mij helaas te buiten en is nog net iets te moeilijk voor mijn 'beginners' PHP kennis.
Zou iemand mij svp hiermee kunnen helpen? Onderstaand zal ik de code van de pagina plakken.
-------------------------------------------------------
transreq.php
-------------------------------------------------------
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Mijn Site ®</title>
<link rel='stylesheet' type='text/css' href='http://www.mijnsite.nl/css/stijl.css' />
<script language="JavaScript" type="text/JavaScript">
function EnsureLoadedInFrameset() {
if (parent.frames.length==0 || parent.frames[0].name !="ifriDEAL") {
// als pagina niet in iframe wordt geopend > direct naar homepage
parent.location.replace('http://www.mijnsite.nl/');
}
}
</script>
</head>
<body onLoad="EnsureLoadedInFrameset()">
<strong>Er is een fout opgetreden:</strong>
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
59
60
61
62
63
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
59
60
61
62
63
<?php
//Show errors so we know if any PHP error occurs
ini_set('display_errors',1);
error_reporting(E_ALL & ~E_NOTICE);
//include needed files
require_once(dirname(__FILE__) . "/ThinMPI.php");
require_once(dirname(__FILE__) . "/AcquirerTrxRequest.php");
// geposte waarden uitlezen > bedrag * 100 om decimalen te verwijderen
$orderNumber = $_POST['ordernumber'];
$amount = $_POST['totaal'];
$amount *= 100;
// geselecteerde bank
$issuerID = $_POST['issuerID'];
if($issuerID==0) {
// er is geen bank geselecteerd > foutmelding tonen
print ("Kies uw bank uit de lijst om met iDEAL te betalen<br /><br /><input type='button' value='terug' onClick='history.go(-1);' class='button' />");
exit();
}
//Create TransactionRequest
$data = & new AcquirerTrxRequest();
//Set parameters for TransactionRequest
$data -> setIssuerID($issuerID);
$data -> setPurchaseID( $orderNumber );
$data -> setAmount($amount );
//Create ThinMPI instance
$rule = new ThinMPI();
$result = new AcquirerTrxResponse();
//Process Request
$result = $rule->ProcessRequest( $data );
if($result->isOK()) {
// transactionID opslaan in database
require ("../testen/include.php");
$transactionID = $result->getTransactionID();
$sql = "UPDATE tblbestellingen SET transactionid = '$transactionID' WHERE code = '$orderNumber'";
SaveRecord ($sql);
//Get IssuerURL en decode it
$ISSURL = $result->getIssuerAuthenticationURL();
$ISSURL = html_entity_decode($ISSURL);
//Javascript will open a new window so the user will stay on the website
echo "<script type=\"text/javascript\"> window.open('http://www.mijnsite.nl') </script>";
//header("Location: $ISSURL");
echo "<script type=\"text/javascript\"> window.location='".$ISSURL."' </script>";
exit();
}
else
{
//TransactionRequest failed, inform the consumer
print ("Er is helaas iets misgegaan. Foutmelding van iDEAL:<br />");
$Msg = $result->getErrorMessage();
print ("$Msg<br />");
}
?>
//Show errors so we know if any PHP error occurs
ini_set('display_errors',1);
error_reporting(E_ALL & ~E_NOTICE);
//include needed files
require_once(dirname(__FILE__) . "/ThinMPI.php");
require_once(dirname(__FILE__) . "/AcquirerTrxRequest.php");
// geposte waarden uitlezen > bedrag * 100 om decimalen te verwijderen
$orderNumber = $_POST['ordernumber'];
$amount = $_POST['totaal'];
$amount *= 100;
// geselecteerde bank
$issuerID = $_POST['issuerID'];
if($issuerID==0) {
// er is geen bank geselecteerd > foutmelding tonen
print ("Kies uw bank uit de lijst om met iDEAL te betalen<br /><br /><input type='button' value='terug' onClick='history.go(-1);' class='button' />");
exit();
}
//Create TransactionRequest
$data = & new AcquirerTrxRequest();
//Set parameters for TransactionRequest
$data -> setIssuerID($issuerID);
$data -> setPurchaseID( $orderNumber );
$data -> setAmount($amount );
//Create ThinMPI instance
$rule = new ThinMPI();
$result = new AcquirerTrxResponse();
//Process Request
$result = $rule->ProcessRequest( $data );
if($result->isOK()) {
// transactionID opslaan in database
require ("../testen/include.php");
$transactionID = $result->getTransactionID();
$sql = "UPDATE tblbestellingen SET transactionid = '$transactionID' WHERE code = '$orderNumber'";
SaveRecord ($sql);
//Get IssuerURL en decode it
$ISSURL = $result->getIssuerAuthenticationURL();
$ISSURL = html_entity_decode($ISSURL);
//Javascript will open a new window so the user will stay on the website
echo "<script type=\"text/javascript\"> window.open('http://www.mijnsite.nl') </script>";
//header("Location: $ISSURL");
echo "<script type=\"text/javascript\"> window.location='".$ISSURL."' </script>";
exit();
}
else
{
//TransactionRequest failed, inform the consumer
print ("Er is helaas iets misgegaan. Foutmelding van iDEAL:<br />");
$Msg = $result->getErrorMessage();
print ("$Msg<br />");
}
?>
</body>
</html>
------------------------------------------------------
niemand een idee?
heb ergens deze reactie gehad:
Wat ze dus bedoelen is dat je de status moet afvangen. Dat kan bijvoorbeeld door een loop te maken. Dit kan ook door een cronjob die je elke x aantal minuten laat draaien.
Zet in je transReq.php (Op de plaats waar je het in je database zet) een extra query die de huidige tijd + 15 minuten doet. Zo krijg je de uiterlijke tijd dat de request voldaan moet zijn. Met de cronjob bekijk je dus of de huidige tijd gelijk of na de tijd in de db ligt. Is dit na de tijd in de db verwijderen je het request weer uit je database.
Iemand die mij een voorbeeldje kan geven als dat niet te veel moeite is?
snap namelijk echt niet hoe ik dit moet maken...
ik heb totaal GEEN ervaring met cronjobs en
mijn kennis in PHP is nog niet echt groot.
Ik moet dus een variable er tussen zetten en deze moet ik
dus ook in de MYSQL database stoppen?
dus na het volgende:
// transactionID opslaan in database
require ("../testen/include.php");
$transactionID = $result->getTransactionID();
$sql = "UPDATE tblbestellingen SET transactionid = '$transactionID' WHERE code = '$orderNumber'";
SaveRecord ($sql);
moet ik doen (denk ik):
en dan in de SQL zetten en dan moet de cronjob dus kijken van is die tijd al overschreden? zo ja dan.... zo nee dan niks ?
------------------------------------------------------
Hopelijk dat iemnad mij hiermee verder kan helpen, zou super zijn.
Alvast hartstikken bedankt voor elk komende reactie, tip of wat dan ook!
Is het niet handig om gewoon 1x per dag (snachts ofzo) te checken of de transacties gelukt zijn (waarvan je dus geen status binnen heb gekregen)? If not -> volgende dag weer problemen, weer niet -> status mislukt.
hey super! die had ik niet gevonden helaas in de search, super bedant Robert ik ga meteen eens kijken!
het probleem was namelijk:
na betaling sluit de pagina.
wat ik wil is ipv sluiten terug naar de website van mij zelf.
in mijn ogen kan dit NIET omdat:
op het moment van betaling je op de server van de bank zit...
www.mijnbank.nl?blablabla
dus daar heb ik toch geen invloed op of wel!?
Bumpen:
Twee of meer keer achter elkaar in een topic posten heet bumpen.
Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de knop om je tekst aan te passen.
Alvast bedankt voor je medewerking...
och mijn excuses niet eens in de gaten gehad sorry, zal er voortaan beter op letten Danny.