soap php получает параметр типа на soapserver - PullRequest
0 голосов
/ 27 февраля 2019

Я создаю мыльный сервер на основе wsdl.По wsdl на сервере создан метод Execute, который принимает запросы с параметрами.Параметры имеют типы («Cat_goods», «Doc_price» и т. Д.).В зависимости от этих типов мне нужно выполнять различные действия на сервере.Но когда я отправляю конверт из SoapUI, то на сервере я получаю объект, у которого тип параметра не указан.Как узнать, какие методы следует вызывать на сервере при обработке запросов с параметрами разных типов.Пример одного запроса продукта:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:exc="http://www.mysite.ru/schema/1.0/erp/exch-store">
   <soapenv:Header/>
   <soapenv:Body>
      <exc:Execute>
       <exc:Request xmlns="http://www.mysite.ru/schema/1.0/erp/exch-store" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ChangeReq">
            <sysID>b66056fg-77hv-kj7v-0f8r-9fkbkf85mmks</sysID>
            <Objects>
                <Object xsi:type="Cat_goods">
                    <Reference>
                        <ID_SCM>a034lksdjfsd-23423</ID_SCM>
                        <Name>Good name</Name>
                    </Reference>
                    <Code>AA-212</Code>
                    <Article>AA-0212</Article>
                    <Weight>0</Weight>
                    <Description/>
                    <DivisionValue>0</DivisionValue>
                    <AdvancedProps/>
                </Object>
            </Objects>
         </exc:Request>
      </exc:Execute>
   </soapenv:Body>
</soapenv:Envelope>

Сервер возвращает:

object(stdClass)#2 (1) {
    ["Request"]=>object(stdClass)#3 (2) {
        ["sysID"]=>string(36) "b66056fg-77hv-kj7v-0f8r-9fkbkf85mmks"
        ["Objects"]=>object(stdClass)#4 (1) {
            ["Object"]=>object(stdClass)#5 (7) {
                ["Reference"]=>object(stdClass)#6 (1) {
                    ["Name"]=>string(9) "Good name"
                }
                ["Code"]=>string(6) "AA-212"
                ["Article"]=>string(7) "AA-0212"
                ["Weight"]=>string(1) "0"
                ["Description"]=>string(0) ""
                ["DivisionValue"]=>string(1) "0"
                ["AdvancedProps"]=>object(stdClass)#7 (0) {
                }
            }
        }
    }
}

Пример запроса обновления цены:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:exc="http://www.mysite.ru/schema/1.0/erp/exch-store">
   <soapenv:Header/>
   <soapenv:Body>
      <exc:Execute>
       <exc:Request xmlns="http://www.mysite.ru/schema/1.0/erp/exch-store" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ChangeReq">
           <sysID>b66056fg-77hv-kj7v-0f8r-9fkbkf85mmks</sysID>
            <Objects>
                <Object xsi:type="Doc_price">
                    <Reference>
                        <ID_SCM>a034lksdjfsd-23423</ID_SCM>
                        <Number>AA-00000001</Number>
                        <Date>2018-10-01</Date>
                    </Reference>
                    <Items>
                        <Item>
                            <Goods>
                                <ID_SCM>12345</ID_ERP>
                                <Name>Good name</Name>
                            </Goods>
                            <Price>160</Price>
                            <Currency>RUB</Currency>
                            <TypeOfPrice>
                                <ID_SCM>54321</ID_ERP>
                                <Name>Price name</Name>
                            </TypeOfPrice>
                        </Item>
                        <Item>
                            <Goods>
                                <ID_SCM>12346</ID_ERP>
                                <Name>Good name</Name>
                            </Goods>
                            <Price>320</Price>
                            <Currency>RUB</Currency>
                            <TypeOfPrice>
                                <ID_SCM>64321</ID_ERP>
                                <Name>Price name</Name>
                            </TypeOfPrice>
                        </Item>                 
                    </Items>
                </Object>
            </Objects>
         </exc:Request>
      </exc:Execute>
   </soapenv:Body>
</soapenv:Envelope>

Сервер возвращает:

object(stdClass)#2 (1) {
    ["Request"]=>object(stdClass)#3 (2) {
        ["sysID"]=>string(36) "b66056fg-77hv-kj7v-0f8r-9fkbkf85mmks"
        ["Objects"]=>object(stdClass)#4 (1) {
            ["Object"]=>object(stdClass)#5 (2) {
                ["Reference"]=>object(stdClass)#6 (3) {
                    ["ID_SCM"]=>string(18) "a034lksdjfsd-23423"
                    ["Number"]=>string(11) "AA-00000001"
                    ["Date"]=>string(10) "2018-10-01"
                }
                ["Items"]=>object(stdClass)#7 (1) {
                    ["Item"]=>array(2) {
                        [0]=>object(stdClass)#8 (4) {
                            ["Goods"]=>object(stdClass)#9 (2) {
                                ["ID_SCM"]=>string(5) "12345"
                                ["Name"]=>string(9) "Good name"
                            }
                            ["Price"]=>string(3) "160"
                                ["Currency"]=>string(3) "BYN"
                                ["TypeOfPrice"]=>object(stdClass)#10 (2) {
                                    ["ID_SCM"]=>string(5) "54321"
                                    ["Name"]=>string(9) "Price name"
                                }
                        }
                        [1]=>object(stdClass)#11 (4) {
                            ["Goods"]=>object(stdClass)#12 (2) {
                                ["ID_SCM"]=>string(5) "12346"
                                ["Name"]=>string(9) "Good name"
                            }
                            ["Price"]=>string(3) "320"
                            ["Currency"]=>string(3) "BYN"
                            ["TypeOfPrice"]=>object(stdClass)#13 (2) {
                                ["ID_SCM"]=>string(5) "64321"
                                ["Name"]=>string(9) "Price name"
                            }
                        }
                    }
                }
            }
        }   
    }
}

код сервера:

 <?php
    header("Content-Type: text/html; charset=utf-8");
    header('Cache-Control: no-store, no-cache');
    ini_set("soap.wsdl_cache_enabled", "0");

    class ExchServ {
        public function Execute($paramData) {
            var_dump($paramData);die();
        } 

    } 

    $server = new SoapServer('http://www.mysite.ru/exch/serv.wsdl', 
        array(
            'cache_wsdl' => WSDL_CACHE_NONE
            ,'trace' => true
        )
    ); 

    $server->setClass("ExchServ"); 
    $server->handle(); 
...