powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Простой SOAP запрос
6 сообщений из 6, страница 1 из 1
Простой SOAP запрос
    #39173513
Alexey Agafonov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет. Есть простой SOAP сервер https://112.120.74.81/Exchange1C/ws/bgsExchange/?wsdl , Адрес реальный. Есть пример (так же реальный) XML запроса:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:exc=\"http://art-businessgroup.com/exchange1c\">
   <soap:Header/>
   <soap:Body>
      <exc:Request>
         <exc:sessionKey></exc:sessionKey>
         <exc:language></exc:language>
         <exc:calledMethod></exc:calledMethod>
         <exc:methodProperties>
         </exc:methodProperties>
      </exc:Request>
   </soap:Body>
</soap:Envelope>


Как с помощью Soap классов или функций php отправить это запрос и получить ответ? Ответ должен быть таким:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
   <soap:Header/>
   <soap:Body>
      <m:RequestResponse xmlns:m="http://art-businessgroup.com/exchange1c">
         <m:return xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <m:success>false</m:success>
            <m:errors>Пользователь информационной базы не идентифицирован по sessionKey</m:errors>
            <m:warnings/>
            <m:ResponseData xsi:type="xs:string"/>
         </m:return>
      </m:RequestResponse>
   </soap:Body>
</soap:Envelope>


Есть проверочный сайт , типа этого. Через него все хорошо, но нужно то же самое в php. Кто сталкивался?
...
Рейтинг: 0 / 0
Простой SOAP запрос
    #39174332
FatalPHPError
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте взять за основу вот такой вариант:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
<?php
try {
    $opts = [
        'ssl' => ['ciphers' => 'RC4-SHA', 'verify_peer' => false, 'verify_peer_name' => false],
    ];
    $context = stream_context_create($opts);
    $options = [
        'soap_version' => SOAP_1_2,
        'trace' => true,
        'exceptions' => true,
        'cache_wsdl' => WSDL_CACHE_NONE,
        'connection_timeout' => 10,
        'stream_context' => $context,
        'user_agent' => 'phpSoapClient',
        'ssl_method' => SOAP_SSL_METHOD_TLS/*SOAP_SSL_METHOD_SSLv2*//*SOAP_SSL_METHOD_SSLv3*/,
        'encoding' => 'UTF-8',
        'verifypeer' => false,
        'verifyhost' => false,
    ];
    $client = new SoapClient('https://112.120.74.81/Exchange1C/ws/bgsExchange/?wsdl', $options);
    $req_params = [
        new SoapVar('1', XSD_STRING, null, null, 'sessionKey'),
        new SoapVar('2', XSD_STRING, null, null, 'language'),
        new SoapVar('3', XSD_STRING, null, null, 'calledMethod'),
        new SoapVar('4', XSD_ANYTYPE, null, null, 'methodProperties'),
    ];
    $request_var = new SoapVar($req_params, SOAP_ENC_OBJECT);
    $res = $client->Request($request_var);
    //var_dump($res);die;
    if (isset($res->return)) {
        if ($res->return->success === false) {
            echo $res->return->errors, "\n";
        }
    }
} catch (SoapFault $e) {
    die($e->getMessage() . "\n");
}


Ответ у меня получился такой:
Код: sql
1.
Пользователь информационной базы не идентифицирован по sessionKey|Необходимо задать правильное имя метода|Необходимо задать параметры метода 3
...
Рейтинг: 0 / 0
Простой SOAP запрос
    #39174400
Alexey Agafonov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FatalPHPError,

Спасибо тебе большое, у меня все получилось ровно так, как нужно!!!
...
Рейтинг: 0 / 0
Простой SOAP запрос
    #39174524
Alexey Agafonov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ээх, рано обрадовался. Все сложнее - нужпо прописать namespace еще, а именнЖЖ
Код: xml
1.
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:exc="http://art-businessgroup.com/exchange1c">


И тэги передавать в нем (exc):
Код: xml
1.
2.
<exc:language>ru</exc:language>
<exc:calledMethod>GetUsers</exc:calledMethod>


Искал в интернете, в том числе на англоязычных сайта - не нашел. Почему так мало всего по SOAP PHP :-(
...
Рейтинг: 0 / 0
Простой SOAP запрос
    #39174964
FatalPHPError
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Боюсь, с пространствами имен в SoapClient неважно. Максимум, что можно получить
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://art-businessgroup.com/exchange1c">
  <env:Body>
    <ns1:Request>
      <ns1:sessionKey>1</ns1:sessionKey>
      <ns1:language>2</ns1:language>
      <ns1:calledMethod>3</ns1:calledMethod>
      <ns1:methodProperties>4</ns1:methodProperties>
    </ns1:Request>
  </env:Body>
</env:Envelope>


Либо создать дочерний класс от SoapClient, переопределить метод __doRequest(), где и сделать замену префикса ns1 на exc. Видимо, этот вариант более подходит
...
Рейтинг: 0 / 0
Простой SOAP запрос
    #39175183
Alexey Agafonov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо в очередной раз :-)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Простой SOAP запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]