За последние 24 часа нас посетили 18637 программистов и 1604 робота. Сейчас ищут 1012 программистов ...

[РЕШЕНО]SOAP: формирование простого xml запроса.

Тема в разделе "Прочие вопросы по PHP", создана пользователем mac0s, 25 окт 2013.

  1. mac0s

    mac0s Новичок

    С нами с:
    25 окт 2013
    Сообщения:
    3
    Симпатии:
    0
    Доброе время суток.
    Измучился весь. Нужен пример построения простого xml запроса:
    Код (Text):
    1.  
    2. <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ais="http://soap-server.ru/">
    3.     <soap:Header/>
    4.     <soap:Body>
    5.         <ais:Logon>
    6.             <ais:Login>login</ais:Login>
    7.             <ais:Password>pass</ais:Password>
    8.         </ais:Logon>
    9.     </soap:Body>
    10. </soap:Envelope>
    Прямой запрос выполняется:
    Код (PHP):
    1. try {
    2.     $login = 'login';
    3.     $pass = '***';
    4.     $request='
    5.         <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ais="http://soap-server.ru">
    6.         <soap:Header/>
    7.         <soap:Body>
    8.             <ais:Logon>
    9.                 <ais:Login>'.$login.'</ais:Login>
    10.                 <ais:Password>'.$pass.'</ais:Password>
    11.             </ais:Logon>
    12.         </soap:Body>
    13.     </soap:Envelope>';
    14.     $soapClient = new SoapClient(null, array('location'=>"",'uri'=>""));
    15.     $response = $soapClient->__doRequest($request, 'https://soap-server.ru/uri', 'http://soap-server.ru/Logon',SOAP_1_2);
    16.     print_r($response);
    17. }
    18. catch (SoapFault $exc) {
    19.     print_r($exc->getMessage());
    20. }
    21.  
    но перепробовал всевозможные способы формирования xml с помощью soap библиотеки и ничего не вышло.
    Валятся ошибки:
    Код (Text):
    1. Method Not Allowed
    или если обращаться к wsdl серверу, то
    Код (Text):
    1. 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):
    1. $login = 'login';
    2. $pass = '***';
    3. try {
    4.     $connectArr = array(
    5.         'Login'=>$login,
    6.         'Password'=>$pass
    7.     );
    8.     $connectArr2 = array(
    9.         'Logon'=>array(
    10.             'Login'=>$login,
    11.             'Password'=>$pass
    12.         )
    13.     );
    14.  
    15.     $connectStd = new stdClass();
    16.     $connectStd->Login=$login;
    17.     $connectStd->Password=$pass;
    18.  
    19.     $connectStd2 = new stdClass();
    20.     $connectStd2->Logon = new stdClass();
    21.     $connectStd2->Logon->Login=$login;
    22.     $connectStd2->Logon->Password=$pass;
    23.  
    24.     $soapParams = array(
    25.         new SoapParam($login,"Login"),
    26.         new SoapParam($pass,"Password")
    27.     );
    28.     $soapParams2 = array(
    29.         new SoapParam(array(
    30.             new SoapParam($login,"Login"),
    31.             new SoapParam($pass,"Password")
    32.         ),"Logon"),
    33.     );
    34.  
    35. //    $wsdl = 'http://soap-server.ru/uri?WSDL';
    36. //    $soapClient = new SoapClient($wsdl);
    37. //    $soapClient = new SoapClient($wsdl,$connectArr);
    38.     $soapClient = new SoapClient(null, array(
    39.         'location' => "https://soap-server.ru",
    40.         'uri'      => "uri",
    41. //        'Logon'=>$connectArr
    42.     ));
    43.  
    44.     $response=array();
    45. //    $response['v1'] = $soapClient->__soapCall('Logon', $connectArr);
    46. //    $response['v2'] = $soapClient->__soapCall('Logon', $connectArr2);
    47. //    $response['v3'] = $soapClient->Logon($connectArr);
    48.     $response['v4'] = $soapClient->Logon($connectArr2);
    49.     print_r($response);
    50. }
    51. catch (SoapFault $exc) {
    52.     print_r($exc->getMessage());
    53. }
    54.  
     
  2. Golodnyi

    Golodnyi Новичок

    С нами с:
    11 окт 2013
    Сообщения:
    63
    Симпатии:
    0
    Адрес:
    Кемерово
    Re: SOAP: формирование простого xml запроса.

    а как же soap клиент в php? А где wsdl файл со списком функций? Часто работал с соапом, но никогда не генерировал запросы вручную...
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Re: SOAP: формирование простого xml запроса.

    Это не "прямой запрос", это кривота капец. Пока твой скрипт не получит wsdl, никакой нормальной работы быть не может. Поэтому реши ЭТУ проблему.

    Без библиотеки проверь:
    По указанному адресу есть wsdl?
    Твои скрипты могут получить его текст через file_get_contents() ?
     
  4. mac0s

    mac0s Новичок

    С нами с:
    25 окт 2013
    Сообщения:
    3
    Симпатии:
    0
    Действительно были проблемы с неверным путем до wsdl, а точнее с протоколом http->https.
    Задача решена. Логин проходит. Может кому пригодится - вот решение моего случая:
    Код (PHP):
    1. $connectStd = new stdClass();
    2. $connectStd->Login='login';
    3. $connectStd->Password='***';
    4. try {
    5.     
    6.     $wsdl = 'https://soap-server.ru/uri?WSDL';
    7.     $soapClientOptions = array(
    8.         'trace'=>1,
    9.         'version'=>SOAP_1_2
    10.     );
    11.     $soapClient = new SoapClient($wsdl,$soapClientOptions);
    12.     
    13.     $response = $soapClient->Logon($connectStd);
    14.     print_r($response);
    15. }
    16. catch (SoapFault $exc) {
    17.     print_r($exc->getMessage());
    18. }