Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Простой SOAP запрос / 6 сообщений из 6, страница 1 из 1
17.02.2016, 18:57
    #39173513
Alexey Agafonov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простой SOAP запрос
Всем привет. Есть простой 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
18.02.2016, 15:15
    #39174332
FatalPHPError
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простой SOAP запрос
Попробуйте взять за основу вот такой вариант:
Код: 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
18.02.2016, 15:47
    #39174400
Alexey Agafonov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простой SOAP запрос
FatalPHPError,

Спасибо тебе большое, у меня все получилось ровно так, как нужно!!!
...
Рейтинг: 0 / 0
18.02.2016, 16:55
    #39174524
Alexey Agafonov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простой SOAP запрос
Ээх, рано обрадовался. Все сложнее - нужпо прописать 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
19.02.2016, 10:02
    #39174964
FatalPHPError
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простой SOAP запрос
Боюсь, с пространствами имен в 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
19.02.2016, 12:48
    #39175183
Alexey Agafonov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простой SOAP запрос
Спасибо в очередной раз :-)
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Простой SOAP запрос / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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