SOAP запрос из Perl

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

(Различия между версиями)
Перейти к: навигация, поиск
(Новая страница: «Ниже показан пример запроса с использованием протокола SOAP, на языке Perl. <source lang="perl"> #!/usr/bin/p…»)
Строка 1: Строка 1:
 +
{{Актуальность Версии|версия=6.1}}
 +
Ниже показан пример запроса с использованием протокола SOAP, на языке Perl.
Ниже показан пример запроса с использованием протокола SOAP, на языке Perl.
 +
Для того что легче было вникнуть в код советую открыть две странички http://ваш_ip:8080/bgbilling/executer/ru.bitel.bgbilling.kernel.contract.balance/PaymentService?wsdl
 +
где можно ознакомиться с описанием методов и требуемых при обращении к ним аргументов.
 +
Там же будет указано:
 +
<source lang="xml">
 +
<xsd:schema>
 +
<xsd:import namespace="http://common.bitel.ru" schemaLocation="http://ваш_ip:8080/bgbilling/executer/ru.bitel.bgbilling.kernel.contract.balance/PaymentService?xsd=1"/>
 +
</xsd:schema>
 +
<xsd:schema>
 +
<xsd:import namespace="http://common.balance.contract.kernel.bgbilling.bitel.ru/" schemaLocation="http://ваш_ip:8080/bgbilling/executer/ru.bitel.bgbilling.kernel.contract.balance/PaymentService?xsd=2"/>
 +
</xsd:schema>
 +
</source>
 +
где указанны ссылки на описание используемых в интерфейсе PaymentService типов
<source lang="perl">
<source lang="perl">

Версия 18:35, 16 ноября 2015

Внимание! Данное решение/метод/статья относится к версии 6.1 и для других версий может быть неактуальна! Вам нужно самостоятельно поправить решение под свои нужды или воспользоваться помощью на форуме. Будем признательны, если внизу страницы или отдельной статьёй вы разместите исправленное решение для другой версии или подсказки что надо исправить.

Ниже показан пример запроса с использованием протокола SOAP, на языке Perl. Для того что легче было вникнуть в код советую открыть две странички http://ваш_ip:8080/bgbilling/executer/ru.bitel.bgbilling.kernel.contract.balance/PaymentService?wsdl где можно ознакомиться с описанием методов и требуемых при обращении к ним аргументов. Там же будет указано:

<xsd:schema>
<xsd:import namespace="http://common.bitel.ru" schemaLocation="http://ваш_ip:8080/bgbilling/executer/ru.bitel.bgbilling.kernel.contract.balance/PaymentService?xsd=1"/>
</xsd:schema>
<xsd:schema>
<xsd:import namespace="http://common.balance.contract.kernel.bgbilling.bitel.ru/" schemaLocation="http://ваш_ip:8080/bgbilling/executer/ru.bitel.bgbilling.kernel.contract.balance/PaymentService?xsd=2"/>
</xsd:schema>

где указанны ссылки на описание используемых в интерфейсе PaymentService типов

#!/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);
Личные инструменты