Код:
<?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";
?>