Пример использования на PHP
Данный пример показывает, как получить печатное представление документа учета по номеру контейнера
<?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>