Solved

PHP SOAP pass form array to WSDL on remote server

Posted on 2007-03-20
1
1,790 Views
Last Modified: 2013-11-18
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


0
Comment
Question by:imagicstudios
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
1 Comment
 
LVL 1

Accepted Solution

by:
cubical10 earned 500 total points
ID: 18775110
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

Featured Post

Get 15 Days FREE Full-Featured Trial

Benefit from a mission critical IT monitoring with Monitis Premium or get it FREE for your entry level monitoring needs.
-Over 200,000 users
-More than 300,000 websites monitored
-Used in 197 countries
-Recommended by 98% of users

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

JavaScript has plenty of pieces of code people often just copy/paste from somewhere but never quite fully understand. Self-Executing functions are just one good example that I'll try to demystify here.
There are times when I have encountered the need to decompress a response from a PHP request. This is how it's done, but you must have control of the request and you can set the Accept-Encoding header.
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

630 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question