Здравствуйте друзья.Давно не заходил. Вот собственно что беспокоит меня. Есть некий soap сервис https://policyrw.mtsbu.ua/v3/ChangeContracts.svc . Написал простой метод: PHP: public function actionSpoil(){ $xml = ' <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"> <soapenv:Header> <o:Security soapenv:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <o:UsernameToken> <o:Username>тут наш токен</o:Username> </o:UsernameToken> </o:Security> </soapenv:Header> <soapenv:Body> <ns:GetSignFromRequest> <ns:digSignRequest> <ns:Contract> <ns:Address>123</ns:Address> <ns:AutoDescr>1234</ns:AutoDescr> <ns:BirthDate>2005-07-22T00:00:00+02:00</ns:BirthDate> <ns:DBonusMalusID>DBonusMalus_13</ns:DBonusMalusID> <ns:DCitizenStatusID>DCitizenStatus_1</ns:DCitizenStatusID> <ns:DCityID>0</ns:DCityID> <ns:DDiscountID>DDiscount_5</ns:DDiscountID> <ns:DExpLimitID>DExpLimit_2</ns:DExpLimitID> <ns:DMarkID>0</ns:DMarkID> <ns:DModelID>0</ns:DModelID> <ns:DPeriodID>DPeriod_11</ns:DPeriodID> <ns:DPersonStatusID>DPersonStatus_1</ns:DPersonStatusID> <ns:DPrivelegeID>DPrivelege_3</ns:DPrivelegeID> <ns:DSphereUseID>DSphereUse_2</ns:DSphereUseID> <ns:DVehicleTypeID>DVehicleType_12</ns:DVehicleTypeID> <ns:DateNextTO>2015-11-16T03:02:33.517202+02:00</ns:DateNextTO> <ns:Franchise>0</ns:Franchise> <ns:IdentCode>1234567890</ns:IdentCode> <ns:InsPremium>1</ns:InsPremium> <ns:Name>123</ns:Name> <ns:PName>456</ns:PName> <ns:ProdYear>1975</ns:ProdYear> <ns:RegNo>AC6548AA</ns:RegNo> <ns:StartDate>2015-11-16T02:57:33.517202+02:00</ns:StartDate> <ns:Surname>123</ns:Surname> <ns:VIN>12345</ns:VIN> <ns:VehicleUsage>000101001110</ns:VehicleUsage> <ns:k1>0.1</ns:k1> <ns:k2>0.1</ns:k2> <ns:k3>0.1</ns:k3> <ns:k4>0.1</ns:k4> <ns:k5>0.1</ns:k5> <ns:k6>1</ns:k6> <ns:k7>1</ns:k7> </ns:Contract> <ns:InputMessageID>testRequest</ns:InputMessageID> </ns:digSignRequest> </ns:GetSignFromRequest> </soapenv:Body> </soapenv:Envelope>'; $opts = array('ssl' => array('ciphers'=>'SHA1', 'verify_peer'=>false, 'verify_peer_name'=>false)); $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) ); $client = new SoapClient("https://policyrw.mtsbu.ua/v3/ChangeContracts.svc?wsdl",$params); /*array( 'soap_version' => SOAP_1_2, 'trace'=>1, 'authentication'=>'некий код авторизации', 'keep_alive'=>'Connection: Keep-Alive' ));*/ $ns = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'; //Namespace of the WS. $headerbody = array('Security'=>array('UsernameToken' => array('Username'=>'5A17116A-93A4-4885-A98F-1BACA3A3CF30'))); $header = new SOAPHeader($ns, 'Security', $headerbody); $client->__setSoapHeaders($header); $res = $client->__doRequest($xml, 'https://policyrw.mtsbu.ua/v3/ChangeContracts.svc', 'http://kitsoft.kiev.ua/mtsbu/2017/08/22/IDigitalPolicy/GetSignFromRequest', SOAP_1_1); echo $res; } При запуске метода получаю : 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 Какие идеи?
@Intrerio, бывает, что действительно сервис недоступен в силу различных причин. Возможно даже из-за проблем маршрутизации сервера/хоста на котором выполняете обращение к wsdl. Возможно, временных... Бывает и так: ещё вариант. И почему __doRequest, а не __soapCall?
Вы понимаете, сам сервис доступен если перейти на страничку https://policyrw.mtsbu.ua/v3/ChangeContracts.svc?wsdl . Пробовал curl https://policyrw.mtsbu.ua/v3/ChangeContracts.svc?wsdl тоже все ок. Почему __doRequest... Да если честно то и сам не знаю. Просто это первое что попало под руку да и с задачей справляется. Вот не могу понять почему на разных серверах (причем не локалках) по разному проходят запросы. Осталось два дня до здачи задания, а я уперся в тупик
И все таки нашел где собака зарыта.Может кому то пригодится. Значит сделал следующее: 1.Нашел файл php.ini (Он у меня лежит /opt/php71/etc/php.ini) 2.Открыл и в конце файла добавил строчку extension=soap.so 3. Сделал ребут сервера (не просто перезапуск сервисов, а именно ребут) 4. Получил долгожданную работу SOAP Всем спасибо за советы