Re: [SOAP] PHP SOAP - Extreme newbie questions :/

From: Date: Wed, 31 Mar 2010 14:49:13 +0000
Subject: Re: [SOAP] PHP SOAP - Extreme newbie questions :/
References: 1  Groups: php.soap 
Request: Send a blank email to php-soap+get-3064@lists.php.net to get a copy of this message
On 31 March 2010 13:54, lmhelp2 <lea.massiot@ign.fr> wrote: > > Hi everyone, > > I am an absolute beginner with SOAP :-( :-). > I have been trying to follow a tutorial > but I got stuck with "things" not working... > > (Maybe the following example is not the simplest > (I whish I had found a little "Hello World", but I didn't). > Notice that I wasn't especially willing to use "nusoap" > but it is what I found first. I discovered later I could > have used the SOAP extension for PHP... > but as I said I know nothing about that). > > > > 1) Database: > ~~~~~~~~~~~ > So, in that example, I first created a database: > ================================================= > CREATE DATABASE soap_tutorial; > > CREATE TABLE stockprices > ( >  stock_id          INT UNSIGNED    NOT NULL AUTO_INCREMENT, >  stock_symbol   CHAR(3)            NOT NULL, >  stock_price      DECIMAL(8,2)     NOT NULL, >  PRIMARY KEY(stock_id) > ); > > INSERT INTO stockprices VALUES (1, 'ABC', '75.00'); > INSERT INTO stockprices VALUES (2, 'DEF', '45.00'); > INSERT INTO stockprices VALUES (3, 'GHI', '12.00'); > INSERT INTO stockprices VALUES (4, 'JKL', '34.00'); > ================================================== > > > 2) Server code: > ~~~~~~~~~~~ > it is supposed to connect to the above database and > return the "stock_price" of the tuple in which "stock_symbol" > is equal to the value of the getStockQuote() function > parameter: "$symbol". This value comes from the client > side... > ================================================== > soap_tutorial_server.php > ================================================== > <?php >  function getStockQuote($symbol) >  { >  $retval = 0; > >    //---------------------------------------------------------------- >    $retval = mysql_connect("localhost", "user", "password"); >    if(!$retval) >    { >      echo "<br />"; >      echo "Database connection error"; >      echo "<br />"; >      return $retval; >    } >    //---------------------------------------------------------------- >    $retval = mysql_select_db("soap_tutorial"); >    if(!$retval) >    { >      echo "<br />"; >      echo "Database not found"; >      echo "<br />"; >      return $retval; >    } >    //---------------------------------------------------------------- >    $query = "SELECT stock_price FROM stockprices " >           . "WHERE stock_symbol = '" . $symbol . "'"; > >    $result = mysql_query($query); >    if(!$result) >    { >      echo "<br />"; >      echo "Query error"; >      echo "<br />"; >      return $result; >    } >    //---------------------------------------------------------------- >    $row = mysql_fetch_assoc($result); > >    echo "<br />"; >    echo "stock_price = " . $row["stock_price"]; >    echo "<br />"; > >    return $stock_price; >  } > >  //======================================= >  // Turn this function into a web service >  //======================================= >  //--------------------------------------------------------------- >  // Include the NuSOAP library >  //--------------------------------------------------------------- >  require("nusoap-0.7.3/lib/nusoap.php"); > >  //--------------------------------------------------------------- >  // Instantiate an instance of the soap_server class >  //--------------------------------------------------------------- >  $server = new soap_server(); > >  //--------------------------------------------------------------- >  // Tell NuSOAP information for the WSDL document it is going to >  // create for us. Specifically we specify the name of the server >  // and the namespace, in that order. >  //--------------------------------------------------------------- >  $server->configureWSDL("stockserver", "urn:stockquote"); > >  //--------------------------------------------------------------- >  // Register the function we created with the SOAP server. >  // We pass several different parameters to the register method. >  // >  // The first is the name of the function we are registering. >  // >  // The next parameter specifies the input parameters to the >  // function we are registering. Notice that it is an array. >  // The keys of the array represent the names of the input >  // parameters, while the value specifies the type of the >  // input parameter. One thing that pure PHP programmers might >  // find odd is that I had to specify what types my input and >  // return parameters are with the designations of xsd:string >  // and xsd:decimal. It is required that you describe your data >  // properly. You are not dealing with a loosely typed language >  // here. >  // >  // The third parameter to the register method specifies the >  // return type of the registered function. As shown below, it >  // is fashioned in the same way as the last parameter, as an >  // array. >  // >  // The next two parameters specify the namespace we are >  // operating in, and the SOAPAction. >  //--------------------------------------------------------------- >  $server->register("getStockQuote", >                    array("symbol" => "xsd:string"), >                    array("return" => "xsd:decimal"), >                    "urn:stockquote", >                    "urn:stockquote#getStockQuote"); > >  //--------------------------------------------------------------- >  // Now, we finally finish it off with two more lines of code. >  // The first simply checks if $HTTP_RAW_POST_DATA is initialized. >  // If it is not, it initializes it with an empty string. >  // >  // The next line actually calls the service. The web request is >  // passed to the service from the $HTTP_RAW_POST_DATA variable >  // and all the magic behind the scenes takes place. >  //--------------------------------------------------------------- >  $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) >                        ? $HTTP_RAW_POST_DATA : ""; > >  $server->service($HTTP_RAW_POST_DATA); > ?> > ================================================== > > => :confused: I understand > why the code inside the function is executed > because there is a function call in the client but I do not > understand when the rest of the code (outside the function) > is executed... > => :confused: Will I see server errors > (for example if the database connection fails)? > > 3) Client side code > ~~~~~~~~~~~~~~~~~ > > ================================================== > soap_tutorial_client.php > ================================================== > <?php >  //--------------------------------------------------------------- >  // Include the NuSOAP library >  //--------------------------------------------------------------- >  require("nusoap-0.7.3/lib/nusoap.php"); > >  //--------------------------------------------------------------- >  // Instantiate the soapclient class. >  // We pass in the URL of the SOAP Server we are dealing with. >  //--------------------------------------------------------------- >  $c = new soapClient("soap_tutorial_server.wsdl"); > >  //--------------------------------------------------------------- >  // Last make a call to the Web Service. >  // The one caveat is that the parameters to the Web Service must >  // be encapsulated in an array in which the keys are the names >  // defined for the service. You will see that I have an array >  // key named 'symbol' because that is the name of the input >  // parameter of my function. If you remember how we specified >  // the input parameters when we registered the function with the >  // server, you will see that this is very similar. >  //--------------------------------------------------------------- >  $stockprice = $c->call("getStockQuote", array("symbol" => > "ABC")); > >  //--------------------------------------------------------------- >  // Output the result >  //--------------------------------------------------------------- >  echo "<br />"; >  echo "The stock price for \"ABC\" is " . $stockprice . "."; >  echo "<br />"; > >  //--------------------------------------------------------------- >  // Kill object >  //--------------------------------------------------------------- >  unset($c); > ?> > ================================================== > > 4) I put those two files ("soap_tutorial_server.php" and > "soap_tutorial_client.php") in my "htdocs" directory. > > 5) When I open "soap_tutorial_server.php" in my browser, I get a page which > contents are: > > =================================================== > stockserver > > View the WSDL for the service. Click on an operation name to view > it's details. > >    * getStockQuote > =================================================== > > I can click on the word "WSDL" and I get the following URI : > http://localhost/soap_tutorial_server.php?wsdl > In the browser appears an XML file. > > => :confused: Should I do something with it? > (Save it somewhere?) > => :confused: Can you explain me the syntax "soap_tutorial_server.php?wsdl"? > > 6) When I open "soap_tutorial_client.php", I get the following content: > ==================================================== > The stock price for "ABC" is . > ==================================================== > > As you can see, the "stock_price" is missing. > > I have tried to find a simple tutorial about SOAP but I haven't had > the chance to find something simple... > > I know there is a lot to read above... but I would be very grateful if > you could give me a little help :-) ! > > Thanks and best regards :-), > -- > Lmhelp > -- > View this message in context: > http://old.nabble.com/PHP-SOAP---Extreme-newbie-questions-%3A--tp28095423p28095423.html«: > yå7¦r ñ€¸ì > Sent from the Php - Soap mailing list archive at Nabble.com. > > > -- > PHP Soap Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > What you are missing is the response from the server. Can you show the wsdl file please? I don't know nusoap as it is PHP4 only I believe. But at a guess, can you try this URL ... http://localhost/soap_tutorial_server.php#getStockQuote?symbol=ABC The WSDL file describes the web service. With that file, any SOAP client (in any language/os/etc.) can talk to the server. I use Zend Framework's Soap service to read my PHP classes and construct the WSDL file. I then use a tool to read a WSDL file and create client PHP code. That way I can test the WSDL file is accurate. -- ----- Richard Quadling "Standing on the shoulders of some very clever giants!" EE : http://www.experts-exchange.com/M_248814.html EE4Free : http://www.experts-exchange.com/becomeAnExpert.jsp Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731 ZOPA : http://uk.zopa.com/member/RQuadling

« previous php.soap (#3064) next »