Другие подобные вопросы не помогли мне решить эту проблему.
Мне нужно получить файл WSDL, используя комбинацию сертификат клиента + закрытый ключ, с моего веб-сервера, вызывающего другой внешний SOAP API.
$wsdl = 'https://www.example.com?wsdl';
$endpoint = 'https://www.example.com';
$sslContext = stream_context_create($contextOptions);
$options = [
'local_cert' => '/var/www/combo.pem',
'passphrase' => 'Pass1',
'cache_wsdl' => WSDL_CACHE_MEMORY,
'trace' => 1,
'stream_context' => stream_context_create([
'ssl' => [
'ciphers' => 'RC4-SHA',
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
]
])
];
try{
$soapClient = new SoapClient($wsdl, $options);
}
catch(Exception $e)
{
var_dump($e);
}
Я получаю ошибку: SOAP -ERROR: Синтаксический анализ WSDL: Не удалось загрузить из '..domain ..': не удалось загрузить внешнюю сущность "..domain ..? Wsdl "
Я пробовал множество настроек, и ни одна из них не имела никакого значения для этого ответа. Я не пробовал никаких настроек, пустой массив.
Что сработало:
Установка необработанного соединения через CURL, поэтому файл сертификата в порядке
Получение информации WSDL из SoapUI, поэтому назначение WSDL правильное и файл сертификата в порядке
phpinfo () возвращает SoapClient включен, OpenSSL включен. Что еще я могу попробовать или проверить?