Потеря данных PHP и SOAP при отправке клиенту - PullRequest
1 голос
/ 09 декабря 2011

У меня есть массив данных, которые я хочу отправить клиенту SOAP. Это все работает, но одна часть данных не передается, как показывает __getLastRequest ().

Вот мой код

<?php

  $test_array = array(
    "request"   =>  array(
      "dateTime"          =>  "2011-12-05T11:37:06.0000000+00:00",
      "brandId"           =>  2,
      "extSysId"          =>  11,
      "extSysPassword"    =>  "xxxxx",
      "customer"          =>  array(
        "title" => "Mr",
        "firstName" =>  "Dec",
        "lastName" => "Test-Two",
        "address" => array(
          "type" => "Residential",
          "pafValidated" => TRUE,
          "houseNumber" => "xx",
          "houseName" => "",
          "line1" => "xx xx",
          "line2" => "",
          "line3" => "xx",
          "line4" => "",
          "line5" => "",
          "postcode" => "xxx xxx"
        ),
        "phones" => array(
          0 => array(
            "type" => "Home",
            "_" => "xxx xxxxxx"
          ),
          1 => array(
            "type" => "Work",
            "preferred" => TRUE,
            "_" => ""
          ),
          2 => array(
            "type" => "Mobile",
            "preferred" => TRUE,
            "_" => ""
          )
        ),
        "email" => "xxxx.xxxx@gmail.com"
      ),
      "nextPurchase"  => array(
        "date" => "2014-05-01"
      ),
      "dataProtection" => array(
        "group" => FALSE,
        "thirdParty" => FALSE
      ),
      "futureContactChannels" => array(
        0 => array(
          "type" => "Whitemail",
          "option" => FALSE
        ),
        1 => array(
          "type" => "Email",
          "option" => FALSE
        ),
        2 => array(
          "type" => "Phone",
          "option" => FALSE
        ),
        3 => array(
          "type" => "SMS",
          "option" => FALSE
        )
      ),
      "vehicleRequests" => array(
        0 => array(
          "derivativeCode" => "xxxxx",
          "type" => "T"
        )
      ),
      "Retailer" => array(
        0 => array (
          "dealerCode" => "00082"
        )
      ),
      "company" => array(
        "companyName" => "",
        "jobTitle" => ""
      ),
      "campaign" => array(
        "code" => "xxxxxxxxx",
        "source" => 69
      ),
      "notes" => "blah balh: ."
    )
  );

$client = new SoapClient("/xxx/xxxx/xxxxxx/xxxxx.wsdl", array(
  "login" => "xxx", 
  "password" => "xxx",
  "location" => "http://xxx.xxx.xxx.xxx/xxxxxx/Some.asmx",
  "uri" => "urn:xmethods-delayed-quotes",
  'trace' => 1,
  'exceptions' => 1,
  'soap_version' => 'SOAP_1_1',
  'encoding' => 'UTF-8',
  'features' => 'SOAP_USE_XSI_ARRAY_TYPE'
));


$client->CallComeFunction($test_array);

echo "REQUEST:\n" . $client->__getLastRequest() . "\n";

echo "*************************************************\n";

echo "Response:\n" . $client->__getLastResponse() . "\n";

Retailed [0] ['dealerCode'] является единственным фрагментом информации, который пропущен в отправленном XML.

Есть идеи?

Большое спасибо.

1 Ответ

2 голосов
/ 12 декабря 2011

Как говорит mac, было бы неплохо отформатировать код, но я заметил, что поле «Retailer» - единственное, которое пишется с заглавной буквы.Не уверен, что WSDL имеет какое-либо влияние на то, что посылает клиент, но это может сделать.

Дважды проверьте WSDL и посмотрите, должно ли поле быть «розничным».Есть ли у вас шанс поделиться WSDL, кстати?

РЕДАКТИРОВАТЬ После просмотра WSDL «розничный торговец» - это путь:

<s:element minOccurs="0" maxOccurs="1" name="retailer" type="tns:Retailer"/>

Полезная нагрузка также должна быть отформатирована иначедолжно быть

"retailer" => array(
    "dealerCode" => "00082"
)

для WSDL

<s:complexType name="Retailer">      
    <s:attribute name="dealerCode" type="s:string"/>        
</s:complexType>
...