18.06.2018 16:51
Как оно работает спустя много месяцев?
Хочу у нас сверку с ОФД (Платформа) в 1С сделать через функционал отчетов, но беспокоюсь об объемах данных и на сколько это будет быстро на практике.
У самой Платформы в магазине есть подобные решения, но мне они не особо интересны по функционалу.
18.06.2018 19:34
Буду на следующей неделе переделывать свой php-файл (нужно разделение по кассам).
Сейчас - на одной кассе - в течении секунды-двух получаю отчёт по сегодняшним продажам (чеков мало - сейчас всего 151)

текущий php-файлик
SQL код:
<?php
   //Источник
   //https://olegon.ru/showthread.php?t=27917
   print "Подключаюсь... \n";   
   $url = "https://org.1-ofd.ru/api/user/login";
   $user=array('login'=>'МойЛогин', 'password'=>'МойПароль' );
   $ch = curl_init();     
   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, 'cookie.txt');
   curl_setopt($ch, CURLOPT_COOKIEFILE,  'cookie.txt');
   $result = curl_exec($ch);  
   print "Подключились \n";
   $json=json_decode($result,true);
   curl_close($ch); 
   print "\n **************************************** \n";   
   $Mohtn = date("m");
   $Day = date("d");
   $Year = date("y");
   $StartDate = date('U', mktime(0, 0, 0, $Mohtn, $Day, $Year));
   $StartDate = $StartDate."000";
   $newurl="https://org.1-ofd.ru/api/kkms/НомерКассыВОФД/transactions?fromDate=".$StartDate;
   print "Получаем чеки... \n";                                      
   $ch1 = curl_init($newurl);
   curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch1, CURLOPT_COOKIEFILE, 'cookie.txt');
   curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, false);
   curl_setopt($ch1, CURLOPT_SSL_VERIFYHOST, false);    
   $result = curl_exec($ch1);  
   print "Чеки ОК\n";
   $obj=json_decode($result,true);
   curl_close($ch1); 
   $KolvoClose=0;
   $KolvoOpen=0;
   $KolvoProd=0;
   $KolvoProdNal=0;
   $KolvoProdKarta=0;
   $KolvoVz=0;
   $KolvoVzNal=0;
   $KolvoVzKarta=0;
   $SummaPr=0;
   $SummaPrNal=0;
   $SummaPrKarta=0;
   $SummaVz=0;
   $SummaVzNal=0;
   $SummaVzKarta=0;
   print "Проверка чеков...\n";
   foreach($obj as $item) 
   {
        if ($item["transactionType"]=="CLOSE_SHIFT")
            {$KolvoClose = $KolvoClose+1;}
        elseif ($item["transactionType"]=="OPEN_SHIFT")
            {$KolvoOpen = $KolvoOpen+1;}
        else
        { 
            if ($item["operationType"]==2)
            {
                $KolvoProd = $KolvoProd + 1;
                $SummaPr = $SummaPr + $item["sum"];
                $SummaPrNal = $SummaPrNal + $item["payments"][0]["sum"];            
                $SummaPrKarta = $SummaPrKarta + $item["payments"][1]["sum"];            
            }
            else 
            {
                $KolvoVz=$KolvoVz+1;
                $SummaVz = $SummaVz + $item["sum"];
                $SummaVzNal = $SummaVzNal + $item["payments"][0]["sum"];            
                $SummaVzKarta = $SummaVzKarta + $item["payments"][1]["sum"];                        
            }              
        };
   }
   print "Конец проверки чеков\n";
   print "Продажи (чеки)   = " . $KolvoProd . "\n";
   print "Продажи (сумма)  = " . $SummaPr . "\n";
   print "   Наличными     = " . $SummaPrNal . "\n";
   print "   Картой        = " . $SummaPrKarta . "\n";
   print "Возвраты (чеки)  = " . $KolvoVz . "\n";
   print "Возвраты (сумма) = " . $SummaVz . "\n";
   print "   Наличными     = " . $SummaVzNal . "\n";
   print "   Картой        = " . $SummaVzKarta . "\n";
?>
Кодировка - 866

а запускает это такой bat-файл
Код:
@echo off
c:\php\php.exe c:\php\1-ofd.php
pause
Кому надо - запускает, смотрит
18.06.2018 23:52
Да, и ещё - после закрытия смены (почему-то) у меня нет информации.
Не разбирался, в чём причина.
19.06.2018 09:44
KirillHome, а если по одной кассе за месяц данные запросить, не пробовал?)
19.06.2018 09:54
Fomka, вчера как раз в ночи сидел, смотрел - разбирал по сеансам, получал общую сумму за сеанс, сверял с суммами по чекам за сеанс. Всё в пределах 3-5 секунд (смотрел, правда, 10 дней).
Посмотрел за месяц - 15 секунд (с выводом информации на экран за каждую смену).
19.06.2018 11:40
Вот такой получился скрипт в результате
SQL код:
<?php
   //Источник
   //https://olegon.ru/showthread.php?t=27917
   print "Подключаюсь... \n";   
   $url = "https://org.1-ofd.ru/api/user/login";
   //Логин к ОФД
   $MyLogin='МойЛогин';
   //Пароль к ОФД
   $MyPass='МойПароль';
   //Номер интересующей нас кассы в ОФД
   $MyKass="МояКасса";
   $user=array('login'=>$MyLogin, 'password'=>$MyPass );
   $ch = curl_init();     
   //Имя файла, в который мы запишем "сырые данные" из ОФД
   $file = 'fromofd.txt';
   //Имя файла, в который мы запишем данные по сменам
   $fileres = 'resultat.txt';
   $strres = "";
   $strvyv = "";
   $current = file_get_contents($file);
   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, 'cookie.txt'); //Записываем куки в файл
   curl_setopt($ch, CURLOPT_COOKIEFILE,  'cookie.txt');
   $result = curl_exec($ch);  
   print "Подключились \n";
   $json=json_decode($result,true);
   curl_close($ch); 
   print "\n **************************************** \n";   
   $Mohtn = date("m");
   $Day = date("d");
   $Year = date("y");
   //Для сверки - всегда забираем информацию за последний месяц
   $StartDate = date('U', mktime(0, 0, 0, $Mohtn-1, $Day, $Year));
   $StartDate = $StartDate."000";

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

   print "Получаем чеки... \n";                                      
   $ch1 = curl_init($newurl);
   curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch1, CURLOPT_COOKIEFILE, 'cookie.txt');
   curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, false);
   curl_setopt($ch1, CURLOPT_SSL_VERIFYHOST, false);    
   $result = curl_exec($ch1);  
   print "Чеки получены\n";

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

   $nalvyv=0;
   print "Проверка чеков...\n";
   foreach($obj as $item) 
   {
        $currentline = $item;
        if ($item["transactionType"]=="CLOSE_SHIFT")
        {
            if ($shiftNumber>0)
            {
               $strvyv = "Смена = ".$shiftNumber."\n";
               $strres .=$strvyv;
               //На экран - только последню смену
               if ($nalvyv<1)
                  {print $strvyv;}
               //Если есть - выведем сводную информацию
               if ($SummaPrZ<>0 or $SummaPrNalZ<>0 or $SummaPrKartaZ<>0)
               {
                   $strvyv = " Продажи (сумма за смену)       = " . $SummaPrZ . "\n";
                   $strres .=$strvyv;
                   if ($nalvyv<1)
                      {print $strvyv;}
                   $strvyv = "    Наличными (сумма за смену)  = " . $SummaPrNalZ . "\n";
                   $strres .=$strvyv;
                   if ($nalvyv<1)
                      {print $strvyv;}
                   $strvyv = "    Картой (сумма за смену)     = " . $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 = " Продажи (сверка за смену)       = " . $TotalPr . "\n";
                         $strres .=$strvyv;
                         if ($nalvyv<1)
                            {print $strvyv;}
                         $strvyv = "    Наличными (сверка за смену)  = " . $TotalNal . "\n";
                         $strres .=$strvyv;
                         if ($nalvyv<1)
                            {print $strvyv;}
                         $strvyv = "    Картой (сверка за смену)     = " . $TotalBNal . "\n";
                         $strres .=$strvyv;
                         if ($nalvyv<1)
                            {print $strvyv;}
                      }
                   }
                   //Выведем детальную информацию
                   $strvyv = " Продажи (чеков)  = " . $KolvoProd . "\n";
                   $strres .=$strvyv;
                   if ($nalvyv<1)
                      {print $strvyv;}
                   $strvyv = " Продажи (сумма)  = " . $SummaPr . "\n";
                   $strres .=$strvyv;
                   if ($nalvyv<1)
                      {print $strvyv;}
                   $strvyv = "    Наличными     = " . $SummaPrNal . "\n";
                   $strres .=$strvyv;
                   if ($nalvyv<1)
                      {print $strvyv;}
                   $strvyv = "    Картой        = " . $SummaPrKarta . "\n";
                   $strres .=$strvyv;
                   if ($nalvyv<1)
                      {print $strvyv;}
                   $strvyv = " Возвраты (чеков) = " . $KolvoVz . "\n";
                   $strres .=$strvyv;
                   if ($nalvyv<1)
                      {print $strvyv;}
                   $strvyv = " Возвраты (сумма) = " . $SummaVz . "\n";
                   $strres .=$strvyv;
                   if ($nalvyv<1)
                      {print $strvyv;}
                   $strvyv = "    Наличными     = " . $SummaVzNal . "\n";
                   $strres .=$strvyv;
                   if ($nalvyv<1)
                      {print $strvyv;}
                   $strvyv = "    Картой        = " . $SummaVzKarta . "\n";
                   $strres .=$strvyv;
                   if ($nalvyv<1)
                      {print $strvyv;}
               }
               $SummaPrZ=0;
               $SummaPrNalZ=0;
               $SummaPrKartaZ=0;

               $TotalPr=0;
               $TotalPrNal=0;
               $TotalPrBNal=0;

               $KolvoProd=0;
               $SummaPr=0;
               $SummaPrNal=0;
               $SummaPrKarta=0;
               $KolvoVz=0;
               $SummaVz=0;
               $SummaVzNal=0;
               $SummaVzKarta=0;
               
               //Более старые - не выводим
               $nalvyv=1;
            }
            $shiftNumber = $item["shiftNumber"];
            $KolvoClose = $KolvoClose+1;
            $SummaPrZ = $SummaPrZ + $item["sum"];
            $SummaPrNalZ = $SummaPrNalZ + $item["payments"][0]["sum"];            
            $SummaPrKartaZ = $SummaPrKartaZ + $item["payments"][1]["sum"];            
        }
        elseif ($item["transactionType"]=="OPEN_SHIFT")
            {$KolvoOpen = $KolvoOpen+1;}
        elseif ($item["transactionType"]=="TICKET")
        { 
            if ($shiftNumber<1)
               {$shiftNumber = $item["shiftNumber"];}
            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)
   {
      $strvyv = "Смена=".$shiftNumber."\n";
      $strres .=$strvyv;
      if ($nalvyv < 1)
         {print $strvyv;}

      $strvyv = " Продажи (сумма за смену)       = " . $SummaPrZ . "\n";
      $strres .=$strvyv;
      if ($nalvyv < 1)
         {print $strvyv;}
      $strvyv = "    Наличными (сумма за смену)  = " . $SummaPrNalZ . "\n";
      $strres .=$strvyv;
      if ($nalvyv < 1)
         {print $strvyv;}
      $strvyv = "    Картой (сумма за смену)     = " . $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 = " Продажи (сверка за смену)       = " . $SummaPrZ . "\n";
               $strres .=$strvyv;
               if ($nalvyv < 1)
                  {print $strvyv;}
               $strvyv = "    Наличными (сверка за смену)  = " . $SummaPrNalZ . "\n";
               $strres .=$strvyv;
               if ($nalvyv < 1)
                  {print $strvyv;}
               $strvyv = "    Картой (сверка за смену)     = " . $SummaPrKartaZ . "\n";
               $strres .=$strvyv;
               if ($nalvyv < 1)
                  {print $strvyv;}
            }
         }
         $strvyv = " Продажи (чеков)  = " . $KolvoProd . "\n";
         $strres .=$strvyv;
         if ($nalvyv < 1)
            {print $strvyv;}
         $strvyv = " Продажи (сумма)  = " . $SummaPr . "\n";
         $strres .=$strvyv;
         if ($nalvyv < 1)
            {print $strvyv;}
         $strvyv = "    Наличными     = " . $SummaPrNal . "\n";
         $strres .=$strvyv;
         if ($nalvyv < 1)
            {print $strvyv;}
         $strvyv = "    Картой        = " . $SummaPrKarta . "\n";
         $strres .=$strvyv;
         if ($nalvyv < 1)
            {print $strvyv;}
         $strvyv = " Возвраты (чеков) = " . $KolvoVz . "\n";
         $strres .=$strvyv;
         if ($nalvyv < 1)
            {print $strvyv;}
         $strvyv = " Возвраты (сумма) = " . $SummaVz . "\n";
         $strres .=$strvyv;
         if ($nalvyv < 1)
            {print $strvyv;}
         $strvyv = "    Наличными     = " . $SummaVzNal . "\n";
         $strres .=$strvyv;
         if ($nalvyv < 1)
            {print $strvyv;}
         $strvyv = "    Картой        = " . $SummaVzKarta . "\n";
         $strres .=$strvyv;
         if ($nalvyv < 1)
            {print $strvyv;}
      }
   }
   print "Конец проверки чеков\n";
   file_put_contents($fileres, $strres);
?>
31.07.2018 12:55
Не в курсе: у 1 ОФД ничего не поменялось? На горячей линии - диспетчеры, по техническим вопросам проконсультировать не могут, а их спецы могут и через несколько дней позвонить...

С утра ломлюсь - не дает подключения. При этом, на тестовую площадку - цепляются отлично. А на "боевую" - нет.
пробовал и
SQL код:
 $url = "https://org.1-ofd.ru/api/user/login"; 
и
SQL код:
 $url = "https://1-ofd.ru/api/user/login"; 
не дает подключения!

Логин и пароль даже копипастил с браузера (с браузера входит нормально), что-бы исключить синдром криворучия....
31.07.2018 13:10
Цитата:
УКМ_эксплуатант_2 С утра ломлюсь - не дает подключения.
Что значит "не дает подключения"? Какая ошибка? У меня подключается без проблем.
31.07.2018 14:00
Цитата:
УКМ_эксплуатант_2 Не в курсе: у 1 ОФД ничего не поменялось?
Скрипт отрабатывает, проверил только что.
31.07.2018 14:03
SQL код:
<?php 
    //Источник 
    //https://olegon.ru/showthread.php?t=27917 
    print "Подключаюсь... \n";    
    //$url = "https://test-org.1-ofd.ru/api/user/login";  //тестовая пллощадка
    $url = "https://org.1-ofd.ru/api/user/login";    //боевая площадка
    //Логин к ОФД 
    $MyLogin='БоевойОсновнойАккаунт'; //
    //$MyLogin='ВторойАккаунт'; //
    //Пароль к ОФД 
    //$MyPass='ПарольДляТестовогоАккаунта'; //это пароль для тестового
    //$MyPass='ПарольДляБоевогоВторого';  // это пароль для боевого 
    $MyPass='ПарольОсновнойБоевой';      // пароль на боевой
    //Номер интересующей нас кассы в ОФД 
    $MyKass="69078"; 
    $user=array('login'=>$MyLogin, 'password'=>$MyPass ); 
    $ch = curl_init();      
    //Имя файла, в который мы запишем "сырые данные" из ОФД 
    $file = 'fromofd.txt'; 
    //Имя файла, в который мы запишем данные по сменам 
    $fileres = 'resultat.txt'; 
    $strres = ""; 
    $strvyv = ""; 
    //$current = file_get_contents($file); 
    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, 'cookie.txt'); //Записываем куки в файл 
    curl_setopt($ch, CURLOPT_COOKIEFILE,  'cookie.txt'); 
    $result = curl_exec($ch);
    print_r($result);
    print "Подключились \n"; 
    $json=json_decode($result,true); 
    curl_close($ch);  
    print_r($json);
    print "\n **************************************** \n";  
?>
Если оставляю тестовую площадку/акк/пароль - есть вывод print_r($json);
если ставлю основную площадку/акк/пароль - выдает:
SQL код:
c:\ОПРОС ОФД>c:\phpukm\php.exe MyTest2.php
Подключаюсь...
Подключились

 **************************************** 
и файл с куками не создается....
Часовой пояс GMT +3, время: 16:21.

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