PHP SOAP pass form array to WSDL on remote server

Dear Experts.

I am stuck on a small problem with PHP5 Soap / WSDL.

I need to pass the contents of a form to fill a WSDL on another server. This needs to be sent as an array.

The array is sent as a $param and I have attemted to do it like this:

$weborder = array('OrderID'=>$OrderID,'UserName'=>$UserName,'Password'=>$Password,'CusID'=>$DealerID,'SiteID'=>$DealSiteID,'Title'=>$title,'CusFname'=>$fname,'CusLName'=>$lname, 'BillAddr1'=>$addr1,  'BillAddr2'=>$addr2, 'BillAddr3'=>$addr3, 'BillAddr4'=>$addr4, 'BillPCode'=>$postc, 'BillPhone'=>$phone, 'BillMobile'=>$mobile,  'BillEmail'=>$email);

$param["WebsiteOrder"] = $Weborder;


$client = new SoapClient("http://www.somewhere.com/service.asmx?WSDL");
$RIOresult = $client -> ReadInOrder($param);

And my hope was that it would populate this WSDL correctly

 <ReadInOrder xmlns="http://www.somewhere.com/">
    <OrderID>$OrderID</OrderID>
      <UserName>$UserName</UserName>
      <Password>$Password</Password>
      <WebsiteOrder>
        <CusID>$DealerID</CusID>
        <SiteID>$DealSiteID</SiteID>
        <Title>$title</Title>
        <CusFName>$fname</CusFName>
        <CusLName>$lname</CusLName>
        <BillAddr1>$addr1</BillAddr1>
        <BillAddr2>$addr2</BillAddr2>
        <BillAddr3>$addr3</BillAddr3>
        <BillAddr4>$addr4</BillAddr4>
        <BillPCode>$postc</BillPCode>
        <BillPhone>$phone</BillPhone>
        <BillMobile>$mobile</BillMobile>
        <BillEmail>$email</BillEmail>

 </WebsiteOrder>
    </ReadInOrder>

But the best I can get is this error

Uncaught SoapFault exception: [soap:Server] Server was unable to process request. ---> Object reference not set to an instance of an object. in C:\Inetpub\wwwroot........etc

Can anyone help me decifer the problem and set me on the path to enlightenment!

many thanx


imagicstudiosAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

cubical10Commented:
Build a test file to display how php is parsing the wsdl.
Instantiate the SoapClient with the option array('trace' => 1), this will enable some debug options.
<?
$server = 'http://someserver/path/to/wsdl.wsdl';
$client = new SoapClient($server, array('trace' => 1));

echo '<h4>Available Methods</h4>';

$methods = $client->__getFunctions();
echo "<ol>\n";
foreach ($methods as $k => $method) {
            echo "<li>$method</li>";
}
echo "</ol>\n";

echo "<h4>Supported Types</h4>";
$types = $client->__getTypes();
echo "<ol style=\"white-space: pre;\">\n";
foreach ($types as $k => $type) {
            echo "<li>$type</li>";
}
echo "</ol>\n";

?>
This file will now list all of the available methods and list the types needed to use those methods.
The methods will be listed as ReturnStuct methodName(RequestStruct $requestVariable).

You will have to connect the dots so to speak.  As usually the RequestStruct is made up of other structs.  If you share the output of the file above, i can help you some more.

You can add the following code to above file to view the generated soap request envelope and response.

$parameters = //array or object or string or whatever...
print_r($parameters);
      try {
            $data = $client->methodName($parameters);
            print_r($data);
            
      } catch (SoapFault $soapFault) {
            echo $soapFault;
      }
      $request = $client->__getLastRequest();
      $request = str_replace('><',">\n<",$request);
      echo "<hr><textarea rows='20' cols='250' style='background-color: #dddddd; color: blue;'>$request</textarea>";
      $response = $client->__getLastResponse();
      $response = str_replace('><',">\n<",$response);
      echo "<hr><textarea rows='20' cols='250' style='background-color: #eeeeee; color: purple;'>$response</textarea>";
}

As a final note, if the RequestStruct is of an Abstract type, then you are going to need to build your request parameter with SOAPVar: http://us2.php.net/manual/en/function.soap-soapvar-construct.php

Hope this helps...

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Web Languages and Standards

From novice to tech pro — start learning today.