@lostinvlg

PHP SOAP и сертификат?

При смене версии php5.5 на php5.6/php7(как на vds, так и на локальном) отваливается soap client одного из проектов.

<?php
$wsdl = 'https://site.com/webservice/service.svc/wsdl?wsdl';
$soap = new SoapClient($wsdl, ["soap_version" => SOAP_1_1]);
var_dump($soap);


До перехода на версии <=php5.5:

Object(SoapClient)#3 (2) { ["_soap_version"]=> int(1) ["sdl"]=> resource(16) of type (Unknown) }

Начиная с 5.6:

"Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://site.com/webservice/service.svc/wsdl?wsdl' : failed to load external entity "https://site.com/webservice/service.svc/wsdl?wsdl"

Через браузер wsdl документ открывается нормально.

В первом случае file_get_contents() получает документ, для php >=5.6 ошибка:

"Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in"

Получается, что получения документа необходим сертификат?

Кто-нибудь сталкивался с похожим?

P.S. curl, openssl, libxml установлены и подключены в php.ini.
  • Вопрос задан
  • 3171 просмотр
Решения вопроса 1
AloneCoder
@AloneCoder
[object Object]
$wsdl = 'https://site.com/webservice/service.svc/wsdl?wsdl';
$soap = new SoapClient($wsdl, [
    "soap_version" => SOAP_1_1,
    "stream_context" => stream_context_create(
            [
                'ssl' => [
                    'verify_peer'       => false,
                    'verify_peer_name'  => false,
                ]
            ]
        )
]);
var_dump($soap);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@urfinjazz
может кому-то поможет... решил проблему, увеличив default_socket_timeout
ошибка появлялась при default_socket_timeout < 3, в том числе при значении -1
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы