надо вызвать soap функцию, у которой два параметра. xml документ запроса примерно выглядит так: <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <namesp1:addSubscriber xmlns:namesp1="http://webservices.ms.vocaltec.com"> <credential> <role>ADMINISTRATOR</role> <userame>admin</userName> <userPassword>admin123</userPassword> <vpn>root</vpn> </credential> <subscriber> <userId>sippNat10_mh</userId> <password>1</password> <vpnName>GammaVpn</vpnName> <classOfServiceName>GammaCos</classOfServiceName> <status>active</status> <firstName>sippNat10_mh</firstName> <lastName>sippNat10_mh</lastName> <emailAddress>sippNat10_mh@vocaltec.com</emailAddress> <countryCode>19</countryCode> <areaCode>2</areaCode> <phoneNumber>9702588</phoneNumber> <intlAccessCode>00</intlAccessCode> <areaAccessCode>0</areaAccessCode> <enterpriseExtension>288</enterpriseExtension> <enterpriseLocationAccessCode>22</enterpriseLocationAccessCode> <enterpriseCostCenter xsi:null="1"/> <enterpriseDialAS>DialAsE164</enterpriseDialAS> <enterpriseKeepDialedNumber>false</enterpriseKeepDialedNumber> <enterpriseGatewayIP/> <sipDevice>false</sipDevice> </subscriber> </namesp1:addSubscriber> </SOAP-ENV:Body> </SOAP-ENV:Envelope> пишу код на php: $client = new SoapClient( "https://11.11.11.111/provisioning/services/BaxProvisioning?wsdl", array( "trace" => true) ); $role = "ADMINISTRATOR"; $userName = "ThreeWay"; $userPassword = "1111111"; $vpn = "ThreeWay"; $userId = 'sippNat10_mh'; $password = 1; $vpnName = 'GammaVpn'; $classOfServiceName = 'Test'; $status = 'active'; $firstName = 'sippNat10_mh'; $lastName = 'sippNat10_mh'; $emailAddress = [email='sippNat10_mh@vocaltec.com]'sippNat10_mh@vocaltec.com[/email]'; $countryCode = 19; $areaCode = 2; $phoneNumber = '9702588'; $intlAccessCode = '00'; $areaAccessCode = 0; $enterpriseExtension = 288; $enterpriseLocationAccessCode = 22; $enterpriseCostCenter = "1"; $enterpriseDialAS = 'DialAsE164'; $enterpriseKeepDialedNumber = 'false'; $enterpriseGatewayIP = ''; $sipDevice = 'false'; //### создаем переменные функции $credential = array( 'role' => "ADMINISTRATOR", 'userName' => "ThreeWay", 'userPassword' => "RidFWHuV", 'vpn' => "ThreeWay" ); $subscriber = array( 'userId' => 'sippNat10_mh', 'password' => 1, 'vpnName' => 'GammaVpn', 'classOfServiceName' => 'Test', 'status' => 'active', 'firstName' => 'sippNat10_mh', 'lastName' => 'sippNat10_mh', 'emailAddress' => [email='sippNat10_mh@vocaltec.com]'sippNat10_mh@vocaltec.com[/email]', 'countryCode' => 19, 'areaCode' => 2, 'phoneNumber' => '9702588', 'intlAccessCode' => '00', 'areaAccessCode' => 0, 'enterpriseExtension' => 288, 'enterpriseLocationAccessCode' => 22, 'enterpriseCostCenter' => "1", 'enterpriseDialAS' => 'DialAsE164', 'enterpriseKeepDialedNumber' => 'false', 'enterpriseGatewayIP' => '', 'sipDevice' => 'false' ); //### запускаем функцию try { $client->__soapCall("addSubscriber", array( 'credential' => $credential, 'subscriber' => $subscriber) ); print "Запрос :<br>".htmlspecialchars($client->__getLastRequest()) ."<br>"; print "Ответ:<br>".htmlspecialchars($client->__getLastResponse())."<br>"; } catch (SoapFault $fault) { print"Error: SOAP Fault (faultcode:".$fault->faultcode." _________ faultstring: ".$fault->faultstring.') E_USER_ERROR='.E_USER_ERROR.'<br>'; } При запуске пишется ошибка: SOAP Fault (faultcode:Client _________ faultstring: SOAP-ERROR: Encoding: object hasn't 'credential' property) E_USER_ERROR=256 Я думаю, что при вызове метода $client->__soapCall("addSubscriber", array( 'credential' => $credential, 'subscriber' => $subscriber) ); я не правильно передаю параметры. Понимаю, вопрос сложный, кто может - подскажите хотя бы, в каком направлении копать. Буду очень благодарен.
Насколько я знаю, параметры функции нужно передавать обычным массивом, а не ассоциативным: $client->__soapCall("addSubscriber", array($credential, $subscriber)); Если это не поможет, покажи всдл файл
если пишу так: $client->__soapCall("addSubscriber", array($credential, $subscriber)); то ошибка та же: Error: SOAP Fault (faultcode:Client faultstring: SOAP-ERROR: Encoding: object hasn't 'credential' property) E_USER_ERROR=256 на счет показать wsdl - в текст вложить? так он большой, а ссылку дать - не откроется Но у меня функция заработала, я ее по другому записал: $g = $client->getSubscriberByName( array( 'credential' => $credential, 'subscriber' => $subscriber)); Вот только в мануале такой способ не рекомендуется, интересно, чем это может в дальнейшем грозить?