SOAP-ERROR: парсинг WSDL: не удалось загрузить из 'https://***? Wsdl' - PullRequest
0 голосов
/ 31 октября 2018

У меня есть клиент Soap, который работает с файлом pem

$url = "https://test_site.com/test?wsdl";
$action = 'http://xmlns.test_site.com/CoreObjects/GetData';

$client = new SoapClient(
    $url,
    [
        'stream_context'=> stream_context_create([
            'ssl' => [
                'local_cert'        => 'keys/includesprivatekey.pem',
                'passphrase'        => 'secret_word',
                'verify_peer'       => false,
                'verify_peer_name'  => false,
                'allow_self_signed' => true,
            ]
        ]),
        'cache_wsdl'    => WSDL_CACHE_NONE,
        'trace'         => 1,
        'exceptions'    => 1,
        'soap_version' => SOAP_1_2,
        'verifypeer' => false,
        'verifyhost' => false,
    ]
);

echo $client->__doRequest($xml, $url, $action, 1);

Когда я пытаюсь отправить запрос без файла local_cert, я получаю ответ от API с файлом сертификата NULL. При добавлении файла local_cert я получаю фатальное исключение:

Неустранимая ошибка: необработанное исключение SoapFault: [WSDL] SOAP-ERROR: Синтаксический анализ WSDL: не удалось загрузить с 'https://test_site.com/test?wsdl': не удалось загрузить внешнюю сущность "https://test_site.com/test?wsdl" в /srv/index.php

Это пример файла pem:

-----BEGIN CERTIFICATE-----
MIICfzCCAjGgAwIBAgIKAYoCQucBEgIF1TANBgkqhkiG9w0BAQQFADBdMQswCQYD
VQQGEwJVQTEOMAwGA1UEBxQFSVRfR08xDjAMBgNVBAoUBUlUX0dPMQ4wDAYDVQQL
FAVJVF9HTzEOMAwGA1UEDBQFSVRfR08xDjAMBgNVBAMUBUlUX0dPMB4XDTE1MDgy
ODA3NDAxMloXDTI1MD
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIICXDIBAAKBgQDhMZM9vKUJXMEHR60ZPF9vmGF5pJvx3jL5kY491sRmgnS4eluV
kvqSnXfrT+ZG82nGYZhRiLVnwKvE6/Zv8QnCSJsPCwTffEuF147CPW4/5ofMA97e
tn7xr557lckVALHwAfGiDXJLkMAsECc4AoGGOs9Iv6a5ru+AXlRDW63VGQIDAQAB
AoGAbUsBOiJXOs8AhAb+
-----END RSA PRIVATE KEY-----

Что не так?

++++++++++++++++++++++++++++++++++++++++

Upd:

Ваш вопрос был определен как возможный дубликат другого вопрос. Если ответы там не решают вашу проблему, пожалуйста, отредактируйте, чтобы подробно объяснить части вашего вопроса, которые являются уникальными.

Нет, это не дубликат. У меня есть сертификат, который мне нужно отправить клиенту. Если я удалю local_cert из stream_context, я не получу сообщение об ошибке на первом шаге при загрузке wsdl-файла, но получу ошибку от клиента API.

Решение в Поддерживает ли PHP SoapClient HTTPS-соединения было следующим

У меня такая же проблема на Windows с php 5.6, и она отлично работает на Linux с php 5.6.

Работа в среде LInux действительно решила проблему

Это не решение. Я работаю в Ubuntu 16.04 с php7.0 и пытаюсь на php5.6

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...