iDEAL Advanced (ING) implementeren
Op mijn website wil ik graag iDEAL Advanced van ING implementeren. Ik heb daarvoor de beschikbare PHP bestanden gedownload die ik via iDEAL ING overzicht kan downloaden, netjes een certificaat en key aangemaakt, etc. Wanneer ik echter binnen de 'voorbeeld-code' de getIssuers probeer, krijg ik bovenaan de pagina een Response empty melding. Alle gegevens heb ik netjes binnen de config-file ingevuld.
Doe ik iets fout?
Bvd.
http://www.helpmij.nl/forum/showthread.php/906475-iDEAL-Advanced-(ING)-implementeren
Zo voorkomen we dat iemand de moeite neemt voor een antwoord terwijl het op de andere site al gegeven is.
4.4 Foutafhandeling
Indien een fout optreedt in het berichtenverkeer tussen acceptant, acquirer en/of issuer wordt door
de iDEAL Advanced Connector een ander bericht teruggegeven. Om te kijken of er een fout is
opgetreden dient u na het ophalen van een response te controleren of er een fout is opgetreden
door het aanroepen van de volgende functie:
Als er een fout is opgetreden zal ‘true’ teruggegeven worden door de functie IsErrorMessage() en
in het navolgende codeblok kan de fout afgehandeld worden met de volgende constructie:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
if ($response->IsErrorMessage())
{
$errorCode = $response->getErrorCode();
$errorMsg = $response->getErrorMessage();
$consumerMessage = $response->getConsumerMessage();
}
?>
if ($response->IsErrorMessage())
{
$errorCode = $response->getErrorCode();
$errorMsg = $response->getErrorMessage();
$consumerMessage = $response->getConsumerMessage();
}
?>
Heb je dit al geprobeerd?
Je moet dan natuurlijk wel even deze variabelen echo'en om ze te kunnen lezen
Code (php)
Gewijzigd op 07/12/2016 22:28:39 door Frank Nietbelangrijk
Serialization:Response was empty
Notice: Undefined variable: response in /var/www/vhosts/domein.nl/httpdocs/www/ideal/getIssuerList.php on line 81
Fatal error: Call to a member function IsErrorMessage() on null in /var/www/vhosts/domein.nl/httpdocs/www/ideal/getIssuerList.php on line 81
Hieronder de volledige code van dit bestand:
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
use iDEALConnector\iDEALConnector;
use iDEALConnector\Exceptions\ValidationException;
use iDEALConnector\Exceptions\SecurityException;
use iDEALConnector\Exceptions\SerializationException;
use iDEALConnector\Configuration\DefaultConfiguration;
use iDEALConnector\Exceptions\iDEALException;
use iDEALConnector\Entities\DirectoryResponse;
date_default_timezone_set('UTC');
require_once("Connector/iDEALConnector.php");
$config = new DefaultConfiguration("Connector/config.conf");
$errorCode = 0;
$errorMsg = "";
$consumerMessage = "";
$issuerList = "";
$acquirerID = "";
$responseDatetime = null;
$actionType = "";
if (isset($_POST["submitted"]))
$actionType = $_POST["submitted"];
if ($actionType == "Get Issuers"){
try
{
$iDEALConnector = iDEALConnector::getDefaultInstance("Connector/config.conf");
$response = $iDEALConnector->getIssuers();
/* @var $response DirectoryResponse*/
foreach ($response->getCountries() as $country)
{
$issuerList .= "<optgroup label=\"" . $country->getCountryNames() . "\">";
foreach ($country->getIssuers() as $issuer) {
$issuerList .= "<option value=\"" . $issuer->getId() . "\">"
. $issuer->getName() . "</option>";
}
$issuerList .= "</optgroup>";
$acquirerID = $response->getAcquirerID();
$responseDatetime = $response->getDirectoryDate();
}
}
catch (SerializationException $ex)
{
echo '<b style="color:red">Serialization:'.$ex->getMessage().'</b>';
}
catch (SecurityException $ex)
{
echo '<b style="color:red">Security:'.$ex->getMessage().'</b>';
}
catch(ValidationException $ex)
{
echo '<b style="color:red">Validation:'.$ex->getMessage().'</b>';
}
catch (iDEALException $ex)
{
$errorCode = $ex->getErrorCode();
$consumerMessage = $ex->getConsumerMessage();
$errorMsg = $ex->getMessage();
echo $ex->getErrorCode()." - ".$ex->getMessage();
}
catch (Exception $ex)
{
echo '<b style="color:red">Exception:'.$ex->getMessage().'</b>';
}
if ($response->IsErrorMessage())
{
$errorCode = $response->getErrorCode();
$errorMsg = $response->getErrorMessage();
$consumerMessage = $response->getConsumerMessage();
echo $errorMsg . '<br>' . $consumerMessage;
exit;
}
}
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<style>
.center {
text-align: center;
}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>IAC-PHP - Function: Get Issuers</title>
<script type="text/javascript">
var BodyOnLoad = function(){
var select = document.getElementById("IssuerIDs");
select.onchange = function () {
document.getElementById("issuerId").value = select.value;
};
document.getElementById("issuerId").value = select.value;
}
</script>
</head>
<body onload="BodyOnLoad()">
<table border="0" width="100%">
<tbody>
<tr>
<td width="120"><a href="index.php"><img src="./icons/ideal_logo.gif" alt=""></a></td>
<td><span style="font: bold 24pt arial">Advanced Connector - PHP</span><br>
<span style="font: 18pt arial">**Test Page**</span></td>
</tr>
</tbody>
</table>
<table class="box" width="100%">
<tbody>
<tr>
<td width="200"><i style="text-decoration: underline;">Function:</i></td>
<td>getIssuers</td>
</tr>
</tbody>
</table>
<br>
<table class="box" width="100%">
<tbody>
<tr>
<td colspan="2"><i style="text-decoration: underline;">Function parameters:</i></td>
</tr>
<tr>
<td colspan="2">(none)</td>
</tr>
</tbody>
</table>
<br>
<table class="box" width="100%">
<tbody>
<tr>
<td colspan="2"><i style="text-decoration: underline;">Configuration parameters:</i></td>
</tr>
<tr>
<td width="200">Merchant ID:</td>
<td><?php echo $config->getMerchantID() ?>
</td>
</tr>
<tr>
<td width="200">Sub ID:</td>
<td><?php echo $config->getSubID() ?>
</td>
</tr>
<tr>
<td width="200">Acquirer URL:</td>
<td><?php echo $config->getAcquirerDirectoryURL(); ?>
</td>
</tr>
</tbody>
</table>
<br>
<table class="box" width="100%">
<tbody>
<tr>
<td style="margin:0;padding:0">
<form class="center" method="post">
<input type="submit" name="submitted" value="Get Issuers">
</form>
</td>
</tr>
</tbody>
</table>
<br>
<table class="box" width="100%">
<tbody>
<tr>
<td colspan="2"><i style="text-decoration: underline;">Result:</i></td>
</tr>
<?php if($errorCode != "") { ?>
<tr>
<td width="200">Error Code</td><td><?php echo $errorCode; ?></td>
</tr>
<tr>
<td>Error Message</td><td><?php echo $errorMsg; ?></td>
</tr>
<tr>
<td>Consumer Message</td><td><?php echo $consumerMessage; ?></td>
</tr>
<?php } else { ?>
<tr>
<td width="200">DateTimeStamp:</td>
<td><?php if (!is_null($responseDatetime)) echo $responseDatetime->format('Y-m-d H:i:s'); ?></td>
</tr>
<tr>
<td width="200">Issuer List:</td>
<td><label><select id="IssuerIDs"><?php echo $issuerList; ?></select></label></td>
</tr>
<?php } ?>
</tbody>
</table>
<br>
<table class="box" width="100%">
<tbody>
<tr>
<td style="margin:0;padding:0">
<form class="center" method="post" action="./requestTransaction.php">
<input type="hidden" value="RANDOM28976" id="issuerId" name="issuerId" />
<input id="transactionRequest" type="submit" name="submitted"
value="Transaction Request" <?php if ($issuerList == "") { ?>
disabled="disabled" <?php } ?>>
</form>
</td>
</tr>
</tbody>
</table>
<br>
</body>
</html>
error_reporting(E_ALL);
ini_set('display_errors', 'On');
use iDEALConnector\iDEALConnector;
use iDEALConnector\Exceptions\ValidationException;
use iDEALConnector\Exceptions\SecurityException;
use iDEALConnector\Exceptions\SerializationException;
use iDEALConnector\Configuration\DefaultConfiguration;
use iDEALConnector\Exceptions\iDEALException;
use iDEALConnector\Entities\DirectoryResponse;
date_default_timezone_set('UTC');
require_once("Connector/iDEALConnector.php");
$config = new DefaultConfiguration("Connector/config.conf");
$errorCode = 0;
$errorMsg = "";
$consumerMessage = "";
$issuerList = "";
$acquirerID = "";
$responseDatetime = null;
$actionType = "";
if (isset($_POST["submitted"]))
$actionType = $_POST["submitted"];
if ($actionType == "Get Issuers"){
try
{
$iDEALConnector = iDEALConnector::getDefaultInstance("Connector/config.conf");
$response = $iDEALConnector->getIssuers();
/* @var $response DirectoryResponse*/
foreach ($response->getCountries() as $country)
{
$issuerList .= "<optgroup label=\"" . $country->getCountryNames() . "\">";
foreach ($country->getIssuers() as $issuer) {
$issuerList .= "<option value=\"" . $issuer->getId() . "\">"
. $issuer->getName() . "</option>";
}
$issuerList .= "</optgroup>";
$acquirerID = $response->getAcquirerID();
$responseDatetime = $response->getDirectoryDate();
}
}
catch (SerializationException $ex)
{
echo '<b style="color:red">Serialization:'.$ex->getMessage().'</b>';
}
catch (SecurityException $ex)
{
echo '<b style="color:red">Security:'.$ex->getMessage().'</b>';
}
catch(ValidationException $ex)
{
echo '<b style="color:red">Validation:'.$ex->getMessage().'</b>';
}
catch (iDEALException $ex)
{
$errorCode = $ex->getErrorCode();
$consumerMessage = $ex->getConsumerMessage();
$errorMsg = $ex->getMessage();
echo $ex->getErrorCode()." - ".$ex->getMessage();
}
catch (Exception $ex)
{
echo '<b style="color:red">Exception:'.$ex->getMessage().'</b>';
}
if ($response->IsErrorMessage())
{
$errorCode = $response->getErrorCode();
$errorMsg = $response->getErrorMessage();
$consumerMessage = $response->getConsumerMessage();
echo $errorMsg . '<br>' . $consumerMessage;
exit;
}
}
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<style>
.center {
text-align: center;
}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>IAC-PHP - Function: Get Issuers</title>
<script type="text/javascript">
var BodyOnLoad = function(){
var select = document.getElementById("IssuerIDs");
select.onchange = function () {
document.getElementById("issuerId").value = select.value;
};
document.getElementById("issuerId").value = select.value;
}
</script>
</head>
<body onload="BodyOnLoad()">
<table border="0" width="100%">
<tbody>
<tr>
<td width="120"><a href="index.php"><img src="./icons/ideal_logo.gif" alt=""></a></td>
<td><span style="font: bold 24pt arial">Advanced Connector - PHP</span><br>
<span style="font: 18pt arial">**Test Page**</span></td>
</tr>
</tbody>
</table>
<table class="box" width="100%">
<tbody>
<tr>
<td width="200"><i style="text-decoration: underline;">Function:</i></td>
<td>getIssuers</td>
</tr>
</tbody>
</table>
<br>
<table class="box" width="100%">
<tbody>
<tr>
<td colspan="2"><i style="text-decoration: underline;">Function parameters:</i></td>
</tr>
<tr>
<td colspan="2">(none)</td>
</tr>
</tbody>
</table>
<br>
<table class="box" width="100%">
<tbody>
<tr>
<td colspan="2"><i style="text-decoration: underline;">Configuration parameters:</i></td>
</tr>
<tr>
<td width="200">Merchant ID:</td>
<td><?php echo $config->getMerchantID() ?>
</td>
</tr>
<tr>
<td width="200">Sub ID:</td>
<td><?php echo $config->getSubID() ?>
</td>
</tr>
<tr>
<td width="200">Acquirer URL:</td>
<td><?php echo $config->getAcquirerDirectoryURL(); ?>
</td>
</tr>
</tbody>
</table>
<br>
<table class="box" width="100%">
<tbody>
<tr>
<td style="margin:0;padding:0">
<form class="center" method="post">
<input type="submit" name="submitted" value="Get Issuers">
</form>
</td>
</tr>
</tbody>
</table>
<br>
<table class="box" width="100%">
<tbody>
<tr>
<td colspan="2"><i style="text-decoration: underline;">Result:</i></td>
</tr>
<?php if($errorCode != "") { ?>
<tr>
<td width="200">Error Code</td><td><?php echo $errorCode; ?></td>
</tr>
<tr>
<td>Error Message</td><td><?php echo $errorMsg; ?></td>
</tr>
<tr>
<td>Consumer Message</td><td><?php echo $consumerMessage; ?></td>
</tr>
<?php } else { ?>
<tr>
<td width="200">DateTimeStamp:</td>
<td><?php if (!is_null($responseDatetime)) echo $responseDatetime->format('Y-m-d H:i:s'); ?></td>
</tr>
<tr>
<td width="200">Issuer List:</td>
<td><label><select id="IssuerIDs"><?php echo $issuerList; ?></select></label></td>
</tr>
<?php } ?>
</tbody>
</table>
<br>
<table class="box" width="100%">
<tbody>
<tr>
<td style="margin:0;padding:0">
<form class="center" method="post" action="./requestTransaction.php">
<input type="hidden" value="RANDOM28976" id="issuerId" name="issuerId" />
<input id="transactionRequest" type="submit" name="submitted"
value="Transaction Request" <?php if ($issuerList == "") { ?>
disabled="disabled" <?php } ?>>
</form>
</td>
</tr>
</tbody>
</table>
<br>
</body>
</html>
Ward:
[code][/code]-tags toegevoegd.
Gewijzigd op 08/12/2016 10:25:05 door Ward van der Put
>> netjes een certificaat en key aangemaakt
Vermoedelijk wringt hem daar de schoen: draait je site op SSL of heb je zelf een self-signed certificaat aangemaakt met OpenSSL?
Ward van der Put op 08/12/2016 10:44:20:
Als de response empty of null is, wordt er waarschijnlijk geen verbinding geopend.
>> netjes een certificaat en key aangemaakt
Vermoedelijk wringt hem daar de schoen: draait je site op SSL of heb je zelf een self-signed certificaat aangemaakt met OpenSSL?
>> netjes een certificaat en key aangemaakt
Vermoedelijk wringt hem daar de schoen: draait je site op SSL of heb je zelf een self-signed certificaat aangemaakt met OpenSSL?
Dat zou een goede zijn, zeg! Ik heb een SSL certificaat inderdaad.
Moet ik die gebruiken? ;p
Voor iDeal is SSL gewoon verplicht.
Daarop valt voor eenvoudige iDEAL-toepassingen wel wat af te dingen. Het ophalen van de lijst met issuers is bijvoorbeeld geen functionaliteit waarvoor een verificatie van jouw identiteit iets toevoegt. Kijk maar:
https://www.targetpay.com/ideal/getissuers.php?format=xml
Ik weet niet welke functionaliteit iDEAL Advanced van ING biedt (daar moet ik dus een slag om de arm houden), maar je zou de peer/host-controle kunnen halveren: jij wilt wel zeker weten dat je verbinding hebt met de server van de bank, maar je hoeft omgekeerd niet voor alles met je eigen certificaat te wapperen.