Wrapping XML for SOAP request



I am having trouble in wrapping multi dimensional XML data to array in PHP to send to SOAP server



<soapenv:Body>
<ezit:AddClientSitesEx>

<ezit:ID>hello</ezit:ID>
<ezit:Password>pass</ezit:Password>
<ezit:ClientData>
<![CDATA[
<clientsitelistex>
<clientsite>
<id>1</id>
<callerid>6475710001|6475710002</callerid>
<status>ACTIVE</status>
<reference>SITE01_M4158</reference>
<sitename>ADAMS Huriata</sitename>
<managerref>MGR2023</managerref>
<pbxsite>false</pbxsite>
<parentsiteref/>
<sitegroup>Residential</sitegroup>
<costcode>5</costcode>
<minstaff>1</minstaff>
<alarmtimeon>22:00</alarmtimeon>
<alarmtimeoff>08:00</alarmtimeoff>
<visitduration>60</visitduration>
<externalref>SiteUpload1</externalref>
<failifexists>true</failifexists>
<address>Flat 26/7 Kevale Place</address>
<city>Auckland</city>
<state>AKL</state>
<postalcode>2102</postalcode>
<country>NZ</country>
<address2>Manurewa</address2>
<sitetags>Elderly|High-Risk</sitetags>
<keyholdername>Huriata ADAMS</keyholdername>
<keyholdernumber>64992660051</keyholdernumber>
<emergencyname>Ms H Hura</emergencyname>
<emergencynumber>642102718141</emergencynumber>
<custom1>Custom Field 1</custom1>
<custom2>Custom Field 2</custom2>
<telephonenotavailable>false</telephonenotavailable>
<alertemail>true</alertemail>
<alertsms>false</alertsms>
<alertvoice>false</alertvoice>
<idnumber>239857</idnumber>
</clientsite>

<clientsite>
<id>2</id>
<reference>SITE02</reference>
<managerref>MGR2023</managerref>
</clientsite>

<clientsite>
<id>3</id>
<reference>SITE02</reference>
<managerref>MGR2023</managerref>
<newreference>SITE03</newreference>
</clientsite>

<clientsite>
<id>4</id>
<status>DELETE</status>
<reference>SITE03</reference>
</clientsite>



<!-- end -->
</clientsitelistex>
]]>
</ezit:ClientData>

<ezit:ExternalRef>ExampleData</ezit:ExternalRef>

<ezit:Test>false</ezit:Test>
</ezit:AddClientSitesEx>
</soapenv:Body>


The code that I have written is this



$url = "http://ift.tt/16sHJCA";
$options = array("soap_version" => SOAP_1_1,"trace" => 1);

$client = new SoapClient($url, $options);

$xml_params = array ('clientsitelistex'=>array(
'clientsite' => array(
'id' => "1",
'callerid' => "6475710001|6475710002",
'status' => "ACTIVE",
'reference' => "SITE01_M4158",
'sitename' => 'ADAMS Huriata',
'managerref' => "MGR2023",
'pbxsite' => false,
'sitegroup' => "Residential",
'costcode' => "5",
'minstaff' => "1",
'alarmtimeon' => "22:00",
'alarmtimeoff' => "08:00",
'visitduration' => "60",
'externalref' => "SiteUpload1",
'failifexists' => true,
'address' => "Flat 26/7 Kevale Place",
'city' => "Auckland",
'state' => "AKL",
'postalcode' => "2102",
'country' => "NZ",
'address2' => "Manurewa",
'sitetags' => "Elderly|High-Risk",
'keyholdername' => "Huriata ADAMS",
'keyholdernumber' => "64992660051",
'emergencyname' => "Ms H Hura",
'emergencynumber' => "642102718141",
'custom1' => "Custom Field 1",
'custom2' => "Custom Field 2",
'telephonenotavailable' => false,
'alertemail' => true,
'alertsms' => false,
'alertvoice' => false,
'idnumber' => "239857"
)
)
);


//Add xml parameters here
$user_param = array (
'ID' => "hello",
'Password' => "pass",
array('ClientData' => $xml_params),
'ExternalRef' => "1234",
'Test' => 'False'
);

$result = $client->AddClientSitesEx($user_param);


It gives me



<results>
<resultsummary>
<result>ERROR</result>
<lasterrtype>BadXML</lasterrtype>
<lasterrtypevalue>3</lasterrtypevalue>
<errordesc>Error transforming batch data to xml. Data at the root level is invalid. Line 1, position 1.</errordesc>
<batchid>00c7a342-ff16-4139-b8f9-4ca9ae7e2371</batchid>
<externalref>1234</externalref>
<status>Start</status>
<statusvalue>1</statusvalue>
<totalrows>0</totalrows>
<invalidrows>0</invalidrows>
<validrows>0</validrows>
<unprocessedrows>0</unprocessedrows>
</resultsummary>
</results>


And when I do htmlentities($client->__getLastRequest()) It shows me that "Array" in Client Data



<soap-env:envelope xmlns:soap-env="http://ift.tt/sVJIaE" xmlns:ns1="http://example.com/abc/">
<soap-env:body>
<ns1:addclientsitesex>
<ns1:id>hello</ns1:id>
<ns1:password>pass</ns1:password>
<ns1:clientdata>Array</ns1:clientdata>
<ns1:externalref>1234</ns1:externalref>
<ns1:test>true</ns1:test>
</ns1:addclientsitesex>
</soap-env:body>
</soap-env:envelope>


Can anyone help how can I wrap client data


Thank You,


No comments:

Post a Comment