За последние 24 часа нас посетили 20280 программистов и 1724 робота. Сейчас ищут 2179 программистов ...

SOAP-ERROR

Тема в разделе "PHP для профи", создана пользователем Intrerio, 27 ноя 2017.

  1. Intrerio

    Intrerio Активный пользователь

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    Здравствуйте друзья.Давно не заходил. Вот собственно что беспокоит меня. Есть некий soap сервис https://policyrw.mtsbu.ua/v3/ChangeContracts.svc . Написал простой метод:
    PHP:
    1. public function actionSpoil(){
    2.         $xml = '
    3.            <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://kitsoft.kiev.ua/mtsbu/2017/08/22" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
    4.                <soapenv:Header>
    5.                             <o:Security soapenv:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    6.                                     <o:UsernameToken>
    7.                                             <o:Username>тут наш токен</o:Username>
    8.                                     </o:UsernameToken>
    9.                             </o:Security>
    10.                </soapenv:Header>
    11.                <soapenv:Body>
    12.                   <ns:GetSignFromRequest>
    13.                      <ns:digSignRequest>
    14.                         <ns:Contract>
    15.                            <ns:Address>123</ns:Address>
    16.                            <ns:AutoDescr>1234</ns:AutoDescr>
    17.                            <ns:BirthDate>2005-07-22T00:00:00+02:00</ns:BirthDate>
    18.                            <ns:DBonusMalusID>DBonusMalus_13</ns:DBonusMalusID>
    19.                            <ns:DCitizenStatusID>DCitizenStatus_1</ns:DCitizenStatusID>
    20.                            <ns:DCityID>0</ns:DCityID>
    21.                            <ns:DDiscountID>DDiscount_5</ns:DDiscountID>
    22.                            <ns:DExpLimitID>DExpLimit_2</ns:DExpLimitID>
    23.                            <ns:DMarkID>0</ns:DMarkID>
    24.                            <ns:DModelID>0</ns:DModelID>
    25.                            <ns:DPeriodID>DPeriod_11</ns:DPeriodID>
    26.                            <ns:DPersonStatusID>DPersonStatus_1</ns:DPersonStatusID>
    27.                            <ns:DPrivelegeID>DPrivelege_3</ns:DPrivelegeID>
    28.                            <ns:DSphereUseID>DSphereUse_2</ns:DSphereUseID>
    29.                            <ns:DVehicleTypeID>DVehicleType_12</ns:DVehicleTypeID>
    30.                            <ns:DateNextTO>2015-11-16T03:02:33.517202+02:00</ns:DateNextTO>
    31.                            <ns:Franchise>0</ns:Franchise>
    32.                            <ns:IdentCode>1234567890</ns:IdentCode>
    33.                            <ns:InsPremium>1</ns:InsPremium>
    34.                            <ns:Name>123</ns:Name>
    35.                            <ns:PName>456</ns:PName>
    36.                            <ns:ProdYear>1975</ns:ProdYear>
    37.                            <ns:RegNo>AC6548AA</ns:RegNo>
    38.                            <ns:StartDate>2015-11-16T02:57:33.517202+02:00</ns:StartDate>
    39.                            <ns:Surname>123</ns:Surname>
    40.                            <ns:VIN>12345</ns:VIN>
    41.                            <ns:VehicleUsage>000101001110</ns:VehicleUsage>
    42.                            <ns:k1>0.1</ns:k1>
    43.                            <ns:k2>0.1</ns:k2>
    44.                            <ns:k3>0.1</ns:k3>
    45.                            <ns:k4>0.1</ns:k4>
    46.                            <ns:k5>0.1</ns:k5>
    47.                            <ns:k6>1</ns:k6>
    48.                            <ns:k7>1</ns:k7>
    49.                         </ns:Contract>
    50.                         <ns:InputMessageID>testRequest</ns:InputMessageID>
    51.                      </ns:digSignRequest>
    52.                   </ns:GetSignFromRequest>
    53.                </soapenv:Body>
    54.             </soapenv:Envelope>';
    55.         $opts = array('ssl' => array('ciphers'=>'SHA1', 'verify_peer'=>false, 'verify_peer_name'=>false));
    56.         $params = array ('encoding' => 'UTF-8', 'verifypeer' => false, 'verifyhost' => false, 'soap_version' => SOAP_1_2, 'trace' => 1, 'exceptions' => 1, "connection_timeout" => 180, 'stream_context' => stream_context_create($opts) );
    57.         $client = new SoapClient("https://policyrw.mtsbu.ua/v3/ChangeContracts.svc?wsdl",$params);
    58.                 /*array(
    59.                     'soap_version'   => SOAP_1_2,
    60.                     'trace'=>1,
    61.                     'authentication'=>'некий код авторизации',
    62.                     'keep_alive'=>'Connection: Keep-Alive'
    63.                     ));*/
    64.  
    65.         $ns = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'; //Namespace of the WS.
    66.         $headerbody = array('Security'=>array('UsernameToken' => array('Username'=>'5A17116A-93A4-4885-A98F-1BACA3A3CF30')));
    67.         $header = new SOAPHeader($ns, 'Security', $headerbody);
    68.         $client->__setSoapHeaders($header);
    69.         $res = $client->__doRequest($xml, 'https://policyrw.mtsbu.ua/v3/ChangeContracts.svc', 'http://kitsoft.kiev.ua/mtsbu/2017/08/22/IDigitalPolicy/GetSignFromRequest', SOAP_1_1);
    70.        echo $res;
    71. }
    При запуске метода получаю :

    Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://policyrw.mtsbu.ua/v3/ChangeContracts.svc?wsdl' : failed to load external entity "https://policyrw.mtsbu.ua/v3/ChangeContracts.svc?wsdl" in /var/www/dominanta/data/www/my.ctdominanta.com.ua/modules/Test/TestController.php:60 Stack trace: #0 /var/www/dominanta/data/www/my.ctdominanta.com.ua/modules/Test/TestController.php(60): SoapClient->SoapClient('https://policyr...', Array) #1 /var/www/dominanta/data/www/my.ctdominanta.com.ua/components/Router.php(68): TestController->actionSpoil() #2 /var/www/dominanta/data/www/my.ctdominanta.com.ua/index.php(22): Router->run() #3 {main} thrown in /var/www/dominanta/data/www/my.ctdominanta.com.ua/modules/Test/TestController.php on line 60
    Это я получаю на сервере CentOS 7 + php-fpm 7.1.7 + nginx + SSL (let's encrypt)
    Но! На другом сервере (Debian+php.5.4+apache2) все проходит успешно и я получаю то что нужно:
    00000000-0000-0000-0000-0000000000002017-11-27T19:36:29.072Z2017-11-27T19:41:29.072ZPT0StestRequest123|1234|20050722 01:00|13|1|0|5|2|0|0|11|1|3|2|12|20151116 03:02|0|1234567890|1|123|456|1975|AC6548AA|20151116 02:57|123|12345|000101001110|0,1|0,1|0,1|0,1|0,1|1|1true4e529892-15a3-4a75-8fdc-565204e6798e

    Какие идеи?
     
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @Intrerio, бывает, что действительно сервис недоступен в силу различных причин. Возможно даже из-за проблем маршрутизации сервера/хоста на котором выполняете обращение к wsdl. Возможно, временных... Бывает и так: ещё вариант.
    И почему __doRequest, а не __soapCall?
     
    Intrerio нравится это.
  3. Intrerio

    Intrerio Активный пользователь

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    Вы понимаете, сам сервис доступен если перейти на страничку https://policyrw.mtsbu.ua/v3/ChangeContracts.svc?wsdl . Пробовал curl https://policyrw.mtsbu.ua/v3/ChangeContracts.svc?wsdl тоже все ок. Почему __doRequest... Да если честно то и сам не знаю. Просто это первое что попало под руку да и с задачей справляется. Вот не могу понять почему на разных серверах (причем не локалках) по разному проходят запросы. Осталось два дня до здачи задания, а я уперся в тупик
     
  4. Intrerio

    Intrerio Активный пользователь

    С нами с:
    20 мар 2015
    Сообщения:
    176
    Симпатии:
    7
    И все таки нашел где собака зарыта.Может кому то пригодится. Значит сделал следующее:
    1.Нашел файл php.ini (Он у меня лежит /opt/php71/etc/php.ini)
    2.Открыл и в конце файла добавил строчку extension=soap.so
    3. Сделал ребут сервера (не просто перезапуск сервисов, а именно ребут)
    4. Получил долгожданную работу SOAP
    Всем спасибо за советы