Здравствуйте! До сего момента не приходилось отправлять параметры по SOAP. Сейчас возникла нужда сформировать вот такую структуру параметра: Код (Text): <wsLoginPassword xsi:type="java:WsLoginPassword" xmlns:java="java:com.nt.slib.ws.wssearch"> <wslogin xsi:type="xsd:string">YOUR_LOGIN</wslogin> <wspassword xsi:type="xsd:string">your_password</wspassword> </wsLoginPassword> Делаю вот что: Код (Text): $params = array( new SoapVar('login', 'wslogin'), new SoapVar('123', 'wspassword') ); $var = new SoapVar(Array('wsLoginPassword' => $params), SOAP_ENC_OBJECT, 'wsLoginPassword', 'http://www.natalie-tours.ru/webservices'); $client = new SoapClient('http://www.natalie-tours.ru/webservice/BookingWS?WSDL', array('trace' => 1)); $client->getAllRegions($var); После выполнения пишет что логин не верный. Предполагаю, что запрос кривой. Подскажите пожалуйста, в какую сторону копать?
Вот что выдает ласт реквест: Код (Text): <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://www.natalie-tours.ru/webservices"><SOAP-ENV:Body><ns1:getAllRegions xsi:type="ns1:wsLoginPassword"><wsLoginPassword><xsd:anyType xsi:type="xsd:wslogin">login</xsd:anyType><xsd:anyType xsi:type="xsd:wspassword">123</xsd:anyType></wsLoginPassword></ns1:getAllRegions></SOAP-ENV:Body></SOAP-ENV:Envelope>
А по структуре точно функция принимает авторизацию? Или же там, подразумевается отдельная переменная в запросе для авторизации?
Вот здесь описание: http://www.natalie-tours.ru/webservices/ Насколько я понял, именно функция принимает автоизацию. Т.к. при попытке ничего не передавать в функцию возникает ошибка Код (Text): Exception during processing: java.lang.IllegalArgumentException (see Fault Detail for stacktrace)
Хорошо, а теперь внимательно смотрим все реквесты, вот тот, что поменьше листингом: Код (Text): <soapenv:Body> <tem:cancelOrder soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <wsBookingLoginPassword xsi:type="java:WsLoginPassword" xs:type="type:WsLoginPassword" xmlns:java="java:com.nt.slib.ws.wssearch" xmlns:xs="http://www.w3.org/2000/XMLSchema-instance"> <wslogin xsi:type="xsd:string">YOUR_LOGIN</wslogin> <wspassword xsi:type="xsd:string">your_password</wspassword> </wsBookingLoginPassword> <orderCancellationRequest xsi:type="java:OrderCancellationRequest" xs:type="type:OrderCancellationRequest" xmlns:java="java:com.nt.slib.ws.wssearch.booking.protocol.cancellation" xmlns:xs="http://www.w3.org/2000/XMLSchema-instance"> <orderId xsi:type="xsd:long">84492758</orderId> </orderCancellationRequest> </tem:cancelOrder> </soapenv:Body> Таки да, кривовато у тебя выходит, чота я сам запутался )
Всем спасибо. Разобрался. Код (Text): $params = new stdClass(); $params->wsLoginPassword = new stdClass(); $params->wsLoginPassword->wslogin = "login"; $params->wsLoginPassword->wspassword = "123"; $authSoapVar = new SoapVar($params, SOAP_ENC_OBJECT, 'wsLoginPassword', 'http://www.natalie-tours.ru/webservices'); $client = new SoapClient('http://www.natalie-tours.ru/webservice/BookingWS?WSDL', array('trace' => 1)); var_dump($client->getAllRegions($authSoapVar));