06.09.2018 06:47
OlegON
 
Цитата:
KirillHome CURLOPT_SSL_VERIFYHOST, false
а, кстати, почему?
06.09.2018 10:27
KirillHome
 
Цитата:
OlegON а, кстати, почему?
Хороший вопрос!

У меня есть два ответа:
  1. Я curl вообще впервые увидел (а с php - делал вторую задачу в жизни; первая была - из того, что выводит DOS-программа - сделать pdf с подписями и печатями). Поэтому - "работает - не трожь".
  2. А надо бы посмотреть, разобраться - а что-же я такого "накопипастил". И, возможно, большую часть переделать
06.09.2018 11:17
OlegON
 
Ну, процитированная опция говорит, что несмотря на то, что ты подключаешься по защищенному соединению, сертификат этого соединения надо игнорировать. Т.е. кто бы на том конце не ответил, ты готов слить ему инфу.
01.12.2018 23:14
ringru
 
Господа, поделитесь пожалуйста описанием API. В открытых источниках не ищется, а хочется проверять результат фискализации и на стороне ОФД.
02.12.2018 01:30
KirillHome
 
Цитата:
ringru Господа, поделитесь пожалуйста описанием API. В открытых источниках не ищется, а хочется проверять результат фискализации и на стороне ОФД.
В этой же теме
05.06.2019 21:11
KirillHome
 
Сегодня столкнулся с тем, что перестал получать данные из ОФД.
полез разбираться - касса перестала передавать.

дополнил скрипт получения информации.:

Код:
<?php
      //Информация по разным кассам
      //Источник
      //https://olegon.ru/showthread.php?t=27917
      function myformat($mydig)
      {
               //123 567.90
               $mystr=number_format($mydig, 2, '.', "'");
               $mystr=str_pad($mystr,10," ",STR_PAD_LEFT);
               return $mystr;
      }


      function vyvd($shiftNumber, $strvyv, $strres, $nalvyv, $SummaPrZ, $SummaPrNalZ, $SummaPrKartaZ, $KolvoProd, $KolvoVz, $SummaPr, $SummaVz, $SummaPrNal, $SummaVzNal, $SummaPrKarta, $SummaVzKarta)
      {
               //$strvyv = "Смена = ".$shiftNumber."\n";
               //$strres .=$strvyv;
               //На экран - только последню смену
               if ($nalvyv<1)
                  {print $strvyv;}
               //Если есть - выведем сводную информацию
               if ($SummaPrZ<>0 or $SummaPrNalZ<>0 or $SummaPrKartaZ<>0)
               {
                  $strvyv = " Продажи (сумма за смену)       = " . myformat($SummaPrZ) . "\n";
                  $strres .=$strvyv;
                  if ($nalvyv<1)
                     {print $strvyv;}
                  $strvyv = "    Наличными (сумма за смену)  = " . myformat($SummaPrNalZ) . "\n";
                  $strres .=$strvyv;
                  if ($nalvyv<1)
                     {print $strvyv;}
                  $strvyv = "    Картой (сумма за смену)     = " . myformat($SummaPrKartaZ) . "\n";
                  $strres .=$strvyv;
                  if ($nalvyv<1)
                     {print $strvyv;}
               }
               if ($KolvoProd>0 or $KolvoVz>0) 
               {
                  $TotalPr = $SummaPr-$SummaVz;
                  $TotalNal = $SummaPrNal-$SummaVzNal;
                  $TotalBNal = $SummaPrKarta-$SummaVzKarta;
      
                  //В случае несовпадение итогов - выведем информацию
                  if ($SummaPrZ<>0 or $SummaPrNalZ<>0 or $SummaPrKartaZ<>0)
                  {
                     if ((bccomp($TotalPr, $SummaPrZ, 2)<>0 or bccomp($TotalNal, $SummaPrNalZ, 2)<>0 or bccomp($TotalBNal, $SummaPrKartaZ, 2)<>0))
                     {
                        $strvyv = " Продажи (сверка за смену)       = " . myformat($TotalPr) . "\n";
                        $strres .=$strvyv;
                        if ($nalvyv<1)
                           {print $strvyv;}
                        $strvyv = "    Наличными (сверка за смену)  = " . myformat($TotalNal) . "\n";
                        $strres .=$strvyv;
                        if ($nalvyv<1)
                           {print $strvyv;}
                        $strvyv = "    Картой (сверка за смену)     = " . myformat($TotalBNal) . "\n";
                        $strres .=$strvyv;
                        if ($nalvyv<1)
                           {print $strvyv;}
                     }
                  }
                  //Выведем детальную информацию
                  // $strvyv = " Продажи (чеков)  = " . $KolvoProd . "\n";
                  // $strres .=$strvyv;
                  // if ($nalvyv<1)
                  //    {print $strvyv;}
                  $strvyv = " Продажи (сумма)  = " . myformat($SummaPr) . "\n";
                  $strres .=$strvyv;
                  if ($nalvyv<1)
                     {print $strvyv;}
                  $strvyv = "    Наличными     = " . myformat($SummaPrNal) . "\n";
                  $strres .=$strvyv;
                  if ($nalvyv<1)
                     {print $strvyv;}
                  $strvyv = "    Картой        = " . myformat($SummaPrKarta) . "\n";
                  $strres .=$strvyv;
                  if ($nalvyv<1)
                     {print $strvyv;}
                  // $strvyv = " Возвраты (чеков) = " . $KolvoVz . "\n";
                  // $strres .=$strvyv;
                  // if ($nalvyv<1)
                  //    {print $strvyv;}
                  $strvyv = " Возвраты (сумма) = " . myformat($SummaVz) . "\n";
                  $strres .=$strvyv;
                  if ($nalvyv<1)
                     {print $strvyv;}
                  $strvyv = "    Наличными     = " . myformat($SummaVzNal) . "\n";
                  $strres .=$strvyv;
                  if ($nalvyv<1)
                     {print $strvyv;}
                  $strvyv = "    Картой        = " . myformat($SummaVzKarta) . "\n";
                  $strres .=$strvyv;
                  if ($nalvyv<1)
                     {print $strvyv;}
               }
               Return($strres);
   }


   function fullrez($OtdName, $MyLogin, $MyPass, $fileres, $MyKass, $DayMinus, $MonthMinus)
   {
            //print "Подключаюсь... (".$OtdName.")\n";   
            print $OtdName."...\n";   
            $url = "https://org.1-ofd.ru/api/user/login";
            $user=array('login'=>$MyLogin, 'password'=>$MyPass );
            $ch = curl_init();
            //Имя файла, в который мы запишем "сырые данные" из ОФД
            $file = 'fromofd.txt';
            $strres = "";
            $strvyv = "";

            $filecook = 'cookie.txt';
            if (file_exists($filecook))
            {
               $filecook = 'cookie01.txt';
               if (file_exists($filecook))
               {
                  $filecook = 'cookie02.txt';
                  if (file_exists($filecook))
                  {
                     $filecook = 'cookie03.txt';
                     if (file_exists($filecook))
                     {
                        $filecook = 'cookie04.txt';
                        if (file_exists($filecook))
                        {
                           $filecook = 'cookie05.txt';
                           if (file_exists($filecook))
                           {
                              $filecook = 'cookie06.txt';
                              if (file_exists($filecook))
                              {
                                 $filecook = 'cookie07.txt';
                                 if (file_exists($filecook))
                                 {
                                    $filecook = 'cookie08.txt';
                                    if (file_exists($filecook))
                                    {
                                       $filecook = 'cookie09.txt';
                                       if (file_exists($filecook))
                                       {
                                           $filecook = 'cookie10.txt';
                                           print "   Сервис недоступен!!!". "\n";
                                       }
                                    }
                                 }
                              }
                           }
                        }
                     }
                  }
               }
            }
            if ($filecook<>'cookie10.txt')
            {
               // print "Создаю Cookies... (".$filecook.")\n";   
               curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
               curl_setopt($ch, CURLOPT_URL, $url);  
               curl_setopt($ch, CURLOPT_HEADER, true);
               curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json;charset=utf-8")); 
               curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($user));
               curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
               curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
               curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'POST');
               curl_setopt($ch, CURLOPT_COOKIEJAR, $filecook); // записываем куки  в файл
               curl_setopt($ch, CURLOPT_COOKIEFILE,  $filecook);
               $result = curl_exec($ch);  
               // print "Подключились \n";
               $json=json_decode($result,true);
               curl_close($ch); 
               $Mohtn = date("m");
               $Day = date("d");
               $Year = date("y");
               //Для сверки - всегда забираем информацию за последний месяц
               $StartDate = date('U', mktime(1, 0, 0, $Mohtn-$MonthMinus, $Day-$DayMinus, $Year));
               $StartDate = $StartDate."000";

               //Так как данные идут от более свежих к более старым - то до сегодняшнего дня с указанной даты
               $newurl="https://org.1-ofd.ru/api/kkms/".$MyKass."/transactions?fromDate=".$StartDate;

               $ch1 = curl_init($newurl);
               curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
               curl_setopt($ch1, CURLOPT_COOKIEFILE, $filecook);
               curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, false);
               curl_setopt($ch1, CURLOPT_SSL_VERIFYHOST, false);    
               $result = curl_exec($ch1);  

               //Удаление Куков
               unlink($filecook);


               //Для интереса - $result ("сырые данные") запишем в файл
               //file_put_contents($file, $result);

               //поиск строки "<!DOCTYPE html>"
               $posHtml=strripos($result,"<!DOCTYPE html>");
               if ($posHtml === false)
               {
                  if ($result <> "[]")
                  {
                     $obj=json_decode($result,true);
                     curl_close($ch1); 
                     $KolvoClose=0;
                     $KolvoOpen=0;
                     $KolvoProd=0;
                     $KolvoProdNal=0;
                     $KolvoProdKarta=0;
                     $KolvoVz=0;
                     $KolvoVzNal=0;
                     $KolvoVzKarta=0;
                     $TotalPr=0;
                     $TotalPrNal=0;
                     $TotalPrBNal=0;
                     $SummaPr=0;
                     $SummaPrZ=0;
                     $SummaPrNal=0;
                     $SummaPrNalZ=0;
                     $SummaPrKarta=0;
                     $SummaPrKartaZ=0;
                     $SummaVz=0;
                     $SummaVzNal=0;
                     $SummaVzKarta=0;
                     $shiftNumber=0;
                     $shiftNumZ=0;

                     $nalvyv=0;
                     foreach($obj as $item) 
                     {
                             if ($item["transactionType"]=="CLOSE_SHIFT")
                             {
                                if ($shiftNumber>0)
                                {
                                   $strres.=vyvd($shiftNumber, $strvyv, $strres, $nalvyv, $SummaPrZ, $SummaPrNalZ, $SummaPrKartaZ, $KolvoProd, $KolvoVz, $SummaPr, $SummaVz, $SummaPrNal, $SummaVzNal, $SummaPrKarta, $SummaVzKarta);
                                   $nalvyv=1;
                          
                                   $shiftNumber = $item["shiftNumber"];
                                   $KolvoClose = $KolvoClose+1;
                                   $SummaPrZ = $SummaPrZ + $item["sum"];
                                   $SummaPrNalZ = $SummaPrNalZ + $item["payments"][0]["sum"];            
                                   $SummaPrKartaZ = $SummaPrKartaZ + $item["payments"][1]["sum"];            
                                   $shiftNumZ = $item["shiftNumber"];
                                }
                             }
                             elseif ($item["transactionType"]=="OPEN_SHIFT")
                                    {$KolvoOpen = $KolvoOpen+1;}
                             elseif ($item["transactionType"]=="TICKET")
                             { 
                                    if ($shiftNumber<1)
                                       {$shiftNumber = $item["shiftNumber"];}
                                  
                                    if ($shiftNumber<>$shiftNumberZ)
                                    {
                                       if ($item["operationType"]==2)
                                       {
                                          $KolvoProd = $KolvoProd + 1;
                                          $SummaPr = $SummaPr + $item["sum"];
                                          $SummaPrNal = $SummaPrNal + $item["payments"][0]["sum"];            
                                          $SummaPrKarta = $SummaPrKarta + $item["payments"][1]["sum"];            
                                       }
                                       else 
                                       {
                                          //В общем плане "operationType" может быть равно не только 2 и 3, но у нас - только эти (2 - продажи, 3 - возвраты)
                                          $KolvoVz=$KolvoVz+1;
                                          $SummaVz = $SummaVz + $item["sum"];
                                          $SummaVzNal = $SummaVzNal + $item["payments"][0]["sum"];            
                                          $SummaVzKarta = $SummaVzKarta + $item["payments"][1]["sum"];                        
                                       }
                                   }
                             };
                     }
                     if ($shiftNumber>0)
                     {
                        if ($shiftNumber<>$shiftNumZ)
                        {
                           $strres.=vyvd($shiftNumber, $strvyv, $strres, $nalvyv, $SummaPrZ, $SummaPrNalZ, $SummaPrKartaZ, $KolvoProd, $KolvoVz, $SummaPr, $SummaVz, $SummaPrNal, $SummaVzNal, $SummaPrKarta, $SummaVzKarta);
                        }
                     }
                     //Вывод детальной информации в файл
                     //file_put_contents($fileres, $strres);
                     $strres="";
                  }
                  else
                  {
                     //Крикнем, что в результирующем файле - пусто!
                     print "". "\n";
                     print " ------------------------------------------------------------------------". "\n";
                     print " | В ОФД нет данных. Или не было продаж, или <<отвалилась касса>>     !!!". "\n";
                     print " |   Если продажи были - информируйте об этом сообщении ответственного!!!". "\n";
                     print " ------------------------------------------------------------------------". "\n";
                     print "". "\n";
                     print "Для продолжения нажмите ВВОД (ENTER)". "\n";
                     $stdin = fopen('php://stdin', 'r');
                     $data = fgets($stdin, 2);
                     fclose($stdin);
                  }
               }
               else
               {
                  print "   Сервис недоступен!!!". "\n";
               }
            }
   }

   $OtdName = "Строительный";
   //Логин к ОФД
   $MyLogin='Логин к ОФД';
   //Пароль к ОФД
   $MyPass='Пароль к ОФД';
   //Имя файла, в который мы запишем данные по сменам
   $fileres = 'resultats.txt';
   //Номер интересующей нас кассы в ОФД
   $MyKass="Номер интересующей нас кассы в ОФД";
   //Вычитаем дней из даты
   $DayMinus=0;
   //Вычитаем месяцев из даты
   $MonthMinus=0;
   fullrez($OtdName, $MyLogin, $MyPass, $fileres,$MyKass, $DayMinus, $MonthMinus);

   $OtdName = "Кондитерка";
   //Логин к ОФД
   $MyLogin='Логин к ОФД';
   //Пароль к ОФД
   $MyPass='Пароль к ОФД';
   //Имя файла, в который мы запишем данные по сменам
   $fileres = 'resultatk.txt';
   //Номер интересующей нас кассы в ОФД
   $MyKass="Номер интересующей нас кассы в ОФД";
   //Вычитаем дней из даты
   //$DayMinus=0;
   //Вычитаем месяцев из даты
   //$MonthMinus=0;
   fullrez($OtdName, $MyLogin, $MyPass, $fileres,$MyKass, $DayMinus, $MonthMinus);

   $OtdName = "Шторы";
   $fileres = 'resultsht.txt';
   //Предприятие - тоже самое, меняем только номер кассы
   $MyKass="Номер интересующей нас кассы в ОФД";
   fullrez($OtdName, $MyLogin, $MyPass, $fileres,$MyKass, $DayMinus, $MonthMinus);
   //print "Конец проверки чеков\n";
?>

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.