SoapClient не работает в PHP, но работает инструмент веб-службы - PullRequest
0 голосов
/ 12 марта 2019

С этим кодом:

$client = new \SoapClient(
    'http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx?WSDL',
    array(
        // Stuff for development.
        'trace' => 1,
        'exceptions' => true,
        'cache_wsdl' => WSDL_CACHE_NONE

    )
);

$data['nCdServico'] = '04510';
$data['sCepOrigem'] = '14400500';
$data['sCepDestino'] = '14400500';
$data['nVlPeso'] = '1';
$data['nCdFormato'] = 1;
$data['nVlComprimento'] = 17;
$data['nVlAltura'] = 17;
$data['nVlLargura'] = 17;
$data['nVlDiametro'] = 17;
$data['nVlValorDeclarado'] = 0;


$response = $client->CalcPrecoPrazo($data);

Я использую внешний веб-сервис, и он отправляет мне неожиданную ошибку: «объект не установлен в качестве экземпляра объекта» при заполнении запроса. Очевидно, что-то не так с моим кодом, потому что когда я использую SoapUI, он работает. Если удалить $ data ['nVlLargura'], он жалуется, что nVLLargura отсутствует, поэтому я думаю, что он получает параметры. У меня нет большого опыта работы с веб-сервисами и XML в этом отношении.

Когда я отправляю этот xml с помощью SoapUI, он работает:

   <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
   <soapenv:Header/>
   <soapenv:Body>
      <tem:CalcPrecoPrazo>
         <!--Optional:-->
         <tem:nCdEmpresa>?</tem:nCdEmpresa>
         <!--Optional:-->
         <tem:sDsSenha>?</tem:sDsSenha>
         <!--Optional:-->
         <tem:nCdServico>40010</tem:nCdServico>
         <!--Optional:-->
         <tem:sCepOrigem>14400459</tem:sCepOrigem>
         <!--Optional:-->
         <tem:sCepDestino>14400500</tem:sCepDestino>
         <!--Optional:-->
         <tem:nVlPeso>2</tem:nVlPeso>
         <tem:nCdFormato>1</tem:nCdFormato>
         <tem:nVlComprimento>17</tem:nVlComprimento>
         <tem:nVlAltura>17</tem:nVlAltura>
         <tem:nVlLargura>17</tem:nVlLargura>
         <tem:nVlDiametro>0</tem:nVlDiametro>
         <!--Optional:-->
         <tem:sCdMaoPropria>?</tem:sCdMaoPropria>
         <tem:nVlValorDeclarado>0</tem:nVlValorDeclarado>
         <!--Optional:-->
         <tem:sCdAvisoRecebimento></tem:sCdAvisoRecebimento>

      </tem:CalcPrecoPrazo>
   </soapenv:Body>
</soapenv:Envelope>

1 Ответ

0 голосов
/ 13 марта 2019

Попробуйте выполнить ваш SOAP-запрос с помощью следующего скрипта. Списки функций и типов для информации, удалите их после теста:

<?php
// SOAP
$soap = new SoapClient(
    'http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx?WSDL',
    array(
        // Stuff for development.
        'trace' => 1,
        'exceptions' => true,
        'cache_wsdl' => WSDL_CACHE_NONE

    )
);

// List functions
echo 'Functions: '.'</br>';
$functions = $soap->__getFunctions();
foreach($functions as $item) {
    echo $item.'</br>';
}
echo '</br>';

// List types
echo 'Types: '.'</br>';
$types = $soap->__getTypes();
foreach($types as $item) {
    echo $item.'</br>';
}
echo '</br>';

// Consume SOAP
$params = array(
    "nCdEmpresa" => "?",
    "sDsSenha" => "?",
    "nCdServico" => "40010",
    "sCepOrigem" => "14400459",
    "sCepDestino" => "14400500", 
    "nVlPeso" => "2",
    "nCdFormato" => 1,
    "nVlComprimento" => 17,
    "nVlAltura" => 17, 
    "nVlLargura" => 17, 
    "nVlDiametro" => 0, 
    "sCdMaoPropria" => "?",
    "nVlValorDeclarado" => 0,
    "sCdAvisoRecebimento" => ""
);   
$responce = $soap->CalcPrecoPrazo($params);
var_dump($responce);
echo '<br>';
?>
...