Вызов метода PHP Soap возвращает не все данные, но __getLastResponse возвращает

#php #soap #php-7.1

#php #soap #php-7.1

Вопрос:

Я вызываю метод, используя php soap.

 $options = ['trace' => 1,
            'exceptions' => true,
            'wsdl_cache' => WSDL_CACHE_NONE];

$wsdl = 'confidential-wsdl';
$client = new SoapClient($wsdl,$options);

try {
    $result = $client->__call("SomeClientsMethod",array($params));
    $response = $client->__getLastResponse();
    var_dump($result); // Not all data received
    var_dump($response); // All data received
} catch (Exception $e) {
    //No exception thrown
    throw new Exception("Request failed!".$client->__getLastResponse());
}
  

Этот вызов возвращает не все данные, которые определены в wsdl,
но если я вызываю $client->__getLastResponse(), то я получаю все данные правильно

Может ли кто-нибудь указать мне правильное направление для отладки? Заранее спасибо

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

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

1. Вы начали с того, что заключили это в try / catch ?

2. Извините, я отредактировал свой вопрос. Да, я использую try / catch, но не генерируется исключение. Итак, вызывающий метод был обновлен теми дополнительными данными, которые я не получаю. Может быть, какая-то проблема с кэшем? Но у меня есть опция WSDL_CACHE_NONE

Ответ №1:

Чтобы перехватить ошибки, попробуйте обернуть свои вызовы в try / catch:

 try{
    $client = new SoapClient($wsdl,$options);
    $client->__call("SomeClientsMethod",array($params));
}

# I'm not sure exactly which one of these it is:

catch(Throwable $e){
    var_dump($e->getMessage());
}
catch (SoapFault $e) {
    var_dump($e->getMessage());
}
  

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

1. Здесь та же проблема. я уже использовал оболочку try catch. но, похоже, не работает

Ответ №2:

похоже, это была проблема с кэшем. Вероятно, из-за опции soap.wsdl_cache_ttl=86400 в php.ini Теперь вызов функции возвращает все данные…

Спасибо за ответы

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

1. Я рад, что вы разобрались с этим!

Ответ №3:

У меня та же проблема, php выполняет синтаксический анализатор, и он возвращает только два элемента

 <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
    <s:Header>
        <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
            <u:Timestamp u:Id="_0">
                <u:Created>2023-01-27T18:05:56.227Z</u:Created>
                <u:Expires>2023-01-27T18:10:56.227Z</u:Expires>
            </u:Timestamp>
        </o:Security>
    </s:Header>
    <s:Body>
        <ListarSolicitacoesInscricaoMunicipalResponse xmlns="Jucesp.Services.InscricoesMunicipais.InscricaoMunicipal">
            <ListarSolicitacoesInscricaoMunicipalResult xmlns:a="Jucesp.Services.InscricoesMunicipais.InscricaoMunicipal/01" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
                <AuthenticationHeader i:nil="true" xmlns="Jucesp.Services.Viabilidades.Data/01" xmlns:b="Jucesp.Services.Data/01"/>
                <a:solicitacoes>
                    <a:solicitacao>
                        <a:protocoloRedesim>SPP2330004767</a:protocoloRedesim>
                        <a:cnpj>49364299000152</a:cnpj>
                        <a:numeroRegistro i:nil="true"/>
                        <a:nomeEmpresarial>OSMAR DE PAULA LIMA FILHO MINI MERCADO</a:nomeEmpresarial>
                        <a:dataSolicitacao>2023-01-27T13:18:35.103</a:dataSolicitacao>
                        <a:orgaoRegistro>Junta Comercial</a:orgaoRegistro>
                        <a:eventos>
                            <a:evento>
                                <a:Codigo>101</a:Codigo>
                                <a:Descricao>Inscrição de primeiro estabelecimento</a:Descricao>
                            </a:evento>
                        </a:eventos>
                        <a:situacao>Viabilidade Utilizada</a:situacao>
                    </a:solicitacao>
                </a:solicitacoes>
            </ListarSolicitacoesInscricaoMunicipalResult>
        </ListarSolicitacoesInscricaoMunicipalResponse>
    </s:Body>
</s:Envelope>
  

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