Example #1
0
function GetCardhRefValueSber($n, $outer = false)
{
    $CardhRefValueSber = nodeContent($n);
    $CardhRefValue = substr($CardhRefValueSber, 0, strpos($CardhRefValueSber, '"'));
    return $CardhRefValue;
}
 /**
  * @param string $LoginName
  * @param string $Password
  * @return string $XML
  */
 function SDMRestAccount($LoginName, $Password)
 {
     // Create the logger
     $logger = new Logger('logger_service');
     // Now add some handlers
     $logger->pushHandler(new StreamHandler(__DIR__ . '/Log/service.log', Logger::DEBUG));
     $logger->pushHandler(new FirePHPHandler());
     // You can now use your logger
     $logger->addInfo('Start running SDMRestAccount class');
     $sLogin = $LoginName;
     $sPassword = $Password;
     $postData = 'password='******'&username='******'https://retail.sdm.ru/logon?ReturnUrl=%2f', true, $postData, false, '', 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)', 60);
     if (!$data) {
         return 'нет ответа от сервера';
     }
     //echo($data);
     $cookie = substr($data, strpos($data, 'cookie=') + 7, strlen($data));
     if (!$cookie) {
         return 'не смогли залогиниться - нет кукисов';
     }
     //echo($cookie);
     $data = http_request('https://retail.sdm.ru/', false, '', false, $cookie, 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)', 60);
     if (!$data) {
         return 'не можем получить информацию по счетам';
     }
     $body = substr($data, strpos($data, 'body=') + 5, strlen($body) - 8);
     //echo($body);
     $doc = new DOMDocument();
     libxml_use_internal_errors(true);
     $doc->loadHTML($body);
     libxml_clear_errors();
     $xpath = new DOMXPath($doc);
     $xml = new DOMDocument('1.0', 'UTF-8');
     // $xml = new DOMDocument('1.0','CP1251');
     $xmlRoot = $xml->createElement('GetAccountRestAndStmSDM');
     $xml->appendChild($xmlRoot);
     $TableTrAccount = $xpath->query('//div[@class="Content-Center"]/div[1]//table/tr/td');
     $TableTrCard = $xpath->query('//div[@class="Content-Center"]/div[2]//table/tr/td');
     $CountAccount = $TableTrAccount->length / 4;
     $CountCard = $TableTrCard->length / 6;
     //По счетам
     $xmlAccountList = $xml->createElement("AccountsList");
     $xmlAccountListAttribute = $xml->createAttribute("count");
     $xmlAccountListAttribute->value = $CountAccount;
     $xmlAccountList->appendChild($xmlAccountListAttribute);
     $xmlRoot->appendChild($xmlAccountList);
     for ($i = 0; $i < $CountAccount; $i++) {
         $xmlAccount = $xml->createElement("Account");
         $xmlAccountList->appendChild($xmlAccount);
         for ($j = 0; $j < 4; $j++) {
             //  printf('i='.$i.';j='.$j.';'.nodeContent($TableTrAccount->item($i*4+$j)).'<br>');
             switch ($j) {
                 case 0:
                     $xmlCurrCode = $xml->createElement("CurrCode");
                     $xmlAccount->appendChild($xmlCurrCode);
                     $xmlCurrCode->nodeValue = str_replace('"/', '', str_replace(' ', '', str_replace(' "ico-l" ', '', str_replace('img src="/img/ico_usd.gif" width="16" height="19" alt="', '', str_replace('img src="/img/ico_rur.gif" width="16" height="19" alt="', '', str_replace('img src="/img/ico_eur.gif" width="16" height="19" alt="', '', nodeContent($TableTrAccount->item($i * 4 + j))))))));
                     break;
                 case 1:
                     $xmlAccountName = $xml->createElement("AccountName");
                     $xmlAccount->appendChild($xmlAccountName);
                     $xmlAccountName->nodeValue = nodeContent($TableTrAccount->item($i * 4 + j + 1));
                     break;
                 case 2:
                     $xmlRest = $xml->createElement("Rest");
                     $xmlAccount->appendChild($xmlRest);
                     $xmlRest->nodeValue = nodeContent($TableTrAccount->item($i * 4 + $j));
                     break;
                 case 3:
                     $xmlAcountID = $xml->createElement("AcountID");
                     $xmlAccount->appendChild($xmlAcountID);
                     $xmlAcountID->nodeValue = str_replace('" "ajax-window"История платежей/a', '', str_replace('a href="/finances/account/', '', nodeContent($TableTrAccount->item($i * 4 + $j))));
                     break;
                 default:
                     //   Xml_.WriteStartElement("Param" + (j + 1).ToString());
                     break;
             }
         }
     }
     //По картам
     $xmlCardList = $xml->createElement("CardList");
     $xmlCardListAttribute = $xml->createAttribute("count");
     $xmlCardListAttribute->value = $CountCard;
     $xmlCardList->appendChild($xmlCardListAttribute);
     $xmlRoot->appendChild($xmlCardList);
     for ($i = 0; $i < $CountCard; $i++) {
         $xmlCard = $xml->createElement("Cards");
         $xmlCardList->appendChild($xmlCard);
         for ($j = 0; $j < 6; $j++) {
             //  printf('i='.$i.';j='.$j.';'.nodeContent($TableTrCard->item($i*6+$j)).'<br>');
             switch ($j) {
                 case 0:
                     $xmlCurrCodeCard = $xml->createElement("CurrCode");
                     $xmlCard->appendChild($xmlCurrCodeCard);
                     $xmlCurrCodeCard->nodeValue = str_replace('"/', '', str_replace(' ', '', str_replace(' "ico-l" ', '', str_replace('img src="/img/ico_usd.gif" width="16" height="19" alt="', '', str_replace('img src="/img/ico_rur.gif" width="16" height="19" alt="', '', str_replace('img src="/img/ico_eur.gif" width="16" height="19" alt="', '', nodeContent($TableTrCard->item($i * 6 + $j))))))));
                     break;
                 case 1:
                     $xmlCardType = $xml->createElement("CardType");
                     $xmlCard->appendChild($xmlCardType);
                     $xmlCardType->nodeValue = str_replace(' ', '', str_replace('img src=img/ico_mastercard.gif" width="32" height="20" alt="', '', str_replace('"/', '', str_replace(' "ico-r"', '', str_replace('img src="/img/ico_visa.gif" width="32" height="20" alt="', '', nodeContent($TableTrCard->item($i * 6 + $j)))))));
                     break;
                 case 2:
                     $xmlCardID = $xml->createElement("CardID");
                     $xmlCard->appendChild($xmlCardID);
                     $xmlCardID->nodeValue = str_replace('"MASTERCARD GOLD', '', str_replace('"VISA PLATINUM', '', str_replace('"VISA GOLD', '', str_replace('"VISA CLASSIC', '', str_replace('"MASTERCARD ELECTRONIC', '', str_replace('"VISA ELECTRON', '', str_replace('/a', '', str_replace('a "ajax-window" href="/finances/card/', '', nodeContent($TableTrCard->item($i * 6 + $j))))))))));
                     break;
                 case 4:
                     $xmlRestCard = $xml->createElement("Rest");
                     $xmlCard->appendChild($xmlRestCard);
                     $xmlRestCard->nodeValue = nodeContent($TableTrCard->item($i * 6 + $j));
                     break;
                 case 5:
                     $xmlCardClose = $xml->createElement("CloseCard");
                     $xmlCard->appendChild($xmlCardClose);
                     $xmlCardClose->nodeValue = str_replace('срок действия: ', '', nodeContent($TableTrCard->item($i * 6 + $j)));
                     break;
                 default:
                     break;
             }
         }
     }
     /*
         foreach ($TableTrAccount as $tag) {
              echo $tag->C14N();
             echo nodeContent($tag);
            }
     
         foreach ($TableTrAccount as $tag)
         {
             echo ($tag->nodeValue.'<br>');
         }
         
             foreach ($TableTrCard as $tag)
         {
             echo ($tag->nodeValue.'<br>');
         }
     */
     //return cp1251_to_utf8($xml->saveXML());
     $logger->addInfo('Good result: ' . $xml->saveXML());
     $logger->addInfo('End SDMRestAccount class');
     return $xml->saveXML();
 }
 /**
  * @param string $LoginName
  * @param string $Password
  * @return string $XML
  */
 public function SBERRestAccount($LoginName, $Password)
 {
     $Dir_path = str_replace('\\', '/', __DIR__);
     $logger = new Logger('logger_service');
     $logger->pushHandler(new StreamHandler($Dir_path . '/../logs/sber_json_debbug-' . $LoginName . '.log', Logger::DEBUG, false));
     $logger->pushHandler(new StreamHandler($Dir_path . '/../logs/sber_json_error-' . $LoginName . '.log', Logger::WARNING, false));
     $logger->pushHandler(new StreamHandler($Dir_path . '/../logs/sber_json_info-' . $LoginName . '.log', Logger::INFO, false));
     $logger->pushHandler(new FirePHPHandler());
     $logger->addInfo('------------------------------------------------------------------------------------------');
     $logger->addInfo('Start running SBERRestAccount class');
     $deviceprint = "deviceprintversion=3.4.0.0_2&pm_fpua=mozilla/5.0 (windows nt 6.3) applewebkit/537.36 (khtml, like gecko) chrome/36.0.1985.143 safari/537.36|5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36|Win32&pm_fpsc=24|1280|1024|984&pm_fpsw=&pm_fptz=4&pm_fpln=lang=ru|syslang=|userlang=&pm_fpjv=1&pm_fpco=1&pm_fpasw=widevinecdmadapter|pepflashplayer|internal-remoting-viewer|ppgooglenaclpluginchrome|pdf|npspwrap|npbssplugin|npgoogleupdate3|npdeployjava1|npjp2|npmeetingjoinpluginoc|npvlc|npitunes|npctrl&pm_fpan=Netscape&pm_fpacn=Mozilla&pm_fpol=true&pm_fposp=&pm_fpup=&pm_fpsaw=1280&pm_fpspd=24&pm_fpsbd=&pm_fpsdx=&pm_fpsdy=&pm_fpslx=&pm_fpsly=&pm_fpsfse=&pm_fpsui=&pm_os=Windows&pm_brmjv=36&pm_br=Chrome&pm_inpt=&pm_expt=";
     $htmlinjection = 'htmlinjection={"functions":{"names":[],"excluded":{"size":0,"count":0},"truncated":false},"inputs":[],"iframes":[],"scripts":[],"collection_status":3}';
     $manvsmachinedetection = 'manvsmachinedetection=1,1,INPUT:text,6;2,2,INPUT:text,22@1,3,0;1,1,0;1,1,0;1,1,0;1,1,0;1,1,0;1,1,0;1,1,0;1,4,0@0,1409563058988,0';
     $postData = urldecode('field(login)=' . $LoginName . '&field(password)=' . $Password . '&operation=button.begin&' . $deviceprint . '&' . $htmlinjection . '&' . $manvsmachinedetection);
     //$postData=  urldecode('field(login)='.$LoginName.'&field(password)='.$Password).'&operation=button.begin';
     //$logger->addInfo('>>>>>'.$postData);
     $data = http_requestSDM('https://online.sberbank.ru/CSAFront/index.do', false, '', false, '', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537', 30);
     if (!$data) {
         $logger->addError('не можем получить информацию по счетам URL 1');
         return 'не можем получить информацию по счетам';
     }
     $logger->addDebug('DATA1:' . $data . 'END DATA1');
     $cookie = substr($data, strpos($data, 'cookie=') + 7, strlen($data));
     $logger->addInfo('COOKIE1:' . $cookie . 'END DATA 1');
     $data = http_requestSDM('https://online.sberbank.ru/CSAFront/login.do', true, $postData, false, $cookie, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537', 30);
     if (!$data) {
         $logger->addError('не можем получить информацию по счетам URL 2');
         return 'не можем получить информацию по счетам';
     }
     $logger->addDebug('DATA2:' . $data . 'END DATA2');
     $URL_WITH_TOKEN = str_replace(';cookie=', '', str_replace('">', '', strstr($data, 'https')));
     if (!$URL_WITH_TOKEN) {
         $logger->addError('нет кукисов - возможно введен неверный пароль URL_WITH_TOKEN!');
         return 'нет кукисов - возможно введен неверный пароль!';
     }
     $logger->addInfo($URL_WITH_TOKEN);
     $data = http_requestSDM($URL_WITH_TOKEN, true, '', false, $cookie, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537', 30);
     if (!$data) {
         return 'не можем получить информацию по счетам URL 3';
     }
     $cookie = substr($data, strpos($data, 'cookie=') + 7, strlen($data));
     $logger->addInfo('COOKIE3:' . $cookie);
     $logger->addDebug('DATA3:' . $data . 'END DATA 3');
     //$data=  http_request('https://online.sberbank.ru/PhizIC/private/accounts.do',true, '' ,false,$cookie,'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36',60);
     //$data=  http_requestSDM('https://online.sberbank.ru/PhizIC/private/cards/list.do',true, '' ,false,$cookie,'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537',30);
     $data = http_requestSDM('https://node2.online.sberbank.ru/PhizIC/private/cards/list.do', true, '', false, $cookie, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537', 30);
     if (!$data) {
         return 'не можем получить информацию по счетам';
     }
     $logger->addDebug('DATA4:' . $data . 'END DATA 4');
     $body = substr($data, strpos($data, 'body=') + 5, -8);
     //  echo($body);
     if (!$body) {
         return 'не можем получить информацию по счетам';
     }
     $doc = new DOMDocument();
     libxml_use_internal_errors(true);
     $doc->loadHTML($body);
     libxml_clear_errors();
     $xpath = new DOMXPath($doc);
     $CardProductName = $xpath->query('//div[@class="productCover activeProduct"]//span[@class="mainProductTitle mainProductTitleLight"]');
     //$CardProductName = $xpath->query('//span[@class="mainProductTitle mainProductTitleLight"]');
     $CardNumber = $xpath->query('//div[@class="accountNumber decoration-none"]');
     $CardAmount = $xpath->query('//span[@class="overallAmount nowrap"] | //span[@class="overallAmount nowrap negativeAmount"]');
     $CardhRef = $xpath->query('//div[@class="productName"]//a[contains(@href,"/PhizIC/private/cards/info.do?id=")]');
     $CardsArray = '';
     $ArrayAccountID = '';
     $logger->addInfo('Count CardProductName=' . count($CardProductName));
     $logger->addInfo('Count CardNumber=' . count($CardNumber));
     $logger->addInfo('Count CardAmount=' . count($CardAmount));
     $logger->addInfo('Count CardhRef=' . count($CardhRef));
     $i = 0;
     foreach ($CardProductName as $CardProductName_) {
         $logger->addInfo('for I=' . $i);
         $logger->addInfo('CardProductName:' . GetCardProductNameSber($CardProductName_));
         $logger->addInfo('CardNumber:' . GetCardNumberSber($CardNumber->item($i)));
         $logger->addInfo('CardAmount:' . nodeContent($CardAmount->item($i)));
         $logger->addInfo('CardhRef:' . GetCardhRefValueSber($CardhRef->item($i)));
         $CardsArray[] = GetCardProductNameSber($CardProductName->item($i));
         $CardsArray[] = GetCardNumberSber($CardNumber->item($i));
         $CardsArray[] = nodeContent($CardAmount->item($i));
         $CardsArray[] = GetCardhRefValueSber($CardhRef->item($i));
         $ArrayAccountID[] = GetCardhRefValueSber($CardhRef->item($i));
         //Попробуем с кодами валют
         $logger->addInfo('CurrCode:' . CurrCodeSber($CardAmount->item($i)));
         $CardsArray[] = CurrCodeSber($CardAmount->item($i));
         $i++;
     }
     $json = array("AccountsList" => array(), "CardList" => array(), "AcountStatements" => array());
     $logger->addInfo('>>>>>RealResult starting');
     $logger->addInfo('Count Array=' . count($CardsArray));
     for ($i = 0; $i < count($CardsArray) / 5; $i++) {
         for ($j = 0; $j < 5; $j++) {
             //echo ('i='.$i.';j='.$j.'<br>');
             switch ($j) {
                 case 0:
                     $logger->addInfo('CardProductName:' . $CardsArray[$i * 5 + $j]);
                     $CardType = $CardsArray[$i * 5 + $j];
                     break;
                 case 1:
                     $logger->addInfo('CardNumber:' . $CardsArray[$i * 5 + $j]);
                     $CardNumber = $CardsArray[$i * 5 + $j];
                     break;
                 case 2:
                     $logger->addInfo('CardAmount:' . $CardsArray[$i * 5 + $j]);
                     $Rest = str_replace(",", ".", str_replace(' ', '', $CardsArray[$i * 5 + $j]));
                     break;
                 case 3:
                     $logger->addInfo('CardhRef:' . $CardsArray[$i * 5 + $j]);
                     $CardID = $CardsArray[$i * 5 + $j];
                     break;
                 case 4:
                     $logger->addInfo('CurrCode:' . $CardsArray[$i * 5 + $j]);
                     $CurrCode = $CardsArray[$i * 5 + $j];
                     break;
                 default:
                     break;
             }
         }
         if ($CardType != '') {
             $json["CardList"][] = array("CardType" => $CardType, "CardNumber" => $CardNumber, "Rest" => $Rest, "CardID" => $CardID, "CurrCode" => $CurrCode);
         }
     }
     //https://online.sberbank.ru/PhizIC/private/cards/print.do?id=9045783&printAbstract=true
     /*
     foreach ($ArrayAccountID as $ArrayAccountID_)
         {
       //  sel:c:9045783
     //fromDateString:01/01/2014
     //toDateString:03/03/2014
       //  $postData= 'fromDateString=01/01/2014&toDateString=03/0132014&sel:c:9045783';
         $data=  http_request('https://online.sberbank.ru/PhizIC/private/accounts/print.do?sel=c:'.$ArrayAccountID_.'&fromDateString=01/01/2014&toDateString=03/03/2014',true, '' ,false,$cookie,'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537',30);
         if (!$data) {
                $logger->addError('не можем получить информацию по выписке');
                //return 'не можем получить информацию по выписке';
            }
         $logger->addDebug('DATA5_STATEMENT1:'.$data.'END DATA5_STATEMENT1');
     
     
          $body=substr($data,strpos($data, 'body=')+5,-8);
          $logger->addDebug('DATA5:'.$body.'END DATA 5');
        
          $doc->loadHTML($body);
          libxml_clear_errors();
          $xpath = new DOMXPath($doc);
     
     $logger->addInfo('STATEMENT7:');
           //Выписка                      
          $TableTrStatement = $xpath->query('//table');
                    foreach ($TableTrStatement as $tag1) {
                       $logger->addInfo('NodeContent1:'.($tag1->nodeValue));
               }  
              
         
         }*/
     $logger->addInfo('Good result: ' . Json::json_encode($json));
     $logger->addInfo('End SBERRestAccount class');
     return Json::json_encode($json);
 }