SOAP: каким способом предавать параметры?

Vax

Новичок
Впервые работаю с SOAP, и уже почти 8 часов пытаюсь наладить сервис: никак не могу передать параметры. Я уже пробовал и массивом, и классами - результат всегда один - SoapFault. Помогите, пожалуйста, разобраться в чём проблема.

Код:
PHP:
$Sender = new stdClass();
$Sender->senderPostalCode = '97000';
$Sender->senderCountryCode = 'MX';
$Sender->senderCityName = 'MERIDA';

$Receiver = new stdClass();
$Receiver->receiverPostalCode =  '96536';
$Receiver->receiverCountryCode = 'MX';
$Receiver->receiverCityName = 'COATZACOALCOS';

$ShipmentDetails = new stdClass();
$ShipmentDetails->calculateTransitTime = 'false';
$ShipmentDetails->checkCutOffTime = 'false';
$ShipmentDetails->shipmentWeight = '1';


$client = new SoapClient('http://201.175.39.6/Coverage/Webservices/Coverage?wsdl', array('trace' => 1, 'exceptions' => 0));
$result = $client->getCoverage( $Sender,  $Receiver,  $ShipmentDetails);
В результате формируется такой XML-документ:
PHP:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://service.coverage.dhl.com.mx">

<SOAP-ENV:Body>
    <ns1:getCoverage>
           <ns1:in0 xsi:nil="true"/>
           <ns1:in1 xsi:nil="true"/>
           <ns1:in2 xsi:nil="true"/>
    </ns1:getCoverage>
   
  <param1>
         <receiverPostalCode>96536</receiverPostalCode>
         <receiverCountryCode>MX</receiverCountryCode>
         <receiverCityName>COATZACOALCOS</receiverCityName>
   </param1>

   <param2>
          <calculateTransitTime>false</calculateTransitTime>
          <checkCutOffTime>false</checkCutOffTime>
          <shipmentWeight>1</shipmentWeight>
    </param2>

</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Из последнего листинга видно, что почему-то не передался параметр Sender. Более того, XML-документ сильно отличается от примера, предложенного в документации:
PHP:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.coverage.dhl.com.mx" xmlns:mod="http://model.coveragemanifest.dhl.com.mx">
   <soapenv:Header/>
   <soapenv:Body>
      <ser:getCoverage>
         <ser:in0>
            <!--Optional:-->
            <mod:senderCountryCode>MX</mod:senderCountryCode>
            <!--Optional:-->
            <mod:senderCityName>MERIDA</mod:senderCityName>
            <!--Optional:-->
            <mod:senderIATA></mod:senderIATA>
            <!--Optional:-->
            <mod:senderSubIATA></mod:senderSubIATA>
            <!--Optional:-->
            <mod:senderPostalCode>97000</mod:senderPostalCode>
            <!--Optional:-->
            <mod:senderSuburbType></mod:senderSuburbType>
         </ser:in0>
         <ser:in1>
            <!--Optional:-->
            <mod:receiverSubIATA></mod:receiverSubIATA>
            <!--Optional:-->
            <mod:receiverPostalCode>96536</mod:receiverPostalCode>
            <!--Optional:-->
            <mod:receiverCountryCode>MX</mod:receiverCountryCode>
            <!--Optional:-->
            <mod:receiverIATA></mod:receiverIATA>
            <!--Optional:-->
            <mod:receiverSuburbType></mod:receiverSuburbType>
            <!--Optional:-->
            <mod:receiverCityName>COATZACOALCOS</mod:receiverCityName>
         </ser:in1>
         <ser:in2>
            <!--Optional:-->
            <mod:calculateTransitTime>true</mod:calculateTransitTime>
            <!--Optional:-->
            <mod:checkCutOffTime>true</mod:checkCutOffTime>
            <!--Optional:-->
            <mod:shipmentWeight>1</mod:shipmentWeight>
            <!--Optional:-->
            <mod:pieceDetails>
            </mod:pieceDetails>
            <!--Optional:-->
            <mod:accountNumber></mod:accountNumber>
            <!--Optional:-->
            <mod:shipmentWeightUnit></mod:shipmentWeightUnit>
         </ser:in2>
      </ser:getCoverage>
   </soapenv:Body>
</soapenv:Envelope>
 
PHP:
$client = new SoapClient('http://201.175.39.6/Coverage/Webservices/Coverage?wsdl', array('trace' => 1));
$res = $client->getCoverage(array('in0'=>array('senderPostalCode'  => '97000',
                                        'senderCountryCode' => 'MX',
                                        'senderCityName'    => 'MERIDA' ),
                           'in1'=>array('receiverPostalCode'  => '96536',
                                        'receiverCountryCode' => 'MX',
                                        'receiverCityName'    => 'COATZACOALCOS' ),
                           'in2'=>array('calculateTransitTime' => false,                                        
                                        'shipmentWeightUnit'       => 1) ));
var_dump($res->out);
echo $client->__getLastRequest();
echo $client->__getLastResponse();
Request:
PHP:
<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://model.coveragemanifest.dhl.com.mx" xmlns:ns2="http://service.coverage.dhl.com.mx">
    <SOAP-ENV:Body>
        <ns2:getCoverage>
            <ns2:in0>
                <ns1:senderPostalCode>97000</ns1:senderPostalCode>
                <ns1:senderCountryCode>MX</ns1:senderCountryCode>
                <ns1:senderCityName>MERIDA</ns1:senderCityName>
            </ns2:in0>
            <ns2:in1>
                <ns1:receiverCityName>COATZACOALCOS</ns1:receiverCityName>
                <ns1:receiverPostalCode>96536</ns1:receiverPostalCode>
                <ns1:receiverCountryCode>MX</ns1:receiverCountryCode>
            </ns2:in1>
            <ns2:in2>
                <ns1:calculateTransitTime>false</ns1:calculateTransitTime>
                <ns1:shipmentWeightUnit>1</ns1:shipmentWeightUnit>
            </ns2:in2>
        </ns2:getCoverage>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
 
Сверху