Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mBank - logowanie z automatu
Forum PHP.pl > Forum > PHP
Spoky
Witam. Czy ktos z forumowiczow walkowal ten temat? Potrzebuje stworzyc na wlasne potrzebny taki automato do logowania sie i pobierania wyciagu z danego okresu celem dalszej obrobki. Napisalem kawalek kodu, ale za cholere nie chce dzialac. kiedys pisalem do pkointeligo i dzialalo bez problemu, do mbanku dobrac sie nie moge :-(
mam takie cus. Mysle, ze strony obrobilem wszystkie dane, nie wiem co z info z ciastkami. Czy jest jakis sposob zeby przesledzic dokladniej, co i jak po kolei?

Kod
<?php

function pobierz_zaw($url)
{  
  
  $czytaj = curl_init();
  curl_setopt ($czytaj, CURLOPT_URL, $url);
  curl_setopt ($czytaj, CURLOPT_HEADER, false);
  curl_setopt($czytaj, CURLOPT_SSL_VERIFYPEER, false); //SSL
  curl_setopt($czytaj, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies1.txt');
  curl_setopt($czytaj, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies2.txt');
  ob_start();
  curl_exec ($czytaj);
  curl_close ($czytaj);
  $file = ob_get_contents();
  //print $file;
  ob_end_clean();
  return $file;
}


function formularz_logowanie($url,$nsid, $nstate, $nvalid, $akt_data)
{  
  
  $czytaj = curl_init();

$curlPost = array();
$curlPost['customer'] = ' ';
$curlPost['password'] = ' ';
$curlPost['__EVENTVALIDATION'] = $nvalid;
$curlPost['seed'] = $nsid;
$curlPost['localDT'] = $akt_data;
$curlPost['__PARAMETERS'] = '';
$curlPost['sCounter'] = '0';
$curlPost['__STATE'] = $nstate;
$curlPost['__VIEWSTATE'] = '';
$curlPost['menu'] = 'true';
$user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9) Gecko/2008052906 Firefox/3.0";

curl_setopt ($czytaj, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($czytaj, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($czytaj, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($czytaj, CURLOPT_POST, 1);
curl_setopt($czytaj, CURLOPT_FAILONERROR, true);
curl_setopt($czytaj, CURLOPT_POSTFIELDS, $curlPost);
curl_setopt($czytaj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($czytaj, CURLOPT_USERAGENT, $user_agent);
curl_setopt ($czytaj, CURLOPT_URL, $url);

curl_setopt($czytaj, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies1.txt');
curl_setopt($czytaj, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies2.txt');


  ob_start();
  $data = curl_exec ($czytaj);
  
  curl_close ($czytaj);
  $file = ob_get_contents();
  ob_end_clean();
  print $data;
  return $file;
}


$url='https://www.mbank.com.pl/';
$logowanie = pobierz_zaw($url);

preg_match("/name=\"seed\" id=\"seed\" value=\"(.*?)\" \/>/", $logowanie, $sid);
$nsid = $sid[1];

preg_match("/name=\"__EVENTVALIDATION\" id=\"__EVENTVALIDATION\" value=\"(.*?)\" \/>/", $logowanie, $valid);
$nvalid = $valid[1];

preg_match("/name=\"__STATE\" id=\"__STATE\" value=\"(.*?)\" \/>/", $logowanie, $state);
$nstate = $state[1];
$akt_data = date("Y-m-d H:i");

$zalogowany = formularz_logowanie($url,$nsid, $nstate, $nvalid, $akt_data);
print $zalogowany;
?>
dr_bonzo
Firefox + firebug + live headers [podglad naglowkow]
mozliwe ze ciacha sa JSem ustawiane, wiec w naglowkach nie zobaczysz set-cookie
Spoky
Chyba nie dam rady, bez pomocy, za cienki jestem. Poza tym przydaloby sie jeszcze cos do sledzenia zmiana na bierzaco... Wiec tak
Kod
https://www.mbank.com.pl/
   GET / HTTP/1.1
   Host: www.mbank.com.pl
   User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15
   Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
   Accept-Language: pl,en-us;q=0.7,en;q=0.3
   Accept-Encoding: gzip,deflate
   Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7
   Keep-Alive: 300
   Connection: keep-alive
   Cookie: mb-logout=3; mBankLang1140=P; mBank1=TEMP42028753652D9D994A72541F7F8CF80F; wnd=notset; mBank2=OBMeE6x29_vxJ1BCmz7ufw==
   HTTP/1.x 200 OK
   Cache-Control: pre-check=0
   Keep-Alive: timeout=3, max=993
   Pragma: no-cache
   Content-Length: 15978
   Content-Type: text/html; charset=iso-8859-2
   Expires: Mon, 26 Jul 1997 05:00:00 GMT
   X-Powered-By: ASP.NET
   X-AspNet-Version: 2.0.50727
   Set-Cookie: mBank1=TEMP5D6E0DEF64096A386CF0542E3AB065DA; path=/; secure
   Set-Cookie: mBankLang1140=P; expires=Sat, 09-Apr-2011 18:40:24 GMT; path=/
   Server: mBank Web Server
   Date: Sun, 13 Jul 2008 18:40:24 GMT


Nie znam sie na ciastkach, ale
curl_setopt($czytaj, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies1.txt')
zapisuje mi

Kod
www.mbank.com.pl    FALSE    /    TRUE    0    mBank1    TEMP385BD4B494D095F037BD68B7BEBD7AE6
www.mbank.com.pl    FALSE    /    FALSE    1302363451    mBankLang1140    P


Tylko co dalej z tym. Byc moze sa to kluczowe dane. Jak pisalem wyzej, wszystkie pola hidden, ktore sa ustawiane po zaladowaniu strony logowania orzymuja jakies wartosci maja te wartosci przypisane. Czyli otwiera, wyszukuje wartosci, nadaje zmiennym w form te wartosci i wysylam. Przypuszczam, ze javascript i cookie tez ma tu cos do powiedzenia.
dr_bonzo
Curl sam te ciacha potem wysle [ale mozesz miec takie ustawione JavaScriptem, ktorych curl nie obsluzy]
Zobacz jakie ciacha sa ustawiane responsem:
Kod
Set-Cookie: ....

a jakie potem wysylane w requescie
Kod
Cookie:...

jak te same to nie ma JSowych ciach

Wyslij formularz logowania i zobacz jakie dane ida POST'em, przez co nie musisz [prawdopodobnie] analizaowac id JS'a, tylko podstawiasz odpowiednie dane na sztywno.

i odtworz "wszystkie" naglowki
Kod
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15
   Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
   Accept-Language: pl,en-us;q=0.7,en;q=0.3
   Accept-Encoding: gzip,deflate
   Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7

bo czasem te dane tez weryfikuja w czasie logowania.
Spoky
specjalnie przekleilem http headers :-)

Kod
pierwsze laczenie
           <span class="postcolor">https://www.mbank.com.pl/
              GET / HTTP/1.1
              Host: www.mbank.com.pl
              User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15
              Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
              Accept-Language: pl,en-us;q=0.7,en;q=0.3
              Accept-Encoding: gzip,deflate
              Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7
              Keep-Alive: 300
              Connection: keep-alive
           <font color="#ff0000">    <font face="Arial Black">Cookie: mb-logout=3; mBankLang1140=P;  mBank1=TEMP42028753652D9D994A72541F7F8CF80F; wnd=notset;</font>  mBank2=OBMeE6x29_vxJ1BCmz7ufw==</font>
              HTTP/1.x 200 OK
              Cache-Control: pre-check=0
              Keep-Alive: timeout=3, max=993
              Pragma: no-cache
              Content-Length: 15978
              Content-Type: text/html; charset=iso-8859-2
              Expires: Mon, 26 Jul 1997 05:00:00 GMT
              X-Powered-By: ASP.NET
              X-AspNet-Version: 2.0.50727
<font color="#ff0000">Set-Cookie: mBank1=TEMP5D6E0DEF64096A386CF0542E3AB065DA; path=/; secure
              Set-Cookie: mBankLang1140=P; expires=Sat, 09-Apr-2011 18:40:24 GMT; path=/</font>
              Server: mBank Web Server
              Date: Sun, 13 Jul 2008 18:40:24 GMT</span>

Tak wlasnie wyglada zaladowanie strony logowania przez przegladarke.
Set-Cookie: zmienne zdaja sie byc zapisywane w cookie - mbank1 oraz mBankLang - curl zapisuje.
Podsumowujac: najpierw w skrypcie lacze sie, pobieram ciacho, parsuje zmienne z formularz, ktore sa generowane (te pola ukryte w formularzu)
potem przekazuje te zmienne postem i jednoczesnie odsylam ciacho poleceniem
Kod
curl_setopt($czytaj, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies.txt');

I do tego miejsca powinno byc ok, dlaczego wiec wciaz mam alarm bezpieczenstwa?
Co widac w kodzie tego errora - moze to nic, a moze jednak cos - nazwa stylu, wiele mowiaca
Kod
         <table cellspacing="0" cellpadding="0" border="0" align="center" style="width: 70%; border-collapse: collapse;" <font color="#ff0000">class="messageNoSession"></font>
                         <caption class="error">
                             Błąd systemu
                         </caption><tbody><tr>


Heh, ciezko tam dojsc :-) Normalnie forteca ;-) No chyba ze blad pojawia sie w momencie, gdy powinny byc zapisane kolejne ciacha i kolejne odeslane. (tuz po zalogowaniu)
zsedc
Któryś raz przymierzam się do tego i zawsze natrafiam na ten temat i mi się odechciewa:)

Ostatnio przyszła mi do głowy trochę inna metoda, żeby zamiast CURL zastosować AutoIt http://www.autoitscript.com/autoit3/index.shtml - jest bardzo prosty w obsłudze. Za pomocą AutoIt zgrywamy sobie na dysk historię z mBanku w postaci CSV, następnie upload pliku na serwer gdzie już mamy PHP, potem tylko http://pl2.php.net/fgetcsv i do bazy. Biorąc pod uwagę ciągłe zmiany jakie robi mBank to w ten sposób będzie je najłatwiej śledzić, może nawet ich nie zauważymy.

Drugie rozwiązanie to zamówienie w mBanku wysyłania historii na skrzynkę mailową, a następnie za pomocą imap wchodzisz na skrzynkę pobierasz maila od mBanku, parsujesz i do bazy. Wada jest taka, że mBank taki mail wysyła tylko raz dziennie z historią kończącą się na dniu wczorajszym - tak więc dla ewentualnych klientów np sklepu internetowego oznacza to wszystko o jeden dzień później.

I ostatni pomysł to zamawiamy sobie usługę informowania przez sms, potem http://www.gnokii.org/ i do bazy.

I jeszcze jeden sposób to darmowy http://www.eportfel.com/?q=ePortfel
kacpero1094
mBank raczej jest zabezpieczony przed takimi rzeczami.
Ociu
Widziałeś datę ? Odgrzewasz stary kotlet.
zsedc
To bardzo ważny kotlet:) i wymaga podgrzewania, aż w końcu zauważy go dział IT z mBanku smile.gif
askone
Hmmm

może już/właśnie zauważył.... winksmiley.jpg
kudawa666
No właśnie, taki stary kotlet a wciąż aktualny. Ludzie na wycieczki w kosmos latają a za górami za lasami w ciemnogrodzie pewien dział IT w pewnym banku wciąż nie zauważył, że zwykłemu klientowi potrzebne jest API do pobierania historii operacji... eh....
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.