Как отлаживать мыло в PHP?

Я пытаюсь выполнить SOAP-запрос с PHP на сервере, но все, что я получаю, это «Не удается подключиться к хосту» при запуске

$this->client->__soapCall("aMethod()", [$request_param_array])); 

Я думаю, что WSDL в порядке, поскольку я могу связаться с ним в своем браузере и при запуске

 $this->client->__getFunctions(); 

Я получаю список доступных функций (как указано в этом wsdl).

Мне нужен сертификат для вызова SOAP на этот сервер, так что, может быть, это проблема? Но я не знаю, как я могу отлаживать причину ошибки «Не удалось подключиться к хосту».

Любые идеи, которые могут вызвать эту ошибку, или как я могу найти проблему?

Мой код:

 public function __construct($url, $wsdl = null) { $this->wsdl = $wsdl != null ? $wsdl : $url . '?wsdl'; $this->client = new SoapClient($this->wsdl, array( "trace" => "1", "local_cert" => realpath(__DIR__ . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . "..") . "cert.pfx", "passphrase" => "admin", )); Log::info(sprintf("New SoapClient created with WSDL: '%s'", $this->wsdl)); } 

Я использовал SoapUI позже, чтобы отлаживать немного больше вокруг этих проблем, связанных с SOAP. SoapUI дал мне исключение «SSL Handshake». Он оказался недействительным сертификатом закрытого ключа, который не соответствовал сертификату открытого ключа на сервере SOAP, к которому я подключался.

Хотя, я до сих пор не вижу, как я могу отлаживать такие проблемы на PHP. Есть идеи? Дай мне знать.

Самый простой и лучший способ отладки SOAP-запроса – создать расширение SOAP (см. Комментарии), которое регистрирует необработанный запрос SOAP и необработанный ответ SOAP от веб-службы или клиента веб-службы, используя следующие функции класса SoapClient:

 SoapClient::__getLastRequestHeaders SoapClient::__getLastRequest SoapClient::__getLastResponseHeaders SoapClient::__getLastResponse 

Не забывайте, что для его работы вам нужно создать объект SoapClient с включенной опцией trace:

 $client = new MySoapClient($wsdlUrl, array('trace' => 1)); 

Дополнительным советом, разрабатывающим SOAP-решения в PHP, является очистка папки tmp при изменении контракта WSDL (см. Путь к папке tmp в phpinfo ()), чтобы заставить PHP SoapClient загружать файлы WSDL и XSD снова, вместо этого, используя кэшированные файлы (пока они не будут истекает).

В дополнение к SoapUI вы также можете использовать прокси-сервер промежуточной трассировки, такой как Charles, как описано здесь . Недостатком этого довольно эффективного метода является то, что вы добавляете больше слоев и, следовательно, могут вводить новые проблемы.

Существуют также коммерческие отладчики SOAP, которые стоят денег, таких как XML Spy SOAP Debugger или SOAPSonar, которые выполняют валидацию и вызов. В любом случае SoapUI всегда хороший компаньон.

Основная информация об ошибках также может быть найдена в журнале php и журнале веб-сервера. Убедитесь, что вы включили полное / чистое ведение журнала.