SOAP запрос из Perl

Материал из BiTel WiKi

Версия от 18:27, 16 ноября 2015; Darg (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Ниже показан пример запроса с использованием протокола SOAP, на языке Perl.

#!/usr/bin/perl
 
use CGI qw(:standard);
use DBI;
use SOAP::Lite;
#use SOAP::Lite +trace => 'all';  используйте для отладки, отлично помогает
use MIME::Base64;
 
$cid = 1;
$dt = "2015-11-15";
$sum = "10";
#т.к. в данном примере рассматривается случай с зачислением платежа, используем соответствующую ссылку
$wsdl = "http://192.168.0.1:8080/bgbilling/executer/ru.bitel.bgbilling.kernel.contract.balance/PaymentService?wsdl";
#comment - это свойство элемента payment, создаем его и заносим значение 
@comment = ("<comment>$comment</comment>");
$authoriz = 'Basic '.encode_base64('login:password'); #Формируем строку авторизации 
#если надо в xml-запросах указать SOAP-ENV вместо просто SOAP. Работает и так  и так 
#$SOAP::Constants::PREFIX_ENV = 'SOAP-ENV';
#Аналогично
#$SOAP::Constants::PREFIX_ENC = "SOAP-ENC";
$client = SOAP::Lite->new(service=>$wsdl);
$client->proxy($wsdl);
#определяем пространство где искать типы элементов
$client->ns("http://common.balance.contract.kernel.bgbilling.bitel.ru/","ns1"); 
#если нужен вывод полученного сообщения от сервера, для отладки
$client->outputxml('true');
$client->transport->http_request->headers->push_header('Authorization' => $authoriz );
$soap = $client->service($wsdl.'?wsdl');
#создаем объект payment 
my $pm = SOAP::Data->new(name=>"payment"); 
# указываем что этот объект будет иметь тип payment из текущего пространства (указали выше)
$pm->type("ts:payment");
# определяем атрибуты payment'а
$pm->attr({ id => "-1", contractId=>"$cid", date=>"$dt", sum=>"$sum", summa=>"$sum", typeId=>"3", userId=>"0"});
#добавляем payment'у свойство из массива comment, определенного выше
$pm->value(@comment);
#ну и вызываем процедуру paymentUpdate, передаем на вход переменную содержащую информацию о платеже. Ответ будет выведен на экран
print $client->call('paymentUpdate',$pm);
Личные инструменты