<?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);
?>