Mollie.nl iDEAL oplossing

Door Arjan Kapteijn, 18 jaar geleden, 15.729x bekeken

Gezien het feit dat er de laatste tijd veel problemen waren met de iDEAL Mollie-scripts ben ik zelfs maar even wat gaan napluizen. Gezien de enorme complexiteit ben ik zelf maar wat gaan maken.

Want waarom zou je zelf een XML bestand uit elkaar trekken als daar standaard functies voor zijn? Waarom heb je 1000+ regels code nodig als dat ook met < 150 kan?

Voor meer informatie met betrekking tot Mollie.nl en iDEAL verwijs ik naar hun website.

De werking van het script is vrij eenvoudig, voeg een rij toe aan de database met een unieke code, een bedrag en beschrijving. Vervolgens verwijs je de gebruiker naar iDEAL.php?actie=start&payment_id=deuniekecode. In het script zit al een stukje voorbeeldcode die een voorbeeldtransactie aanmaakt.

Uiteraard kun je ook besluiten om de verschillende 'stappen' los van elkaar te halen zodat het eenvoudiger te integreren word.

Database

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
CREATE TABLE payments (
  id int(11) NOT NULL auto_increment,
  payment_id varchar(32) NOT NULL,
  transaction_id varchar(32) NOT NULL default '0',
  amount int(11) NOT NULL,
  description varchar(29) NOT NULL,
  paid int(11) NOT NULL default '0',
  ipadress varchar(15) NOT NULL,
  PRIMARY KEY  (id)
) ENGINE=InnoDB;

Voorbeeld: http://arjan.i-cey.net/ideal.php

Gesponsorde koppelingen

PHP script bestanden

  1. mollienl-ideal-oplossing

 

Er zijn 24 reacties op 'Mollienl ideal oplossing'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Loran DP
Loran DP
18 jaar geleden
 
0 +1 -0 -1
Krijg telkens een error bij het verzenden van een betaling (via jou account ID)

Warning: Cannot modify header information - headers already sent by (output started at /home/*/domains/*.nl/public_html/*/index.php:6) in /home/*/domains/*.nl/public_html/*/index.php on line 99
The Ultimate
The Ultimate
18 jaar geleden
 
0 +1 -0 -1
Misschien een domme vraag, maar waar dient dit script toe?

Ik heb zelf namelijk een iDeal easy account/abonnement en heb iDeal middels het standaard script dat de ABN meelevert geintegreerd. Het enige probleem hierbij is dat mijn script niet toestaat dat je na betaling weer teruggestuurd wordt naar een nader te bepalen pagina.

Zijn er extra mogelijkheden met dit script? Of vervangt dit enkel en alleen die javascript button die ze standaard gebruiken?
Arjan Kapteijn
Arjan Kapteijn
18 jaar geleden
 
0 +1 -0 -1
Loran; waarschijnlijk heb je wat HTML-code toegevoegd in het script, iets waar de header('Location: '.$xml->order->URL);) vervolgens op vastloopt. Er zijn vele oplossingen te verzinnen, zo kan je de redirect loshalen van de rest van het script of de header() vervangen door een javascript of meta refresh. Andere zullen wellicht zomenteen het ob_start() en ob_end_flush() aanraden, maar dat vind ik geen nette oplossing.

Maar persoonlijk zou ik de HTML eruit halen, en enkele toepassen binnen de 'actions' waar het nodig is. Of de actions loskoppelen (verschillende bestanden), of gebruik maken van een goed templatesysteem.

@Bart. iDEAL easy bied niet de mogelijkheid om de boel te automatiseren. Jij kunt dus niet automatisch in je systeem checken of iemand al betaald heeft.
The Ultimate
The Ultimate
18 jaar geleden
 
0 +1 -0 -1
@ Arjan:
Bedankt, hier was ik al bang voor. Helaas.
Arjan Kapteijn
Arjan Kapteijn
18 jaar geleden
 
0 +1 -0 -1
Om wat voorbeelden te geven;

- Beveiligd (eenmalig) downloaden van een bepaald bestand als je betaald heb.
- Automatisch versturen van e-mails (bijv. met een ontvangstbevestiging)
- Koppeling aan bestelsystemen
- Toegang tot een bepaalde website
- etc :).

Dat kan met de iDEAL easy wat lastiger (alhoewel niet onmogelijk, ik heb wel eens iets gemaakt wat dan 1x per half uur de e-mails uitlas).
Jens V
Jens V
18 jaar geleden
 
0 +1 -0 -1
Niet dat ik het direct nodig heb, maar heeft er iemand een idee of er een gelijksoortig systeem bestaat voor Belgische banken en gebruikers? Of beter nog, Nederlandse én Belgische banken?

Mvg,
Jens

@Arjan, Ziet er een mooi scriptje uit :) Wat we van jou gewend zijn :) (inclusief de d/t fouten;) )
Frank -
Frank -
18 jaar geleden
 
0 +1 -0 -1
Leuk gedaan, maar de code van Mollie is toch ook eenvoudig te intergreren? Zie http://mollie.nl/files/mollie-ideal-php5.zip

Hier en daar zitten er wat vieze dingetjes tussen, maar het werkt wel. Het zit ook vrij logisch in elkaar.

Van amount int(11) NOT NULL zou ik wel een DECIMAL(10,2) maken, dan krijg je keurig de centen in je database. Uiteraard wel even checken hoe e.e.a. wordt aangeleverd, men wil nog wel eens in centen rekenen...
Arjan Kapteijn
Arjan Kapteijn
18 jaar geleden
 
0 +1 -0 -1
Frank, ze rekenen met centen daar :). En ansich is de huidige mollie-code prima te integreren maar je weet hoe handig 99% van de PHPHulp-bezoekers is ;). Daarnaast, jij verwijst naar een zipje die er 2 weken geleden nog niet opstond. Hun vorige versie was erg raar, ze hadden een regeltje of 200 nodig om de xml om te zetten naar een array (wat ze dus handmatig deden).

Ach, ik denk ook zeker wel dat mijn voorbeeld voor sommigen misschien gewoon makkelijker te begrijpen zal zijn ;).

@Jens, in belgie heb je volgens mij iets van ogone ofzo.
Frank -
Frank -
18 jaar geleden
 
0 +1 -0 -1
Quote:
Hun vorige versie was erg raar, ze hadden een regeltje of 200 nodig om de xml om te zetten naar een array (wat ze dus handmatig deden).
Dus toch! Ik meende het ook, maar kon de code niet meer vinden. In m'n nieuwe download zag het er goed uit, vandaar dat ik enigzins verbaasd was dat je zelf een alternatief hebt geschreven.

De voorbeelden van Mollie zullen vaak ook niet werken, zie :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
        <option value="<?= $bank_id ?>"><?= $bank_name ?></option>

... Dat word je niet vrolijk van.

Die centen zou ik wel even keurig omzetten naar hele euro's met centen, dat is wat er normaalgesproken wordt verwacht binnen een administratie.
Hipska BE
Hipska BE
18 jaar geleden
 
0 +1 -0 -1
Een INT zal nooit afgerond worden, bij Decimal en de leuke kuren die MySQL soms wil hebben kan het wel gebeuren dat de getallen na de komma ooit afgerond worden.

Heeft te maken met de manier van opslag van de types meen ik mij te herinneren uit de lessen informatica.

Ik zou het dus niet netjes vinden als mijn bank plots € 500.02 afrond naar € 500.01 alleen al door de manier waarop die waarden zijn opgeslaan in de DB

Je kan het dus net zo goed in centen als INT opslaan en bij de presentatie /100 doen.
Kees Schepers
kees Schepers
18 jaar geleden
 
0 +1 -0 -1
Quote:
Een INT zal nooit afgerond worden, bij Decimal en de leuke kuren die MySQL soms wil hebben kan het wel gebeuren dat de getallen na de komma ooit afgerond worden.


Double en Float zijn niet integer met et afgronden van comma getallen, DECIMAL daarentegen wel.

Dit heb ik althans bij mijn MYSQL Developer certification geleerd.
Danny A-noniem
Danny A-noniem
18 jaar geleden
 
0 +1 -0 -1
targetpay.nl heeft hele mooie invoegtoepassingen die e geheel kunt aanpassen zoals je het wil, beter dan mollie vind ikzelf.
Frank -
Frank -
18 jaar geleden
 
0 +1 -0 -1
Quote:
Je kan het dus net zo goed in centen als INT opslaan en bij de presentatie /100 doen.

Zolang jij altijd overal een integer gebruikt en altijd en overal met centen werkt, dan kun je dat doen. Dat zou alleen wel vrij bijzonder zijn, de webshops die ik heb gezien, maken allemaal gebruik van decimalen. In het dagelijks leven maken we daar ook gebruik van, ik heb tenminste nog nooit een brood gekocht die € 199 kostte. € 1,99 (of 1.99) zie echter regelmatig...

Het is beide goed, maar alleen wanneer dit jouw standaard is. Wanneer je afwijkt van de standaard, kun je er op wachten dat je een factor 100 naast de pot pist. En dat wordt een bende... ;)
Onbekend Onbekend
Onbekend Onbekend
18 jaar geleden
 
0 +1 -0 -1
Mijn bedrag komt niet aan op mn account als ik precies die code gebruik zonder iets te wijzigen :P
Arjan Kapteijn
Arjan Kapteijn
18 jaar geleden
 
0 +1 -0 -1
Tommy, ik neem aan dat je wel die testmodus uitgezet heb?
Youri van Weegberg
Youri van Weegberg
18 jaar geleden
 
0 +1 -0 -1
Als ik testmodus aan heb staan, en bij mollie ook, dan word er niets van mijn bankrekening afgehaald en on mijn mollie gezet toch? Ik wou het even zeker weten voor het geval dat... Mooi script, er handig!

Edit:
Ik krijg ook de melding bij de mollie testbank wanneer ik op wel betaald klik, de melding dat het niet is betaald. De database word niet goed geupdate. Ik heb aan dat stuk bijna niets veranderd, maar het werkt toch niet.

Het updaten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
                        case 'report':
                            if(in_array($_SERVER['REMOTE_ADDR'], $ipadresses))
                            {

                                if(!empty($_GET['transaction_id']) && ctype_alnum($_GET['transaction_id']))
                                {

                                    if($testmode)
                                    {

                                        curl_setopt($ch, CURLOPT_URL, "http://www.mollie.nl/xml/ideal?a=check&partnerid=".$partnerID."&transaction_id=".$_GET['transaction_id']."&testmode=true");
                                    }
else{
                                        curl_setopt($ch, CURLOPT_URL, "http://www.mollie.nl/xml/ideal?a=check&partnerid=".$partnerID."&transaction_id=".$_GET['transaction_id']."");
                                    }

                                    
                                    $xml = new SimpleXMLElement(curl_exec($ch));

                                    if((string) $xml->order->payed == 'true')
                                    {

                                        $query = "UPDATE payments SET paid = 1 WHERE payment_id = '".$payment_id."' AND transaction_id = '".mysql_real_escape_string($_GET['transaction_id'])."'";
                                        $result = mysql_query($query);
                                    }
                                }
                            }

                        break;
?>



En het ophalen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
                        case 'return':
                            if(!empty($_GET['transaction_id']) && ctype_alnum($_GET['transaction_id']))
                            {

                                $query   = "SELECT paid FROM payments WHERE payment_id = '".$payment_id."' AND transaction_id = '".mysql_real_escape_string($_GET['transaction_id'])."' AND paid = 1";
                                $result  = mysql_query($query);
                                
                                if($result && mysql_num_rows($result) == 1)
                                {

                                    unset($_SESSION['wwagen']);
                                    $factuur = htmlspecialchars(mysql_query("SELECT factuur FROM payments WHERE payment_id = '".$payment_id."' AND transaction_id = '".mysql_real_escape_string($_GET['transaction_id'])."'")->factuur);
                                    $sql = "UPDATE bestelling SET betaald = '1' WHERE factuur = '".$factuur."'";
                                    $go = mysql_query($sql);
                                    echo '<p>Gelukt! De betaling is succesvol ontvangen!</p>';
                                    echo '<p><a href="index.php">Terug</a></p>';
                                }
else{
                                    echo '<p>Sorry, de betaling is niet succesvol ontvangen!</p>';
                                }
                            }
else{
                                echo '<p>Sorry, er word een transactie id verwacht en deze dient alphanumeriek te zijn!</p>';
                            }

                        break;
?>

Hans Altena
Hans Altena
17 jaar geleden
 
0 +1 -0 -1
Bedankt voor het script. Ik wil het graag testen (ben al weken bezig Mollie aan de praat te krijgen met de door Mollie zelf aangeboden php.zip file, maar het is mij nog steeds niet gelukt, vandaar dat ik op zoek ben gegaan naar alternatieven, zoals jouw script.
Een van de vragen die ik heb: je verwijst in regel 1 naar een IDEAL.PHP script...... Wat is dit voor script, wat doet het en waar kan ik dat vandaan halen? Als je het hebt kun je dit dan ook publiceren hier, want de code zoals die in je post is gepubliceerd krijg ik niet aan de gang.
Alvast bedankt.
/Hans
Arjan Kapteijn
Arjan Kapteijn
17 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$url
        = 'http://www.website.nl/iDEAL.php';
?>


Is een link naar het script op jouw webserver, geen bestand wat geimporteerd wordt ofzo. Mollie zal die link aanspreken voor de controles.
Jaron T
Jaron T
16 jaar geleden
 
0 +1 -0 -1
Kan iemand bevestigen dat het script niet meer werkt? (ik krijg geen callback van $xml->)

edit: Mijn mollie account bleek inactief te zijn! ..
Bram Boos
Bram Boos
16 jaar geleden
 
0 +1 -0 -1
@Jaron;
Intussen bied Mollie zelf ook scripts aan voor gebruikers. Misschien is dat wat voor je...


16 jaar geleden
 
0 +1 -0 -1
Ben er uit gekomen met het script door mollie geleverd.
Write Down
Write Down
16 jaar geleden
 
0 +1 -0 -1
Waar ik werk, maakt men al lange tijd gebruik van mollie, nooit problemen mee gehad, altijd correct. Maar inderdaad, de code is een rommeltje. (plugin voor WHMCS gebruiken wij overigens)
Patrick b
Patrick b
13 jaar geleden
 
0 +1 -0 -1
is er iemand die mij kan helpen Mollie Ideal te koppelen aan een joomla component?

groeten,

Patrick
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Ozzie PHP
Ozzie PHP
13 jaar geleden
 
0 +1 -0 -1
Wil je hier aub een nieuw topic voor aanmaken in het forum.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. mollienl-ideal-oplossing

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.