<?php
//Информация по товарам
//
//на выходе:
//Дата/время
//№ чека
//Сумма чека
//Номер товара
//Товар
//Сумма
//
//Источник
//https://olegon.ru/showthread.php?t=27917
function fullrez($OtdName, $fileres, $MyKass, $DayMinus, $MonthMinus, $cookfile)
{
//print $OtdName."...\n";
//Имя файла, в который мы запишем "сырые данные" из ОФД
//$file = 'fromofd.txt';
$strres = "";
$strvyv = "";
if (file_exists($cookfile))
{
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookfile);
$result = curl_exec($ch);
$json=json_decode($result,true);
//$CheckDate='';
//$PredDate='';
$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, $cookfile);
curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch1, CURLOPT_SSL_VERIFYHOST, false);
$result = curl_exec($ch1);
//Если интересно - можно записать сырые данные в файл
//file_put_contents($file, $result);
//поиск строки "<!DOCTYPE html>" (вдруг ошибка?)
$posHtml=strripos($result,"<!DOCTYPE html>");
if ($posHtml === false)
{
$obj=json_decode($result,true);
curl_close($ch1);
$idurl="";
$fullout ="";
foreach($obj as $item)
{
if ($item["transactionType"]=="CLOSE_SHIFT")
{
//Что бы не так скучно было - выведем информацию о датах и сменах
print "Работаю с датой ".substr($item["transactionDate"],0,10).", смена ".$item["shiftNumber"]."\n";
}
elseif ($item["transactionType"]=="TICKET")
{
//Получили имя тикета
$idurl ="https://org.1-ofd.ru/api/ticket/" . $item["id"];
//Данные для выходного файла
$fullout .="Чек ". $item["id"] ."\n";
//Запросили, получили ответ
$ch2 = curl_init($idurl);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_COOKIEFILE, $cookfile);
curl_setopt($ch2, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch2, CURLOPT_SSL_VERIFYHOST, false);
$resid = curl_exec($ch2);
//Пошли разбирать...
$objid=json_decode($resid,true);
curl_close($ch2);
//Продолжили с выходным файлом (описываем чек)
$fullout .=" Смена ". $objid["ticket"]["shiftNumber"] ."\n";
$fullout .=" Чек ". $objid["ticket"]["fiscalDocumentNumber"] ."\n";
$fullout .=" Время ". $objid["ticket"]["transactionDate"] ."\n";
$fullout .=" Сумма, наличными ". strval($objid["ticket"]["cashTotalSum"]) ."\n";
$fullout .=" Сумма, электронно ". strval($objid["ticket"]["ecashTotalSum"]) ."\n";
$fullout .=" Тип операции (0 - Покупка, 1 - ворзврат покупки, 2 - продажа, 3 - возврат продажи) ". strval($objid["ticket"]["operationType"]) ."\n";
// transactionDate (Локальное время)
// shiftNumber (Номер смены)
// fiscalDocumentNumber (Номер чека)
// cashTotalSum (Сумма, наличными)
// ecashTotalSum (Сумма, электроно)
// operationType (Тип операции; 0 - Покупка, 1 - Возврат покупки, 2 - Продажа, 3 - Возрврат продажи
// items массив товаров чека
$items = $objid["ticket"]["items"];
foreach($items as $itemif)
{
//Продолжили с выходным файлом (описываем товары чека)
//По умолчанию - в UTF, переделаем в 866 кодовую страницу
$fullout .=" Товар ". mb_convert_encoding($itemif["name"],"cp866", "utf-8") ."\n";
$fullout .=" Сумма ". strval($itemif["sum"]/100.0) ."\n";
//price Цена за единицу (в копейках)
//quantity Количество
//sum Сумма
//name Наименование товара
}
//Добавили пустую строку в выходной файл (чек завершён)...
$fullout .="\n";
}
}
//Вывод детальной информации в файл
file_put_contents($fileres, $fullout);
$strres="";
}
else
{
print " Сервис недоступен!!!". "\n";
}
}
else
{
print " Отсутствуют cookies!!!". "\n";
}
}
//Имя Юр.лица, отдела
$OtdName = "Имя отдела (юр.лица)";
//Логин к ОФД
$MyLogin='ЛогинОФД';
//Пароль к ОФД
$MyPass='ПарольОФД';
//Имя файла, в который мы запишем данные по сменам
$fileres = 'resultat.txt';
//Номер интересующей нас кассы в ОФД
$MyKass="КассаОФД";
//Вычитаем дней из даты
$DayMinus=2;
//Вычитаем месяцев из даты
$MonthMinus=0;
//Имя файла cookies
$cookfile = 'cookies.txt';
//Сделаем (если надо) файл cookies
$url = "https://org.1-ofd.ru/api/user/login";
//В cookies пропишем - "Запоминать нас" ('rememberme'=>true) - а то по умолчанию нет
$user=array('login'=>$MyLogin, 'password'=>$MyPass, 'rememberme'=>true );
$ch = curl_init();
if (!file_exists($cookfile))
{
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, $cookfile); // записываем куки в файл
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookfile);
$result = curl_exec($ch);
curl_close($ch);
}
fullrez($OtdName, $fileres, $MyKass, $DayMinus, $MonthMinus, $cookfile);
?>