Problemen met het toevoegen van IDEAL 3.3.1 sepa
We hebben een eigen script, waardoor we niet een standaard module kunnen gebruiken (bv. van Joomla etc.).
Ter info het Ideal script wat nu nog gebruikt wordt komt nog ergens uit 2005 (safe_thinMPI weet niet of u dit wat zegt?).
Wat heb ik tot zover gedaan:
- De documentatie handleiding van Ideal advanced gelezen (ook paragraaf 4.3 geprobeerd, maar zonder dat ik dit überhaupt werkend kreeg)
- Gecontroleerd op PHP 5.3 (5.3.25)
- Ideal_v3.cer gedownload en geplaatst (voor toevoegen zie bijlage config.conf)
- ik heb een certificaat aangemaakt met openssl en 'cert.cer' geupload in het 'Ideal Dashboard' & priv.pem aangemaakt.
- config.conf goed aangepast (zie bijlage).
- zoeken op 'Exception:Failure Signing Data: - SHA256' foutmelding heeft niet geholpen
Problemen tot zover:
- Ik krijg het niet voor elkaar een bankenlijst weer te geven tijdens het betalingsproces.
- Als ik het voorbeeld gebruikt krijg ik een Exception:Failure Signing Data: - SHA256 foutmelding
Enig idee wat hier fout kan gaan?
heb je de voorbeeldcode gedownload van het ideal dashboard?
Als je daarin de config aanpast en de certificaten op orde hebt dan moet het in de testomgeving al werken.
Als ik iets voor je doen kan, laat het me dan even weten.
config.conf
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
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
### Initial configuration file ###
##################################################
## merchant attributes
##################################################
#
# (required)
# Description:
# Id van de webshop, door de acceptant te verkrijgen via het iDEAL Dashboard
MERCHANTID=(weggehaald)*
#
# (optional)
# Description:
# Sub Id van de webshop, alleen te wijzigen na overleg met de acquirer
# Default value:
# 0 (zero)
SUBID=0
#
# (required)
# Description:
# URL van de pagina in de webshop waarnaar de consument wordt geredirect na de iDEAL transactie
MERCHANTRETURNURL=http://www.website.nl/ideal_betaling/
#
#####
##################################################
## acquirer attributes
##################################################
#
# (required)
# Description:
# URL van de acquirer van de acceptant; niet wijzigen
# https://idealtest.secure-ing.com/ideal/iDEALv3 voor test
# https://ideal.secure-ing.com/ideal/iDEALv3 voor productie
ACQUIRERURL=https://ideal.secure-ing.com/ideal/iDEALv3
#
# (optional)
# Description:
# Connection timeout in seconds
# Default:
# 10 seconds
ACQUIRERTIMEOUT=10
#
# (optional)
# Description:
# Vervaltijd per transactie; zie paragraaf 3.3.1 van het document
# iDEAL_010 standaarden voor de toegestane waarden en de default
# waarde.
# Default:
# If not set the issuer will use the default value of PT1H (one hour)
#EXPIRATIONPERIOD=PT1H
#
EXPIRATIONPERIOD=PT600S
#####
##################################################
## crypto attributes
##################################################
#
# (required)
# Keystore File and Password of the merchant certificate
# used for signing requests. See Ideal Advanced PHP
# integration manual for details.
# Note: file must be available on the config path!
PRIVATEKEY=priv.pem
# Vul hier het wachtwoord van uw private key in
PRIVATEKEYPASS=(weggehaald)*
# The filename of the certificate created by the merchant
PRIVATECERT=cert.cer
# The filename of the certificate created by the acquirer
CERTIFICATE0=ideal_v3.cer
#
#####
##################################################
## connection attributes
##################################################
#
# (optional)
# Description:
# Set the PROXY connection information.
#PROXY=Vul hier een proxyserver in (gebruik dit ALLEEN als de webshop achter een proxyserver zit)
#PROXYACQURL=vul hier de url van de acquirer in (gebruik dit ALLEEN als de webshop achter een proxyserver zit)
#
#####
##################################################
## logging attributes
##################################################
#
# The log filename where debugging info to be recorded (e.g. connector.log).
#
LOGFILE=thinmpi.log
#
# TRACELEVEL=DEBUG,ERROR (gebruik dit ALLEEN tijdens het testen, om misbruik te voorkomen)
#
TRACELEVEL=DEBUG
# EOF
##################################################
## merchant attributes
##################################################
#
# (required)
# Description:
# Id van de webshop, door de acceptant te verkrijgen via het iDEAL Dashboard
MERCHANTID=(weggehaald)*
#
# (optional)
# Description:
# Sub Id van de webshop, alleen te wijzigen na overleg met de acquirer
# Default value:
# 0 (zero)
SUBID=0
#
# (required)
# Description:
# URL van de pagina in de webshop waarnaar de consument wordt geredirect na de iDEAL transactie
MERCHANTRETURNURL=http://www.website.nl/ideal_betaling/
#
#####
##################################################
## acquirer attributes
##################################################
#
# (required)
# Description:
# URL van de acquirer van de acceptant; niet wijzigen
# https://idealtest.secure-ing.com/ideal/iDEALv3 voor test
# https://ideal.secure-ing.com/ideal/iDEALv3 voor productie
ACQUIRERURL=https://ideal.secure-ing.com/ideal/iDEALv3
#
# (optional)
# Description:
# Connection timeout in seconds
# Default:
# 10 seconds
ACQUIRERTIMEOUT=10
#
# (optional)
# Description:
# Vervaltijd per transactie; zie paragraaf 3.3.1 van het document
# iDEAL_010 standaarden voor de toegestane waarden en de default
# waarde.
# Default:
# If not set the issuer will use the default value of PT1H (one hour)
#EXPIRATIONPERIOD=PT1H
#
EXPIRATIONPERIOD=PT600S
#####
##################################################
## crypto attributes
##################################################
#
# (required)
# Keystore File and Password of the merchant certificate
# used for signing requests. See Ideal Advanced PHP
# integration manual for details.
# Note: file must be available on the config path!
PRIVATEKEY=priv.pem
# Vul hier het wachtwoord van uw private key in
PRIVATEKEYPASS=(weggehaald)*
# The filename of the certificate created by the merchant
PRIVATECERT=cert.cer
# The filename of the certificate created by the acquirer
CERTIFICATE0=ideal_v3.cer
#
#####
##################################################
## connection attributes
##################################################
#
# (optional)
# Description:
# Set the PROXY connection information.
#PROXY=Vul hier een proxyserver in (gebruik dit ALLEEN als de webshop achter een proxyserver zit)
#PROXYACQURL=vul hier de url van de acquirer in (gebruik dit ALLEEN als de webshop achter een proxyserver zit)
#
#####
##################################################
## logging attributes
##################################################
#
# The log filename where debugging info to be recorded (e.g. connector.log).
#
LOGFILE=thinmpi.log
#
# TRACELEVEL=DEBUG,ERROR (gebruik dit ALLEEN tijdens het testen, om misbruik te voorkomen)
#
TRACELEVEL=DEBUG
# EOF
zou ik om te testen veranderen in
ACQUIRERURL=https://idealtest.secure-ing.com/ideal/iDEALv3
en dan de certificaten ook naar de idealtest dashboard uploaden.
Hou er rekening mee dat de hoogte van het bedrag in de testomgeving bepaalt welke status je terugkrijgt.
1.00 euro == SUCCESS uit mijn hoofd.
Aan de foutmelding te zien lijkt het ook dat er iets niet klopt aan de certificaten.
Volg eventueel stap voor stap nog eens de instructies.
Toevoeging op 18/07/2013 12:51:56:
https://idealtest.secure-ing.com/ideal/logon_ing.do
Het technisch account wachtwoord kan ik ook raar genoeg niet opnieuw aanvragen
Dan zou ik assistentie vragen van de bank.
de test omgeving heb ik nu eindelijk werkend gekregen.
In moest het complete pad van de certificaten op de webserver plaatsen..
Alleen als ik vervolgens doorverwezen wordt naar de site zelf krijg ik de foutmelding:
''
Uw bestelling is helaas niet betaald, klik hier om het nogmaals te proberen
Foutmelding: EntranceCode does not match.
Foutmelding: TransactionID does not match.
''
De TransactionID krijg je terug na het starten van een transactie. Dit ID geef je mee aan de functie getTransactionStatus() of iets dergelijks. Dit moet uiteraard wel een geldig id zijn.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
$ec = "";
if (isset($_GET['ec']))
$ec = $_GET['ec'];
$transID = "";
if (isset($_GET['trxid']))
$transID = $_GET['trxid'];
if (isset($_GET['ec']))
$ec = $_GET['ec'];
$transID = "";
if (isset($_GET['trxid']))
$transID = $_GET['trxid'];
het onderste gedeelte wordt in de voorbeeldcode weergegeven.
ec == EntranceCode en
trxid == TransactionId.
ik zou om te debuggen de codes eens opslaan in de database of in een logbestand. Opslaan in de database is zowiezo een goed idee omdat niet iedereen braaf terugkeert naar jouw site en je dus ook later nog beschikking moet hebben over deze codes om alsnog de status op te halen.
De gegevens worden inderdaad ook in de database opgeslagen, maar omdat de transactie (foutmelding die ik net gaf) nu nog niet lukt wordt deze nog niet in database opgeslagen op één of andere manier.
Toevoeging op 18/07/2013 16:53:24:
stukje van het terugkom script (nadat mensen betaald hebben):
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
$error = FALSE;
$best_ideal_transactionID = "";
$best_ideal_entrancecode = "";
$bestelling_id = "";
$ref = "";
if (isset($_SERVER['HTTP_REFERER']))
$ref = $_SERVER['HTTP_REFERER'];
$ec = "";
if (isset($_GET['ec']))
$ec = $_GET['ec'];
$transID = "";
if (isset($_GET['trxid']))
$transID = $_GET['trxid'];
if ($userID != "1" || $userID != "2" || $userID != "16" || $userID != "18") {
if (!$ec) {
$error = TRUE;
$content .= "<p>Foutmelding: <font color=\"#FF0000\">No entranceCode.</font></p>";
}
}
if (!$transID) {
$error = TRUE;
$content .= "<p>Foutmelding: <font color=\"#FF0000\">No transactionID.</font></p>";
}
$query = "SELECT best_ideal_entrancecode, best_ideal_transactionID, best_id, best_ideal_authenticated
FROM cs_bestellingen
WHERE best_ideal_entrancecode = '$ec'
LIMIT 1";
$result = mysql_query($query)or die(mysql_error());
while ($row=mysql_fetch_array($result)) {
$bestelling_id = $row["best_id"];
$best_ideal_entrancecode = $row["best_ideal_entrancecode"];
$best_ideal_transactionID = $row["best_ideal_transactionID"];
$best_ideal_authenticated = $row["best_ideal_authenticated"];
}
if ($ec != $best_ideal_entrancecode) {
$error = TRUE;
$content .= "<p>Foutmelding: <font color=\"#FF0000\">EntranceCode does not match.</font></p>";
}
if ($transID != $best_ideal_transactionID) {
$error = TRUE;
$content .= "<p>Foutmelding: <font color=\"#FF0000\">TransactionID does not match.</font></p>";
}
if ($best_ideal_authenticated == 1) {
$error = TRUE;
$content .= "<p>Foutmelding: <font color=\"#FF0000\">Betaling reeds ontvangen</font></p>";
}
$best_ideal_transactionID = "";
$best_ideal_entrancecode = "";
$bestelling_id = "";
$ref = "";
if (isset($_SERVER['HTTP_REFERER']))
$ref = $_SERVER['HTTP_REFERER'];
$ec = "";
if (isset($_GET['ec']))
$ec = $_GET['ec'];
$transID = "";
if (isset($_GET['trxid']))
$transID = $_GET['trxid'];
if ($userID != "1" || $userID != "2" || $userID != "16" || $userID != "18") {
if (!$ec) {
$error = TRUE;
$content .= "<p>Foutmelding: <font color=\"#FF0000\">No entranceCode.</font></p>";
}
}
if (!$transID) {
$error = TRUE;
$content .= "<p>Foutmelding: <font color=\"#FF0000\">No transactionID.</font></p>";
}
$query = "SELECT best_ideal_entrancecode, best_ideal_transactionID, best_id, best_ideal_authenticated
FROM cs_bestellingen
WHERE best_ideal_entrancecode = '$ec'
LIMIT 1";
$result = mysql_query($query)or die(mysql_error());
while ($row=mysql_fetch_array($result)) {
$bestelling_id = $row["best_id"];
$best_ideal_entrancecode = $row["best_ideal_entrancecode"];
$best_ideal_transactionID = $row["best_ideal_transactionID"];
$best_ideal_authenticated = $row["best_ideal_authenticated"];
}
if ($ec != $best_ideal_entrancecode) {
$error = TRUE;
$content .= "<p>Foutmelding: <font color=\"#FF0000\">EntranceCode does not match.</font></p>";
}
if ($transID != $best_ideal_transactionID) {
$error = TRUE;
$content .= "<p>Foutmelding: <font color=\"#FF0000\">TransactionID does not match.</font></p>";
}
if ($best_ideal_authenticated == 1) {
$error = TRUE;
$content .= "<p>Foutmelding: <font color=\"#FF0000\">Betaling reeds ontvangen</font></p>";
}
Toevoeging op 18/07/2013 17:50:48:
ec & transID worden trouwens wel geprint maar als ik $best_ideal_entrancecode of $best_ideal_transactionID weergeef dan krijg ik een leeg veld.
Dus worden de ec en trxid niet juist opgeslagen id de database?
de ec en de trxid worden in de werkende omgeving goed opgeslagen, maar in de nieuwe omgeving van Ideal 3.3.1 loopt hij vast op regel 45 & 50 (zie bovenstaande script) hierdoor worden deze gegevens niet opgeslagen.
1 ophalen en weergeven van lijst van beschikbare banken
2 het aanmaken van een transactie (en wat mij betreft het opslaan van een aantal gegevens in de database)
3 het doorsturen van de klant naar zijn eigen bank om de betaling te voltooien
4 wanneer de klant terugkeert naar de site de status van de transactie opvragen bij de bank en indien success dan de bestelling verwerken en de status in de database bij werken met een UPDATE query
5 min of meer los daarvan: voor de klanten die niet terugkeren periodiek de status opvragen van de transacties die nog op 'Open' staan.
Bij jou gaat er ergens iets fout.
of je slaat de gegevens niet juist op in de database (veldlengte wel groot genoeg?) bij stap 2,
of je vraagt op foutieve wijze de gegevens weer op uit de database. (de result zou altijd één rij moeten bevatten). Overigens hoef je bij stap vier niet perse de gegevens uit de database te vergelijken met de $_GET variabelen. In principe vraag je altijd een geldig transactieId van Ideal en zo niet dan krijg je ook netjes een foutmelding.
stap 2,3 zou volgens mij al moeten werken.
stap 4,5 moet ik dan nog even naar kijken.
Ik denk trouwens dat het verstandig is om nu eerst verder te gaan met die bankenlijst.
Maar dat lukt met met de code die ideal beschikbaarsteld.
Patrick cos op 18/07/2013 11:31:19:
Problemen tot zover:
- Ik krijg het niet voor elkaar een bankenlijst weer te geven tijdens het betalingsproces.
- Als ik het voorbeeld gebruikt krijg ik een Exception:Failure Signing Data: - SHA256 foutmelding
Enig idee wat hier fout kan gaan?
- Ik krijg het niet voor elkaar een bankenlijst weer te geven tijdens het betalingsproces.
- Als ik het voorbeeld gebruikt krijg ik een Exception:Failure Signing Data: - SHA256 foutmelding
Enig idee wat hier fout kan gaan?
De bankenlijst heb ik nog niet voor je bekeken, echter het signing issue herken ik wel. Zoals de meeste code op internet staat geschreven werkt niet voor php 5.3, deze kan namelijk geen signing aan zoals iDEAL het wil.
Ik heb het toendertijd opgelost met xmlseclibs, tenzij dat je de mogelijkheid hebt om het te testen op php 5.4 (en daarna je workspace te updaten naar 5.4)
Overigens hoeft het ophalen van de bankenlijst niet bij elke transactie, in de handleiding van iDeal wordt zelfs gevraagd dat niet te doen.
Niet schrikken, de bankenlijst klopt niet helemaal met wat in de documentatie staat. Er staat een soort gewicht bij (short/long) en die mist in de XML