PHP / Laravel выглядит так, как будто мы не получили XML-документа при создании soapcall

#php #laravel #soap #soapui #soap-client

#php #laravel #soap #soapui #soap-client

Вопрос:

Я пытаюсь выполнить вызов soap и продолжаю получать следующую ошибку:

похоже, мы не получили XML-документа

РЕДАКТИРОВАТЬ сообщение об ошибке

введите описание изображения здесь

вот пример, который отлично работает в моем SOAP UI

введите описание изображения здесь

Вот мой массив, который я отправляю на свой soapCall:

 $params = [
    'id' => '0000002721',
    'options' => [
                    'returnAttachments' => 'false',
                    'returnPictures'    => 'false',
                    'returnContract'    => 'false'
                 ]
];
  

Вот код, как я выполняю вызов soap

 try {
    $options = array(
        'ssl' => array(
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true
        )
    );

    $context = stream_context_create($options);

    $soapClient = new SoapClient(__DIR__ . '/Soap.wsdl', [
        'stream_context' => $context,
        'login' => 'login',
        'password' => 'password',
        'trace' => 1,
            'exceptions' => true,
    ]);

    $soapClient->__setLocation('url');

    $this->soapClient = $soapClient;
} catch (SoapFault $e) {
    var_dump($e); exit;
}

try {
    $result = $this->soapClient->__soapCall('getMaintenanceObject', $params);
} catch (SoapFault $e) {
    var_dump($e); exit;
}
  

Ответ №1:

SoapClient может быть не очень выразительным, когда дело доходит до отображения ошибок, добавьте это:

var_dump($this->soapClient->__getLastRequestHeaders());
var_dump($this->soapClient->__getLastResponseHeaders());

Комментарии:

1. к сожалению, это ничего не дает.

2. Отображает ли он вообще что-нибудь? У меня были подобные проблемы раньше, если у вас возникли проблемы с аутентификацией или что-то подобное, они будут скрыты, и вы получите пустые XML-файлы, как у вас, и фактический ответ может быть визуализирован только с помощью строк, которые я опубликовал.

3. Я добавил скриншот результата, который я получаю в своем браузере

4. Добавьте две строки var_dump, которые я опубликовал после } catch (SoapFault $e) { и посмотрите, получите ли вы какую-то информацию. Информация не была изначально сброшена, потому что создавался SoapFault.