Добрый день,
Такая беда, необходимо при формировании
WSDL-ки правильно подрубить метод обработчика -
action контроллера или метод класса (статический или обычный).
В структуре проекта есть модуль
soap
В нем есть контроллер
ManagersControllerclass ManagersController extends CController
{
public function setData($name, $age, $sex)
{
// логика
}
}
Также есть компонент
SoapService, где я изначально хотел реализовать логику вместо
ManagersController::setData() ( это было бы лучше, но как я понял - такой вариант не сработает )
Server:
header('Content-Type: text/xml; charset=utf-8');
$this->soap_server->configureWSDL('setWebBox','webServer');
$this->soap_server->decode_utf8 = false;
$this->soap_server->soap_defencoding = 'UTF-8';
$this->soap_server->wsdl->addComplexType(
'ArrayOfString',
'complexType',
'array',
'',
'SOAP-ENC:Array',
[],
[
['ref'=>'SOAP-ENC:Array',
'wsdl:arrayType' => 'SOAP-ENC:string[]',
'arrayType' => 'SOAP-ENC:string[]',
'nillable'=>'true'
]
],
'SOAP-ENC:string'
);
...
$this->soap_server->register(
'setManager',
[
'name'=>'xsd:string',
'age' => 'xsd:int',
'sex' => 'xsd:string',
],
[
'code' => 'xsd:int',
'message' => 'xsd:string'
],
'',
'uri:soap/managers/getData',
'document',
'literal'
);
...
// Подключаем обработчика запросов
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$this->soap_server->service($HTTP_RAW_POST_DATA);
1. Если я вместо этого варианта с
register использую следующий:
$this->soap_server->register(
'setManager',
[
'ID_1C' => 'xsd:int',
'FIRST_NAME'=>'xsd:string',
'LAST_NAME' => 'xsd:string',
'THIRD_NAME' => 'xsd:string',
'EMAIL' => 'xsd:string',
'PARENT_BRANCH_ID' => 'xsd:int',
'LESS_ONE_YEAR' => 'xsd:int'
],
[
'code' => 'xsd:int',
'message' => 'xsd:string'
],
'',
'',
'document',
'literal'
);
То если данный сервер находится не в контексте фреймворка, то успешно отрабатывает функция по названию метода -
setManager
response:
Array ( [code] => 0 [message] => UPDATE OK )
2. Если я правильно понял, то для вызова методов в контексте фреймворка нужно поменять или название первого параметра в
register либо 5-й параметр soapAction('uri:...')
Получается, что если я меняю soapAction, то вообще ничего не меняется, и функция (костыльный временный вариант) отрабатывается так же успешно.
Если же я меняю певый параметр в registry на '
soap/managers/ManagersController.setManager',
то во первых все ломается:
Array ( [faultcode] => SOAP-ENV:Client [faultactor] => [faultstring] => Operation 'setManager' is not defined in the WSDL for this service [detail] => )
Client:
public function nusoapClient()
{
header('Content-Type: text/html; charset=utf-8');
// Создаем экземпляр клиента
$client = new nusoap_client('http://tbox.a-i.kz/public/wbs/service.php/?wsdl');
$client->setCredentials('Web_user','Umi@718293','basic');
$params = [
'id' => 199,
'name' => 'RRRR',
'sex' => 'aswe',
'age' => 7,
];
// Вызываем SOAP-метод
$result = $client->call('setManager', $params);
// Отображаем результат
print_r($result);
// Отображаем запрос и ответ
echo '<h2>Запрос</h2>';
echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Ответ</h2>';
echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
die();
}
Подскажите - как быть?