SOAP запрос из Perl

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

(Различия между версиями)
Перейти к: навигация, поиск
Строка 8: Строка 8:
<source lang="xml">
<source lang="xml">
<xsd:schema>
<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: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: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: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>
</xsd:schema>
</source>
</source>
-
где указанны ссылки на описание используемых в интерфейсе PaymentService типов.
+
где указанны ссылки на описание используемых в интерфейсе PaymentService типов данных.
Код, который заносит платеж суммой 10, контракту с id=1, датой 15.11.2015:
Код, который заносит платеж суммой 10, контракту с id=1, датой 15.11.2015:
Строка 58: Строка 58:
print $client->call('paymentUpdate',$pm);
print $client->call('paymentUpdate',$pm);
</source>
</source>
 +
 +
Более подробней с модулем SOAP для Perl, можно ознакомится по ссылке [http://search.cpan.org/~phred/SOAP-Lite-1.19/lib/SOAP/Lite.pm http://search.cpan.org/~phred/SOAP-Lite-1.19/lib/SOAP/Lite.pm]

Версия 22:09, 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 типов данных.

Код, который заносит платеж суммой 10, контракту с id=1, датой 15.11.2015:

#!/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);

Более подробней с модулем SOAP для Perl, можно ознакомится по ссылке http://search.cpan.org/~phred/SOAP-Lite-1.19/lib/SOAP/Lite.pm

Личные инструменты