+7 (812) 335-77-33
+7 (8617) 67-76-65
office@rlisystems.ru

Данный пример показывает, как получить печатное представление документа учета по номеру контейнера

<?php
/*

Внимание!!!
Системные требования: установка на сервере PHP5 с расширением SOAP
На PHP4 или на PHP5 без установленного расширения SOAP скрипт работать не будет!

Если обозначить url скрипта script.php  ,
номер Вашего контейнера YoursContainerNumber  ,
то вызов скрипта для получения документа учета
будет выглядеть так

script.php?cnum=YoursContainerNumber

Например: http://Your_site.ru/WebServices/index.php?cnum=ABCD1234567

Если Вы хотите подписаться на E-mail рассылку о событиях, связанных с этим контейнером,
то скрипт нужно будет вызвать следующим образом

script.php?cnum=YoursContainerNumber&infoimport=1

Для использования скрипта в том же каталоге, где размещен скрипт, создайте каталог

track

Туда будут записываться PDF и XML файлы.

Обязательно замените Your_login и Your_password на Ваши логин и пароль
*/
$atlogin="Your_login";
$atpassword="Your_password";
/*
Также замените Your_E-mail на E-mail на который должны приходить предупреждения о малом количестве денег на счету
*/
$atemail = "Your_E-mail";
/*
Замените Min_Balance на тот уровень средств на счету, при котором должны начать приходить предупреждения по e-mail
Например: $atbalance = 100;
*/
$atbalance = Min_Balance;
/*
Замените Your_Message на текст предупреждения, которое должно приходить по e-mail при малом количестве средств на счету
Пример: $atmessage = 'Остаток средств на счету в ООО "РОЛИС" меньше $100';
*/
$atmessage = 'Your_Message';
/*
Замените number_of_days на число дней, которые скаченные документы учета должны храниться в каталоге track
Скрипт удаляет старые документы. Это необходимо по тому, что по истечении некоторого времени контейнер с
тем же номером может прийти снова. Рекомендуемое значение $ndays = 10; */
$ndays = number_of_days;
/*
Скрипт производит следующие действия:
1.  Проверяет остаток средств на счету, и если остаток меньше Min_Balance ,
    то на Your_E-mail отправляется предупреждение.
2.  Скачивает и сохраняет в каталоге track документ учета в форматах XML и PDF
3.  Если скрипт вызван с указанием параметра infoimport=1
    script.php?cnum=ABCD1234567&infoimport=1
    то производится подписка на события по указанному контейнеру.
4.  Скрипт выводит на экран информацию о запрашиваемом контейнере и
    ссылки на сохраненные документы учета в форматах XML и PDF
5.  Удаляет из каталога track все файлы, скаченные более чем $nday дней назад
    (процедура удаления производится при условии, что с момента проведения предыдущей процедуры удаления прошло не менее 24 часов )
*/

$atadditional_comment = "user information";
/* Коментарий, который опционально можно передавать в процедуру подписки.
Данный коментарий будет добавляться к отсылаемым по почте сообщениям.
Это полезно, в случае необходимости создавать правила фильтрации входящих сообщений о
событиях с контейнерами
*/

/* Здесь производится прием входящих параметров. */
if(isset($_REQUEST['cnum'])) $ContainerNumber=$_REQUEST['cnum'];
else
$ContainerNumber = "ABCD1234567";
if(isset(
$_REQUEST['infoimport'])) $infimp=$_REQUEST['infoimport'];
else
$infimp=0;
?>
<html>
<head>
    <title>Rlisystems WebServices</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<?
try {
/* Производится подключение к web-сервису */
$client = new SoapClient("https://www.rlisystems.ru/TestServices/wsdl/RlisystemsServicesSOAP.wsdl", array("login" => $atlogin, "password" => $atpassword));
/* Вызывается процедура получения баланса */
$ClientBalance = $client->Balance();
?>
<p><b>Balance</b></p>
<?
echo "Наименование валюты: ".$ClientBalance->Currency;
echo
"<br>Текущий остаток на счете клиента: ".$ClientBalance->Rest;
echo
"<br>Порог отключения, установленный для счета клиента: ".$ClientBalance->MinRest;
/* Производится проверка баланса и, если это нужно, отправка предупреждения */
@include("./balance_timedata.php");
if(!isset(
$balance_timedata)) $balance_timedata=0;
if(
$ClientBalance->Rest-$atbalance<0 && time()-$balance_timedata>14400){
    
mail($atemail, "Rolis_WebServiceMessage", $atmessage, "Content-type: text/html; charset=utf-8");
    
$balance_timedata_file=fopen("balance_timedata.php", "w");
    
fwrite($balance_timedata_file, '<?php $balance_timedata='.time().'; ?>');
    
fclose($balance_timedata_file);
    }
?>
<p><b>List of Terminals</b></p>
<?
/* Вызывается процедура получения списка терминалов */
$TerminalList = $client->TerminalList();
?>
<p>Total terminals: <?=count($TerminalList)?></p>
<table border="1" cellspacing="0" cellpadding="2"><tr bgcolor="#EEEEEE"><th>TerminalCode</th><th>TerminalName</th></tr><?

foreach ($TerminalList as $Terminal)
{
?><tr>
    <td><?=$Terminal->{"TerminalCode"}?></td>
    <td><?=$Terminal->{"TerminalName"}?></td>
  </tr><?
}
?></table><?

/* Начало блока подписки */
/* Блок подписки осуществляет подписку на события со всеми контейнерами, для которых указан параметр infoimport=1
Это платная услуга. Если Вы не хотите ей пользоваться, этот блок можно исключить */
if($infimp==1){
$client->ImportEventsContainerSubscribe($TerminalList[0]->{"TerminalCode"},$ContainerNumber,0,$atadditional_comment);
}
/* Окончание блока подписки */

?>
<p><b>List of TDU's for container <?=$ContainerNumber?> on first terminal in list (<?=$TerminalList[0]->{"TerminalName"}?>)</b></p>
<?

$TDUSearchRequest
->TerminalCode = $TerminalList[0]->{"TerminalCode"};
$TDUSearchRequest->SearchString = $ContainerNumber;
/* Запрашивается список документов учета по контейнеру  */
$TDUInfoList = $client->TDUInfoList($TDUSearchRequest);

if (
count($TDUInfoList) == 0)
{
    print
"<p>No TDU's found</p>";
}
else
{
    
?>
    <p>Total TDU's: <?=count($TDUInfoList)?></p>
    <table border="1" cellspacing="0" cellpadding="2"><tr bgcolor="#EEEEEE">
    <th>TDUCode</th>
    <th>TDUNumber</th>
    <th>TDUDate</th>
    <th>ContainerNumber</th>
    </tr><?
    
    
foreach ($TDUInfoList as $TDUInfo)
    {
        
?><tr>
        <td><?=$TDUInfo->{"TDUCode"}?></td>
        <td><?=$TDUInfo->{"TDUNumber"}?></td>
        <td><?=$TDUInfo->{"TDUDate"}?></td>
        <td><?=$TDUInfo->{"ContainerNumber"}?></td>
        </tr><?
    
}
    
?></table><?


    ?>
    <p><b>Retriving TDU's number <?=$TDUInfoList[0]->{"TDUNumber"}?> on first terminal in list (<?=$TerminalList[0]->{"TerminalName"}?>)</b></p>
    <?

    $TDURequest
->TerminalCode = $TerminalList[0]->{"TerminalCode"};
    
$TDURequest->TDUCode = $TDUInfoList[0]->{"TDUCode"};
    
$TDURequest->FormatCode = "XML";
    
/* Запрашивается документ учета в формате XML */
    
$TDU = $client->TDURepresentation($TDURequest);

    
$ctype=$TDU->TDURepresentation->{"ContentType"};
    
$data=base64_decode($TDU->TDURepresentation->{"Data"});
    
    
$TDURequest->TerminalCode = $TerminalList[0]->{"TerminalCode"};
    
$TDURequest->TDUCode = $TDUInfoList[0]->{"TDUCode"};
    
$TDURequest->FormatCode = "PDF";
    
/* Запрашивается документ учета в формате PDF */
    
$TDU = $client->TDURepresentation($TDURequest);

    
$ctype=$TDU->TDURepresentation->{"ContentType"};
    
$data2=base64_decode($TDU->TDURepresentation->{"Data"});
    
/* Документы учета в форматах PDF и XML сохраняются в каталоге track */
    
$path ="./track/";
    
$filename = $ContainerNumber.".xml";
    
$filename2 = $ContainerNumber.".pdf";
    if(!
$f=fopen($path.$filename, "w")) echo "Error open file xml";
    if(!
$f2=fopen($path.$filename2, "w")) echo "Error open file pdf";
    if(!
fwrite($f, $data)) echo "Error write in file xml";
    if(!
fwrite($f2, $data2)) echo "Error write in file pdf";
    
fclose($f);
    
fclose($f2);
    echo
"<br><a href='".$path.$filename."'>Просмотреть документ учета в виде XML</a>";
    echo
"<br><a href='".$path.$filename2."'>Просмотреть документ учета в виде PDF</a>";
}

} catch (
SoapFault $fault) {
echo
"<pre>\n \$fault = ";
print_r($fault);
echo
"</pre>";
}
/* Процедура удаления старых файлов. Если Вы не хотите удалять старые файлы, Вы можете ее исключить */
/* Начало процедуры удаления старых файлов. */
@include("./sp_timedata.php");
if(!isset(
$sp_timedata)) $sp_timedata=0;
function
insp_catalog($dirname, $timeinterval)
{
$thisdir=opendir($dirname);
if(!
$thisdir) return;
while((
$curfile=readdir($thisdir))!==false){
    if(
is_dir($curfile)) continue;
    
$curfileway=$dirname."/".$curfile;
    
$curfileparams=stat($curfileway);
    if((
time()-$curfileparams[9])>$timeinterval) unlink($curfileway);
    }
}
if(
time()-$sp_timedata>86400){
insp_catalog("track", 86400*$ndays);
$sp_timedata_file=fopen("sp_timedata.php", "w");
fwrite($sp_timedata_file, '<?php $sp_timedata='.time().'; ?>');
fclose($sp_timedata_file);
}
/* Окончание процедуры удаления старых файлов. */
?>
</body>
</html>