Hoi allemaal,

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.
Ik citeer uit de handleiding:

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:

<?php
if (response->IsErrorMessage())
{
...
}
?>
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:
<?php
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
<?php
if ($response->IsErrorMessage())
{
$errorCode = $response->getErrorCode();
$errorMsg = $response->getErrorMessage();
$consumerMessage = $response->getConsumerMessage();

echo $errorMsg . '<br>' . $consumerMessage;
exit;
}
?>
Wanneer ik dat stukje code plak in het getIssuerlist.php bestand (uit de illustratiecode van ING), krijg ik het volgende resultaat:
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:

<?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>


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?
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?


Dat zou een goede zijn, zeg! Ik heb een SSL certificaat inderdaad.
Moet ik die gebruiken? ;p
Voor iDeal is SSL gewoon verplicht.
Ja, eigenlijk moet je je officiële SSL-certificaat gebruiken, want daarmee bevestigt een trusted third party, de Certificate Authority (CA): dit is de server van Claudia. Met een self-signed certificaat kan iedere onbevoegde derde beweren wat hij wil.

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.

Reageren