Доброе время суток. Измучился весь. Нужен пример построения простого xml запроса: Код (Text): <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ais="http://soap-server.ru/"> <soap:Header/> <soap:Body> <ais:Logon> <ais:Login>login</ais:Login> <ais:Password>pass</ais:Password> </ais:Logon> </soap:Body> </soap:Envelope> Прямой запрос выполняется: Код (PHP): try { $login = 'login'; $pass = '***'; $request=' <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ais="http://soap-server.ru"> <soap:Header/> <soap:Body> <ais:Logon> <ais:Login>'.$login.'</ais:Login> <ais:Password>'.$pass.'</ais:Password> </ais:Logon> </soap:Body> </soap:Envelope>'; $soapClient = new SoapClient(null, array('location'=>"",'uri'=>"")); $response = $soapClient->__doRequest($request, 'https://soap-server.ru/uri', 'http://soap-server.ru/Logon',SOAP_1_2); print_r($response); } catch (SoapFault $exc) { print_r($exc->getMessage()); } но перепробовал всевозможные способы формирования xml с помощью soap библиотеки и ничего не вышло. Валятся ошибки: Код (Text): Method Not Allowed или если обращаться к wsdl серверу, то Код (Text): SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://soap-server.ru/uri?WSDL' : failed to load external entity "http://soap-server.ru/uri?WSDL" Варианты: Код (PHP): $login = 'login'; $pass = '***'; try { $connectArr = array( 'Login'=>$login, 'Password'=>$pass ); $connectArr2 = array( 'Logon'=>array( 'Login'=>$login, 'Password'=>$pass ) ); $connectStd = new stdClass(); $connectStd->Login=$login; $connectStd->Password=$pass; $connectStd2 = new stdClass(); $connectStd2->Logon = new stdClass(); $connectStd2->Logon->Login=$login; $connectStd2->Logon->Password=$pass; $soapParams = array( new SoapParam($login,"Login"), new SoapParam($pass,"Password") ); $soapParams2 = array( new SoapParam(array( new SoapParam($login,"Login"), new SoapParam($pass,"Password") ),"Logon"), ); // $wsdl = 'http://soap-server.ru/uri?WSDL'; // $soapClient = new SoapClient($wsdl); // $soapClient = new SoapClient($wsdl,$connectArr); $soapClient = new SoapClient(null, array( 'location' => "https://soap-server.ru", 'uri' => "uri", // 'Logon'=>$connectArr )); $response=array(); // $response['v1'] = $soapClient->__soapCall('Logon', $connectArr); // $response['v2'] = $soapClient->__soapCall('Logon', $connectArr2); // $response['v3'] = $soapClient->Logon($connectArr); $response['v4'] = $soapClient->Logon($connectArr2); print_r($response); } catch (SoapFault $exc) { print_r($exc->getMessage()); }
Re: SOAP: формирование простого xml запроса. а как же soap клиент в php? А где wsdl файл со списком функций? Часто работал с соапом, но никогда не генерировал запросы вручную...
Re: SOAP: формирование простого xml запроса. Это не "прямой запрос", это кривота капец. Пока твой скрипт не получит wsdl, никакой нормальной работы быть не может. Поэтому реши ЭТУ проблему. Без библиотеки проверь: По указанному адресу есть wsdl? Твои скрипты могут получить его текст через file_get_contents() ?
Действительно были проблемы с неверным путем до wsdl, а точнее с протоколом http->https. Задача решена. Логин проходит. Может кому пригодится - вот решение моего случая: Код (PHP): $connectStd = new stdClass(); $connectStd->Login='login'; $connectStd->Password='***'; try { $wsdl = 'https://soap-server.ru/uri?WSDL'; $soapClientOptions = array( 'trace'=>1, 'version'=>SOAP_1_2 ); $soapClient = new SoapClient($wsdl,$soapClientOptions); $response = $soapClient->Logon($connectStd); print_r($response); } catch (SoapFault $exc) { print_r($exc->getMessage()); }