18.06.2018 16:51
Fomka
 
Как оно работает спустя много месяцев?
Хочу у нас сверку с ОФД (Платформа) в 1С сделать через функционал отчетов, но беспокоюсь об объемах данных и на сколько это будет быстро на практике.
У самой Платформы в магазине есть подобные решения, но мне они не особо интересны по функционалу.
18.06.2018 19:34
KirillHome
 
Буду на следующей неделе переделывать свой 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($chCURLOPT_RETURNTRANSFER1);  
   
curl_setopt($chCURLOPT_URL$url);  
   
curl_setopt($chCURLOPT_HEADERtrue);
   
curl_setopt($chCURLOPT_HTTPHEADER, array("Content-Type: application/json;charset=utf-8")); 
   
curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($user));
   
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
   
curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse); 
   
curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'POST');
   
curl_setopt($chCURLOPT_COOKIEJAR'cookie.txt');
   
curl_setopt($chCURLOPT_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(000$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($ch1CURLOPT_RETURNTRANSFERtrue);
   
curl_setopt($ch1CURLOPT_COOKIEFILE'cookie.txt');
   
curl_setopt($ch1CURLOPT_SSL_VERIFYPEERfalse);
   
curl_setopt($ch1CURLOPT_SSL_VERIFYHOSTfalse);    
   
$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
KirillHome
 
Да, и ещё - после закрытия смены (почему-то) у меня нет информации.
Не разбирался, в чём причина.
19.06.2018 09:44
Fomka
 
KirillHome, а если по одной кассе за месяц данные запросить, не пробовал?)
19.06.2018 09:54
KirillHome
 
Fomka, вчера как раз в ночи сидел, смотрел - разбирал по сеансам, получал общую сумму за сеанс, сверял с суммами по чекам за сеанс. Всё в пределах 3-5 секунд (смотрел, правда, 10 дней).
Посмотрел за месяц - 15 секунд (с выводом информации на экран за каждую смену).
19.06.2018 11:40
KirillHome
 
Вот такой получился скрипт в результате
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($chCURLOPT_RETURNTRANSFER1);  
   
curl_setopt($chCURLOPT_URL$url);  
   
curl_setopt($chCURLOPT_HEADERtrue);
   
curl_setopt($chCURLOPT_HTTPHEADER, array("Content-Type: application/json;charset=utf-8")); 
   
curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($user));
   
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
   
curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse); 
   
curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'POST');
   
curl_setopt($chCURLOPT_COOKIEJAR'cookie.txt'); //Записываем куки в файл
   
curl_setopt($chCURLOPT_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(000$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($ch1CURLOPT_RETURNTRANSFERtrue);
   
curl_setopt($ch1CURLOPT_COOKIEFILE'cookie.txt');
   
curl_setopt($ch1CURLOPT_SSL_VERIFYPEERfalse);
   
curl_setopt($ch1CURLOPT_SSL_VERIFYHOSTfalse);    
   
$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<>or $SummaPrNalZ<>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>or $KolvoVz>0
               {
                   
$TotalPr $SummaPr-$SummaVz;
                   
$TotalNal $SummaPrNal-$SummaVzNal;
                   
$TotalBNal $SummaPrKarta-$SummaVzKarta;

                   
//В случае несовпадение итогов - выведем информацию
                   
if ($SummaPrZ<>or $SummaPrNalZ<>or $SummaPrKartaZ<>0)
                   {
                      if ((
bccomp($TotalPr$SummaPrZ2)<>or bccomp($TotalNal$SummaPrNalZ2)<>or bccomp($TotalBNal$SummaPrKartaZ2)<>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>or $KolvoVz>0
      {
         
$TotalPr $SummaPr-$SummaVz;
         
$TotalNal $SummaPrNal-$SummaVzNal;
         
$TotalBNal $SummaPrKarta-$SummaVzKarta;
         if (
$SummaPrZ<>or $SummaPrNalZ<>or $SummaPrKartaZ<>0)
         {
            if ((
bccomp($TotalPr$SummaPrZ2)<>or bccomp($TotalNal$SummaPrNalZ2)<>or bccomp($TotalBNal$SummaPrKartaZ2)<>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
УКМ_эксплуатант_2
 
Не в курсе: у 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
OlegON
 
Цитата:
УКМ_эксплуатант_2 С утра ломлюсь - не дает подключения.
Что значит "не дает подключения"? Какая ошибка? У меня подключается без проблем.
31.07.2018 14:00
KirillHome
 
Цитата:
УКМ_эксплуатант_2 Не в курсе: у 1 ОФД ничего не поменялось?
Скрипт отрабатывает, проверил только что.
31.07.2018 14:03
УКМ_эксплуатант_2
 
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($chCURLOPT_RETURNTRANSFER1);   
    
curl_setopt($chCURLOPT_URL$url);   
    
curl_setopt($chCURLOPT_HEADERtrue); 
    
curl_setopt($chCURLOPT_HTTPHEADER, array("Content-Type: application/json;charset=utf-8"));  
    
curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($user)); 
    
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse); 
    
curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);  
    
curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'POST'); 
    
curl_setopt($chCURLOPT_COOKIEJAR'cookie.txt'); //Записываем куки в файл 
    
curl_setopt($chCURLOPT_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, время: 03:52.

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