ING saldo ophalen met PHP

Door WeeJeWel op zaterdag 19 maart 2011 04:00 - Reacties (63)
Categorie: Webshizzle, Views: 20.287

Ik wilde een geeklet maken voor OSX waarbij mijn ING saldo zichtbaar werd op m'n bureaublad.

Zo gezegd, zo gedaan. Het resultaat is hieronder te zien :)


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
<?php
define('USERNAME', 'foo');
define('PASSWORD', 'bar');

/*** MAGIC STUFF FROM THIS LINE ***/


// Get library

require_once('phpQuery.php');


// Get login names

$curl_login = curl_init();
curl_setopt($curl_login, CURLOPT_URL, 'https://mijn.ing.nl/internetbankieren/SesamLoginServlet');
curl_setopt($curl_login, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_login, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_login, CURLOPT_COOKIEJAR, "cookie.txt");
$curl_login_result = curl_exec($curl_login);
curl_close($curl_login);

$doc = phpQuery::newDocument( $curl_login_result );

$input_names = array();
pq('input')->each(function($input){
    global $input_names;
    $input_names[] = pq($input)->attr('name');
});


// Get cookies

$curl_submit = curl_init();
curl_setopt($curl_submit,CURLOPT_URL, 'https://mijn.ing.nl/internetbankieren/SesamLoginServlet');
curl_setopt($curl_submit,CURLOPT_POSTFIELDS, $input_names[0] . '=' . USERNAME . '&' . $input_names[1] . '=' . PASSWORD . '&' . $input_names[2] . '=off');
curl_setopt($curl_submit, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_submit, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_submit, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($curl_submit, CURLOPT_COOKIEJAR, "cookie.txt");
$result = curl_exec($curl_submit);
curl_close($curl_submit);


// Let the ING servers do some stuff by simulating a frame-supporting browser request

$urls = array(
    'https://mijn.ing.nl/internetbankieren/jsp/IndexLogon.jsp',
    'https://mijn.ing.nl/internetbankieren/jsp/sesam_cockpit.jsp',
    'https://mijn.ing.nl/mpb/startframes.do',
    'https://mijn.ing.nl/mpb/startpagina.do',
    'https://mijn.ing.nl/mpb/startpaginarekeninginfo.do'
);

foreach( $urls as $url )
{
    $curl_temp = curl_init();
    curl_setopt($curl_temp, CURLOPT_URL, $url );
    curl_setopt($curl_temp, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl_temp, CURLINFO_HEADER_OUT, true);
    curl_setopt($curl_temp, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl_temp, CURLOPT_COOKIEFILE, "cookie.txt");
    $result = curl_exec($curl_temp);
    curl_close($curl_temp);
}


// Extract balance from last document

$doc = phpQuery::newDocument( $result );


// Print balance

echo 'Saldo: § ' . pq('#giro_0 td[align="right"]')->html();
?>



Als je dit zelf wilt gebruiken, plaats dan phpQuery in dezelfde map en geef deze schrijfrechten (CHMOD 777) voor het cookiebestand.

That's it! Altijd je saldo up to date :)

Volgende: ING Saldo op Android 03-'11 ING Saldo op Android
Volgende: ENERGY The Network 2011 02-'11 ENERGY The Network 2011

Reacties


Door Tweakers user webinn, zaterdag 19 maart 2011 06:36

op z'n minst raar dat je dit zomaar kan opvragen zonder smartcard, handtekening...

Door Tweakers user Comgenie, zaterdag 19 maart 2011 06:43

webinn schreef op zaterdag 19 maart 2011 @ 06:36:
op z'n minst raar dat je dit zomaar kan opvragen zonder smartcard, handtekening...
Bij ING kan je gewoon inloggen met slechts een gebruikersnaam en wachtwoord. Zo kan je je saldo en transacties bekijken. Pas tijdens het geld overmaken wordt er een bevestigings sms naar je telefoon gestuurd met een code en het totaalbedrag, die je moet invullen.


Leuk scriptje overigs :). Zelf gebruik ik de ING Buddy om snel me saldo te bekijken.

Door Tweakers user MikeN, zaterdag 19 maart 2011 08:26

curl_setopt($curl_login, CURLOPT_SSL_VERIFYPEER, false);

lijkt me niet echt handig om te setten bij een site van een bank als je je inloggegevens verstuurd. Beter gewoon je CA configureren zodat curl het certificaat kan checken :)

Door Tweakers user veldmuis, zaterdag 19 maart 2011 09:19

webinn schreef op zaterdag 19 maart 2011 @ 06:36:
op z'n minst raar dat je dit zomaar kan opvragen zonder smartcard, handtekening...
Hoe log jij bij $bank in op je smartphone?

Bij ABN-AMRO is het eťnmalig verifiŽren met hun reader, en daarna met alleen een pincode je gang gaan.

Door Tweakers user Kalief, zaterdag 19 maart 2011 09:41

Parse error: syntax error, unexpected T_FUNCTION, expecting ')' in [path] on line 26

Door Tweakers user Brilsmurfffje, zaterdag 19 maart 2011 11:38

kan je niet beter iets regelen via de ing buddy over het msn proctecol?
Dat lijkt mij veiliger dan zo je gegevens verzenden

Door Tweakers user WeeJeWel, zaterdag 19 maart 2011 11:39

Kalief schreef op zaterdag 19 maart 2011 @ 09:41:
Parse error: syntax error, unexpected T_FUNCTION, expecting ')' in [path] on line 26
PHP 5.3+ is nodig ;)

Door Tweakers user Brazza, zaterdag 19 maart 2011 12:06

Goeie zaak, hoop dat nu eindelijk iemand eens een keer een fatsoenlijke app maakt voor de smartphone. Gz met dit werk!

Zat er al patent op 8-)

Door Tweakers user Kalief, zaterdag 19 maart 2011 15:55

check info.php > PHP Version 5.2.16
Ah. Ojee.

Door Tweakers user t1mmy, zaterdag 19 maart 2011 18:19

Brazza schreef op zaterdag 19 maart 2011 @ 12:06:
Goeie zaak, hoop dat nu eindelijk iemand eens een keer een fatsoenlijke app maakt voor de smartphone. Gz met dit werk!

Zat er al patent op 8-)
Ja lekker! Al de inlog gegevens versturen naar jou server :)

Door Tweakers user Kalief, zaterdag 19 maart 2011 23:40

t1mmy schreef op zaterdag 19 maart 2011 @ 18:19:
[...]


Ja lekker! Al de inlog gegevens versturen naar jou server :)
Wees niet bang. Met jouw salaris gaat het slechts om micropayments en die kun je als schenkingen aan een goed doel aftrekken van de belasting.

Off: zijn er overigens belangrijke veiligheidslekken in 5.2.16+ die een upgrade naar 5.3.x noodzakelijk maken of gaat het vooral om functionaliteit?

Door Tweakers user Gamebuster, zondag 20 maart 2011 00:34

Damn, wilde net ook zoiets maken! Wat een timing!

Alleen ik wilde met Growl een melding maken wanneer er geld is gestort. Ik ga wel 'ff verder borduren hiermee.

edit:
http://i.imgur.com/dy6mW.png

whoopie, werkt meteen zonder problemen :D (rijk ben ik he)

[Reactie gewijzigd op zondag 20 maart 2011 00:56]


Door Tweakers user t1mmy, zondag 20 maart 2011 14:33

Kalief schreef op zaterdag 19 maart 2011 @ 23:40:
[...]


Wees niet bang. Met jouw salaris gaat het slechts om micropayments en die kun je als schenkingen aan een goed doel aftrekken van de belasting.
Volwassen :)

Door Tweakers user Shinigami, zondag 20 maart 2011 22:33

Heb op basis van dit script even snel een Android app in elkaar geknutseld, zie http://i.imgur.com/XVRAL.png.

Op het moment haalt 'ie alleen nog maar het saldo op, maar plan ook een widget te maken en meer functies aan de app toe te voegen.

Voor wie het aandurft om het zelf uit te proberen heb ik een testversie online gezet.
Aangezien er op dit moment nog geen encryptie gebruikt wordt, worden je inloggegevens plain naar mijn server gezonden. Ik doe er verder niks mee, maar als de request onderschept wordt en er misbruik gemaakt wordt van je inloggegevens ben ik niet verantwoordelijk. You have been warned.
Klikkerdeklik voor download: bas.wtfz.net/ing/

Hoe dan ook bedankt WeeJeWel voor dit fantastische script!

Door Tweakers user WeeJeWel, maandag 21 maart 2011 10:02

Had ik al gezegd dat dit script onder de beerware licentie uit was gegeven? :9
Shinigami schreef op zondag 20 maart 2011 @ 22:33:
Heb op basis van dit script even snel een Android app in elkaar geknutseld, zie http://i.imgur.com/XVRAL.png.

Op het moment haalt 'ie alleen nog maar het saldo op, maar plan ook een widget te maken en meer functies aan de app toe te voegen.

Voor wie het aandurft om het zelf uit te proberen heb ik een testversie online gezet.
Aangezien er op dit moment nog geen encryptie gebruikt wordt, worden je inloggegevens plain naar mijn server gezonden. Ik doe er verder niks mee, maar als de request onderschept wordt en er misbruik gemaakt wordt van je inloggegevens ben ik niet verantwoordelijk. You have been warned.
Klikkerdeklik voor download: bas.wtfz.net/ing/

Hoe dan ook bedankt WeeJeWel voor dit fantastische script!

Door Tweakers user Shinigami, maandag 21 maart 2011 12:35

Applicatie is tijdelijk even offline vanwege serverproblemen en veiligheidsredenen. Ik ga deze week een native implementatie van dit script maken met libcurl voor Java.

En wees niet gevreesd, de bier zal spoedig genoeg rijkelijk vloeien ;), wat drink je zoal? :9

Door Tweakers user WeeJeWel, dinsdag 22 maart 2011 00:28

Nou na afgelopen weekend niet meer, maar een pak bananenmelk is ook goed :9
Shinigami schreef op maandag 21 maart 2011 @ 12:35:
Applicatie is tijdelijk even offline vanwege serverproblemen en veiligheidsredenen. Ik ga deze week een native implementatie van dit script maken met libcurl voor Java.

En wees niet gevreesd, de bier zal spoedig genoeg rijkelijk vloeien ;), wat drink je zoal? :9

Door Tweakers user Gamebuster, dinsdag 22 maart 2011 13:35

Het werkt niet met een zakelijke rekening... krijg alleen Saldo §.

Als ik de HTML resultaat opsla in een bestand om 'm te bekijken, zie ik dat er iets als "tijdelijk geen informatie beschikbaar" staat. De login klopt wel, kan er gewoon mee inloggen. Het script werkt ook bij mijn "normale" rekening.

Beetje vreemd.

[Reactie gewijzigd op dinsdag 22 maart 2011 13:36]


Door Tweakers user WeeJeWel, woensdag 23 maart 2011 15:58

Gamebuster schreef op dinsdag 22 maart 2011 @ 13:35:
Het werkt niet met een zakelijke rekening... krijg alleen Saldo §.

Als ik de HTML resultaat opsla in een bestand om 'm te bekijken, zie ik dat er iets als "tijdelijk geen informatie beschikbaar" staat. De login klopt wel, kan er gewoon mee inloggen. Het script werkt ook bij mijn "normale" rekening.

Beetje vreemd.
Ik heb geen zakelijke rekening, dus kan hem helaas niet updaten voor je!


Door Tweakers user johmanx10, donderdag 24 maart 2011 13:31

Op mijn Linux bak met PHP 5.2.10 is de bovenstaande code niet geldig omdat de callback in de each() functie niet goed genoteerd wordt. Dit is bij mij opgelost door het volgende op regels 25 t/m 32 te plaatsen:

$input_names = array();
function callMe($input)
{
global $input_names;
$input_names[] = pq($input)->attr('name');
}

pq('input')->each('callMe');

Door Tweakers user uid0, donderdag 24 maart 2011 17:47

Netjes hoor! Liever zou ik natuurlijk hebben dat de ING een API beschikbaar maakt om het saldo uit te lezen, maar dit is een prima alternatief.

Ik ga 'm denk ik verbouwen om m'n 2 rekeningen elke dag even te controleren en bij saldo-wijziging direct een mailtje er uit te doen.

Door Tweakers user Eric167, vrijdag 25 maart 2011 00:01

@WeetJeWel. Ik vind het knap dat je dit gemaakt hebt. Er zijn veel ING klanten die al jaren hier op zitten te wachten en maar niet snappen waarom ING nog steeds niet met een app is uitgekomen, terwijl andere banken dat wel doen. En jij bouwt dit even. Vind ik knap.

Toch een kanttekening.
Ik weet alleen niet of dat het verstandig is om dit te gebruiken. Ook als je de code kent of zelfs de bouwer bent. Een server weet welke browser aanlogt. Als je zelf een applicatie schrijft kan het dus zijn dat er geen browser informatie meegegeven wordt. Als er nu iets met je rekening gebeurd, ook al komt het door iets anders, dan kan het zijn dat ING de schuld bij jou legt omdat je van een onveilige applicatie gebruik hebt gemaakt.
Dit is misschien ver gezocht, maar ikzelf zou de applicatie eerst tegen een een eigen server aanhouden en kijken wat voor informatie ik van de applicatie binnen krijg en wat van een browser.

Door Tweakers user Luxicon, vrijdag 25 maart 2011 23:25

Je kan gewoon inloggen en met transactie een sms?
Dan kan je toch gewoon het telefoon nummer aanpassen ook?
Naja, doe mij maar Rabobank, veel veiliger.

Door Master004, maandag 28 maart 2011 23:31

@Luxicon:
Nee, want voor elke wijziging in instellingen of wat dan ook moet per sms een tan code invoeren. Dus als jij ook je mobieltje/simkaart opstuurt naar de maker van die code, dan pas kan iemand er kwaad mee. Is te vergelijken met het kwijtraken van een pinpas waarop een plakkertje met de pincode is geplakt! ;)

Door Tweakers user Tead, woensdag 29 juni 2011 23:52

Toch nog even reageren op een wat oudere post:
Gamebuster schreef op dinsdag 22 maart 2011 @ 13:35:
Het werkt niet met een zakelijke rekening... krijg alleen Saldo §.
Dit was ook mijn probleem, echter met een beetje speurwerk is het zo gevonden:

Regel 47 tm 53 vervangen door dit:

PHP:
1
2
3
4
5
6
7
$urls = array( 
    'https://mijnzakelijk.ing.nl/internetbankieren/jsp/IndexLogon.jsp', 
    'https://mijnzakelijk.ing.nl/internetbankieren/jsp/sesam_cockpit.jsp', 
    'https://mijnzakelijk.ing.nl/mpz/startframes.do', 
    'https://mijnzakelijk.ing.nl/mpz/startpagina.do', 
    'https://mijnzakelijk.ing.nl/mpz/startpaginarekeninginfo.do' 
);



Succes! :)

Door Tweakers user t1mmy, zondag 2 oktober 2011 23:02

WeetJeWel, bedankt! Heb zelf dit er van gebakken:
Prutsels: ING Saldo bekijken op je iOS device

Door Ortwin van Vessem, maandag 3 oktober 2011 16:26

Goedemiddag,

Korte vraag ... mogelijk langer antwoord. Hoe kan ik de echo naar bijvoorbeeld growl krijgen om het saldo daadwerkelijk op me desktop te zien binnen OSx en mogelijk binnen dashboard.

Alvast bedankt voor een reactie van een ieder.

Door Roderick, dinsdag 11 september 2012 19:37

Hallo,

Ik krijg op dit moment het script niet werkend iemand anders hier ervaring mee?
In de cookie.txt zie ik dat het verbindingen met mijn.ing.nl niet lukt misschien verkeerde urls?

Groet,


Door Tweakers user asc366, zondag 23 december 2012 11:00

hah. lol. Mocht 't sinds 18 dec. niet meer werken moet je even handmatig inloggen en aangeven dat je 't voor jouw account niet erg vindt dat ze cookies plaatsen.. daardoor gaat 't script ook weer werken :)

Door Tweakers user WeeJeWel, zondag 23 december 2012 19:30

asc366 schreef op zondag 23 december 2012 @ 11:00:
hah. lol. Mocht 't sinds 18 dec. niet meer werken moet je even handmatig inloggen en aangeven dat je 't voor jouw account niet erg vindt dat ze cookies plaatsen.. daardoor gaat 't script ook weer werken :)
Ha, cool dat dit nog wordt gebruikt :P

Door Kees, zondag 17 februari 2013 02:51

Dit script werkt bij mij niet meer, heeft iemand een werkend script?

Door Tweakers user Rule2, zondag 24 februari 2013 16:45

Het lukt me niet om dit werkend te krijgen, maar ik weet dan ook vrijwel nix van PHP.
Wel dat ING de site kort geleden heeft vernieuwd. Ik vermoed dat de URL's niet meer kloppen.

@asc366 cookie-instellingen kloppen, maar dat helpt niet.

Iemand tips mbt debuggen?

Ik wil 't toch wel werkend krijgen, want ING heeft saldo SMS afgeschaft. Wat ik wil doen: m'n raspberrypi 2x per dag of zo m'n saldo laten checken, en me een sms'je sturen als het onder of boven een bepaalde grens is. Dat sms'je sturen is het probleem niet.

ING buddy voldoet niet. Ik wil een melding krijgen wanneer het nodig is. Niet zelf hoeven checken ůf het nodig is.

Door Tweakers user WeeJeWel, zondag 24 februari 2013 16:54

Wat werkt er niet dan? Hier doet 'ie het gewoon!

Door Tweakers user Rule2, zondag 24 februari 2013 22:00

hmm... Ik krijg error 500 internal server error. "Er is een onverwachte voorwaarde gevonden toen de server het verzoek wilde uitvoeren."
Als het bij jou nog werkt, dan zit het probleem dus hier. Zoals ik al zei, ik ben een totale n00b met php en apache en vrij vers met Linux. Wel 20+ jaar DOS/Win achter de kiezen.

Apache2 servertje met Php 3.5;
Rechten: Het script heeft 664. phpQuery.php heeft 777.
Ik zag ergens dat een php-script maximaal 664 mag hebben, maar dat maakt niet uit.

Er wordt geen cookie.txt aangemaakt;
als ik het zelf aanmaak en iedereen r/w rechten geef, blijft het leeg. Dus daar gaat iets niet goed.

poort 80 staat open.

Enig idee? Dank alvast voor het meedenken :-)

Door Tweakers user WeeJeWel, zondag 24 februari 2013 22:11

Php 3.5... misschien dat die te oud is, ik heb het onder php5.x gemaakt!

[Reactie gewijzigd op zondag 24 februari 2013 22:11]


Door Tweakers user Rule2, maandag 25 februari 2013 23:08

Herstel, het is php 5.4.4-12 oid. Heel vers. Dus daar zal het niet aan liggen.

vanaf de server zelf de cookie-instellingen van ING aangepast, maakt niet uit.

Als ik het script draai vanaf de server zelf of vanaf een browser elders in m'n netwerk, maakt niet uit. Chrome meldt error 505, midori zegt helemaal nix. Cookie.txt wordt niet aangemaakt.

Het gaat mis ergens vanaf // get cookies, zie ik met een print-verklikkertje en stap voor stap uitcommentaren. Maar wat?

Door Tweakers user WeeJeWel, maandag 25 februari 2013 23:57

Oooooh. Controleer eens of je de curl extensie wel aan hebt staan!

En als dat het niet is moet je even php logging aanzetten, daar word je wel wijzer van.

[Reactie gewijzigd op maandag 25 februari 2013 23:58]


Door David Meijer, donderdag 9 mei 2013 15:12

ik heb hem ook er op staan maar ik zie alleen Saldo § teken meer niet ik heb geen zakelijke rekeing

Door Pieter, maandag 29 juli 2013 22:22

Een fantastisch script. Dank daarvoor! Na ruim twee jaar werkt het nog steeds.

Ik gebruik het script om elke avond het saldo en de laatste mutaties gemaild te krijgen, vanaf mijn NAS. Ik strip andere gevoelige informatie uit het mailtje.
Lekker makkelijk.

Door Tweakers user WeeJeWel, maandag 29 juli 2013 22:39

Hehe leuk om te horen :D

[Reactie gewijzigd op maandag 29 juli 2013 22:40]


Door Wouter van Os, zaterdag 3 augustus 2013 23:32

Jammer dat het niet meer werkt met de nieuwe PAC code @ ING Zakelijk! :( Iemand mss een fix?

Door Wouter van Os, zaterdag 3 augustus 2013 23:49

Wouter van Os schreef op zaterdag 03 augustus 2013 @ 23:32:
Jammer dat het niet meer werkt met de nieuwe PAC code @ ING Zakelijk! :( Iemand mss een fix?
Oops, die smilie was niet de bedoeling :P

Door Tweakers user mcjambi, donderdag 22 mei 2014 21:46

3 jaar later en de script werkt nog steeds !

Ik heb voor mezelf het volgende toegevoegd, ik hoef nu dus alleen maar naar m'n domeinnaam gaan en ik krijg te zien hoeveel ik NU kan besteden, niet helemaal precies en alles wat op 29/30/31 gebeurd naar 28 gezet(dag) :D.

Spaghetti code wat ik heb gemaakt maar wel erg handig :)


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
$flow = Array();
$flow[4][] = Array("rem" => 40);
$flow[8][] = Array("add" => 250);
$flow[20][] = Array("rem" => 4.98);
$flow[21][] = Array("add" => 72);
$flow[22][] = Array("rem" => 3.12);
$flow[24][] = Array("add" => 602.91);
$flow[27][] = Array("rem" => 398);
$flow[28][] = Array("rem" => 104.06);
$flow[28][] = Array("rem" => 150);

$today = date('j');

$balance = floatval(str_replace(",", ".", pq('#giro_0 td[align="right"]')->html()));

for($i = 1; $i <= 31; $i++){
    if($today > $i){
        continue;
    }
    if(isset($flow[$i])){
        foreach($flow[$i] as $ac){
            if(!empty($ac['rem'])){
                $balance -= floatval($ac['rem']);
            }
            if(!empty($ac['add'])){
                $balance += floatval($ac['add']);
            }
        }
    }
}
echo '<h1 style="font-size: 275px;">'.$balance.'</h1>';

[Reactie gewijzigd op donderdag 22 mei 2014 21:47]


Door Tweakers user mcjambi, maandag 26 mei 2014 21:52

Ik kan mijn reactie niet meer editen, maar met de code hierboven gaat het dus fout met saldo's boven 1k :(

Door Jeroen, maandag 25 augustus 2014 14:42

Ook ik gebruik dit nu om mijn twee rekening uit te vragen en in een soort xml file te zetten die ik vervolgens in C# omzet om in mijn keukentouchscreen te laten zien.

Werkt wel, maar wellicht kan het anders.

Door Tweakers user DieterKoblenz, woensdag 3 september 2014 18:26

Vraagje als iemand hier nog kijkt ;)

Is het ook mogelijk om de laatste x transacties weer te geven?

Door Tweakers user sossienl, woensdag 22 juli 2015 12:28

En weer een aantal maanden verder. Ik heb dit scriptje voor bijna 2 jaar met succes draaien om op basis van een nieuwe transactie een push notificatie naar mijn iPhone te sturen. Ideaal!

Helaas krijg ik sinds een paar dagen een 302, en geen resultaten meer. Ik ben zelf al aan de slag gegaan om te kijken of ik het kan oplossen. Maar nog niet geslaagd.

Het lijkt mis te gaan na de inlog stap, dus bij de regel:

// Let the ING servers do some stuff by simulating a frame-supporting browser request


Ik zie dat na een succesvolle inlog de response als volgt is:
<html>
<head>
<link rel="shortcut icon" href="/internetbankieren/gfx/favicon.ico" type="image/x-icon"/>
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">

<meta http-equiv="refresh" content="0;URL=https://bankieren.mijn.ing.nl/particulier/betalen/index" />

<title>Internetbankieren met Mijn ING</title>
</head>


</HTML>


De url gebruiken in de <meta refresh helpt me nog niet veel verder, aangezien ik op een 302 blijf hangen. Iemand hier nog actief en evt. een suggestie?

Door Tweakers user sossienl, woensdag 22 juli 2015 12:55

Inmiddels een work-around gevonden om toch tot de relevante data te komen.
De aanpassing zorgt er voor dat je een JSON object terug krijgt voor je acocunts (nummer/naam/saldo) en een apart JSON object voor je transacties!

Je zult de code die iets doet met de data in het JSON object zelf moeten schrijven, aangezien mijn custom code persoonlijk is. Die heb ik dus ook achterwege gelaten. Je eindigt feitelijk met een $acc_result voor account info en $tran_result voor transacties.

Vanaf line 45: // Let the ING servers do some stuff by simulating a frame-supporting browser request


code:
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
// Deze curl haalt de Account info op
    $curl_acc = curl_init(); 
    curl_setopt($curl_acc, CURLOPT_URL, 'https://bankieren.mijn.ing.nl/api/g-payments/accounts'); 
    curl_setopt($curl_acc, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl_acc, CURLINFO_HEADER_OUT, true); 
    curl_setopt($curl_acc, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl_acc, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($curl_acc, CURLOPT_COOKIEFILE, "cookie.txt"); 
    $acc_result = curl_exec($curl_acc); 
    curl_close($curl_acc); 

    // Deze curl haalt de Transacties op
    $curl_tran = curl_init(); 
    curl_setopt($curl_tran, CURLOPT_URL, 'https://bankieren.mijn.ing.nl/api/g-payments/transactions'); 
    curl_setopt($curl_tran, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl_tran, CURLINFO_HEADER_OUT, true); 
    curl_setopt($curl_tran, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl_tran, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($curl_tran, CURLOPT_COOKIEFILE, "cookie.txt"); 
    $tran_result = curl_exec($curl_tran); 
    curl_close($curl_tran); 

print_r($acc_result);   // Laat account data zien
print_r($tran_result);  // Laat transactiedata zien


// Zelf iets doen met de JSON objecten!


Door Tweakers user sossienl, woensdag 22 juli 2015 13:21

Overigens accepteert de url voor transacties ook deze 2 inputs:

ean = code die je kunt terug vinden in het JSON object per account. Dit resulteert dus in een lijst specifiek voor een account
h= ? Geen idee
limit = hoeveelheid transacties je terug wilt krijgen.

Door Tweakers user UnitedJunk, donderdag 10 september 2015 17:10

Werkt dit nog steeds?

Door Tweakers user remcoboy1479, maandag 2 november 2015 16:35

sossienl schreef op woensdag 22 juli 2015 @ 12:55:
Inmiddels een work-around gevonden om toch tot de relevante data te komen.
De aanpassing zorgt er voor dat je een JSON object terug krijgt voor je acocunts (nummer/naam/saldo) en een apart JSON object voor je transacties!

Je zult de code die iets doet met de data in het JSON object zelf moeten schrijven, aangezien mijn custom code persoonlijk is. Die heb ik dus ook achterwege gelaten. Je eindigt feitelijk met een $acc_result voor account info en $tran_result voor transacties.

Vanaf line 45: // Let the ING servers do some stuff by simulating a frame-supporting browser request


code:
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
// Deze curl haalt de Account info op
    $curl_acc = curl_init(); 
    curl_setopt($curl_acc, CURLOPT_URL, 'https://bankieren.mijn.ing.nl/api/g-payments/accounts'); 
    curl_setopt($curl_acc, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl_acc, CURLINFO_HEADER_OUT, true); 
    curl_setopt($curl_acc, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl_acc, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($curl_acc, CURLOPT_COOKIEFILE, "cookie.txt"); 
    $acc_result = curl_exec($curl_acc); 
    curl_close($curl_acc); 

    // Deze curl haalt de Transacties op
    $curl_tran = curl_init(); 
    curl_setopt($curl_tran, CURLOPT_URL, 'https://bankieren.mijn.ing.nl/api/g-payments/transactions'); 
    curl_setopt($curl_tran, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl_tran, CURLINFO_HEADER_OUT, true); 
    curl_setopt($curl_tran, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl_tran, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($curl_tran, CURLOPT_COOKIEFILE, "cookie.txt"); 
    $tran_result = curl_exec($curl_tran); 
    curl_close($curl_tran); 

print_r($acc_result);   // Laat account data zien
print_r($tran_result);  // Laat transactiedata zien


// Zelf iets doen met de JSON objecten!

Helaas krijg ik nu een 302 error met dit script..

Door Tweakers user $tranger, donderdag 3 december 2015 15:25

Remco, je moet ook dit script combineren met de eerste 45 regels van het script bovenaan de pagina. Hier werkt het weer, eindelijk, altijd handig! Wel krijg ik corrupte JSON data binnen, zijnde eerste 6 karakters die een vorig object lijken af te sluiten.

Voor de volledigheid het script ook als basis voor mijzelf maar weer eens geupdate. Dit is een volledige, werkende versie na aanpassen username en password. Deze versie geeft daarnaast ook mogelijk informatie over creditcards, spaarrekeningen en leningen en maakt geen gebruik meer van phpQuery.


code:
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
<pre><?
define('USERNAME','#user');
define('PASSWORD','#pass');

//Haal veldnamen van loginpagina op
$login = request('https://mijn.ing.nl/internetbankieren/SesamLoginServlet');
preg_match_all ('/<input[^>]+name="([^"]+)"/',$login,$inputs);

//Submit login pagina
request('https://mijn.ing.nl/internetbankieren/SesamLoginServlet',$inputs[1][0] . '=' . USERNAME . '&' . $inputs[1][1] . '=' . PASSWORD . '&' . $inputs[1][2] . '=off');

//Haal overzicht rekeningen op
$accounts = decode (request ('https://bankieren.mijn.ing.nl/api/g-payments/accounts'));
var_dump ($accounts);

//Haal transacties op
$trans = decode (request ('https://bankieren.mijn.ing.nl/api/g-payments/transactions'));
var_dump ($trans);

//Check welke "producten" de klant afneemt (CC, lening, spaarrekening)
$products = json_decode (request ('https://bankieren.mijn.ing.nl/app/p-personalisation/productbezit'),true);

//Haal CC info op in HTML
if ($products['pCards']){
    $cards = request ('https://bankieren.mijn.ing.nl/particulier/creditcard/index');
    //echo $cards;
}

//Haal informatie leningen op
if ($products['pLending']){
    $lendings = decode (request ('https://bankieren.mijn.ing.nl/api/consumerloans/loanaccounts'));
    var_dump ($lendings);
}

//Haal spaarrekening info op
if ($products['pSavings']){
    $savings = decode (request ('https://bankieren.mijn.ing.nl/api/savings-arrangements/savings-accounts?group=true'));
    var_dump ($savings);
}

//Decodeer defecte JSON
function decode($str){
    return json_decode (substr($str,6),true);
}

//Pagina verzoek
function request($url,$post = false){
    $curl = curl_init($url);
    if ($post)
        curl_setopt ($curl,CURLOPT_POSTFIELDS,$post);
    curl_setopt ($curl,CURLOPT_SSL_VERIFYPEER,false);
    curl_setopt ($curl,CURLOPT_FOLLOWLOCATION,true);
    curl_setopt ($curl,CURLOPT_RETURNTRANSFER,true);
    curl_setopt ($curl,CURLOPT_COOKIEFILE,'cookie.txt');
    curl_setopt ($curl,CURLOPT_COOKIEJAR,'cookie.txt');
    $result = curl_exec($curl);
    curl_close($curl);
    return $result;
}
?></pre>

[Reactie gewijzigd op vrijdag 4 december 2015 04:10]


Door Tweakers user MadMark, zondag 27 december 2015 11:42

Geweldig script! Dank hiervoor. Ga maar eens een mooi projectie starten om mijn administratie in een eigen omgeving bij te houden.

Door Tweakers user DieterKoblenz, maandag 16 mei 2016 09:35

Vroeger gebruikt maar helaas krijg ik het niet meer aan de praat. Kan iemand mij de juiste kant op wijzen om het weer te laten werken? Met bovenstaande krijg ik alleen NULL NULL en er staat toch iets meer op de rekening...

Lijkt iets te maken te hebben met de cookie file die niet wordt aangemaakt. Rechten zijn wel goed..

Edit: Fixed. Toch een spannend rechten issue op mn synology, werkt!

[Reactie gewijzigd op maandag 16 mei 2016 17:19]


Door Tweakers user Gagchiel, woensdag 6 juli 2016 16:36

Leuk! Ben nu bezig om een eigen omgeving op te zetten in combinatie met Google Sheets :) .
Via Python & Robobrowser geraak ik binnen, maar loop momenteel tegen volgende beperking aan:

De API-call 'https://bankieren.mijn.ing.nl/api/g-payments/transactions' geeft enkel de transacties terug van 1 account, terwijl ik er meerdere heb binnen mijn ING portfolio.

Ik wil graag de transactieinfo van de andere accounts opvragen.
Iemand een idee welke API-call te gebruiken hiervoor?

Door Tweakers user Gagchiel, donderdag 7 juli 2016 13:55

Is mij ondertussen gelukt:

1. Haal de EAN code van de accounts op waarvan je de transacties wil bekijken via:
'https://bankieren.mijn.ing.nl/api/g-payments/accounts'

2. Vervolgens kan je de transacties per account ophalen via:
https://bankieren.mijn.in...tions?a=20&ean=<opghaalde EAN code invoegen>

Door Tweakers user sossienl, donderdag 4 augustus 2016 11:40

Overigens is er het een en ander veranderd bij ING, zonder de juiste header info krijg je foutmeldingen terug.

Persoonlijk gebruik ik CURL in PHP om alles te verwerken. Voeg deze regel toe aan PHP om je transacties te krijgen (dus laatste call):

curl_setopt($curl_acc, CURLOPT_HTTPHEADER, array(
'Pragma: no-cache',
'DNT: 1',
'X-CookiesOK: I explicitly accept all cookies',
'Accept-Language: en-GB,en;q=0.8,en-US;q=0.6,nl;q=0.4',
'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36',
'VND.ING.EXT.CTX-APP_ID: P.PaymentsOverview',
'Referer: https://bankieren.mijn.ing.nl/particulier/betalen/index',
''
));

Door Tweakers user yannickhaacke, donderdag 11 augustus 2016 14:33

Ik krijg helaas nog steeds foutmeldingen bij de transacties-call, ook met aanvulling van de headers zoals aangegeven door sossienl. Iemand ideeŽn?
De accounts-call doet het nog prima bij mij.

Door Tweakers user sweebee, zondag 16 oktober 2016 15:55

Transacties werken niet meer. Weet iemand hier een oplossing voor?

Door Tweakers user Wbdsgnr, donderdag 8 december 2016 19:38

@yannick en @sweebee

De link en methode is enigszins veranderd. De link is nu

"https://bankieren.mijn.ing.nl/api/reporting/transactions?a=21&ean=...."
waarbij de ean is in te vullen is met de waarde die je hebt gevonden in je accounts query.

Vervolgens moet je ook een "&c=" toevoegen bij de volgende call waarbij je de 'cursor' waarde invult die je hebt gekregen bij de eerste call.

Verder zijn een aantal velden anders gaan heten. type heet nu 'transactionType' en date heet nu 'transactionDate'

Door Tweakers user yannickhaacke, maandag 19 december 2016 15:04

@Wbdsgnr

Held! Dank voor de uitleg, ik heb het weer werkend!

Om te kunnen reageren moet je ingelogd zijn. Via deze link kun je inloggen als je al geregistreerd bent. Indien je nog geen account hebt kun je er hier ťťn aanmaken.