Re: PHP SOAP - Extreme newbie questions :/

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




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...  [chopped for brevity]

Hello Lmhelp,

  Your question was probably best asked on the NuSOAP mailing list (CC'd):
nusoap-general@lists.sourceforge.net

  You can find a working NuSOAP/WSDL client/server example at:
http://www.steelesoftconsulting.com/code/stockquote.zip

  This includes a modified nusoap.php with the following changes:
* renamed soapclient to nusoap_client to prevent PHP SOAP extension conflict
* added (object) cast to get_class() calls in serialize_return() [PHP 5.3 change]

I'm including the code for stock_server.php (with dummy data) and stock_client.php - hopefully the sparse comments will be enough to help you understand. Make sure you don't get any whitespace characters outside the <?php and ?> tags.

  This might get a bit munged by some email clients, get the source zip if so.

Hope this helps,
  John
====

<?php /* stock_server.php */

/**
 * NuSOAP Server Example - getStockQuote and hello
 * Demonstrate how to use NuSOAP to create SOAP web services using WSDL.
* Call this directly from your browser to view the operations & WSDL documentation.
 *
 * @author John Steele <john@steelesoftconsulting.com>
 * @website http://www.steelesoftconsulting.com/
 */

// ini_set('soap.wsdl_cache_enabled', '0');  // disable WSDL cache

  // Pull in the NuSOAP code
require_once 'nusoap.php';
  // Create the server instance
$server = new soap_server();
  // Initialize WSDL support (servicename, namespace)
$server->configureWSDL('stockquote', 'urn:stockquote');

  // Register the method to expose (last 3 optional)
$server->register('getStockQuote',    // method name
  array('symbol' => 'xsd:string'),  // input parameters
  array('return' => 'xsd:decimal'),  // output parameters
  'urn:stockquote',          // namespace
  'urn:stockquote#getStockQuote',    // soapaction
  'rpc',                // style
  'encoded',              // use
  'Return Stock Quote by Symbol'    // documentation
  );

  // Register the method to expose
$server->register('hello',        // method name
    array('name' => 'xsd:string'),    // input parameters
    array('return' => 'xsd:string'),  // output parameters
    'urn:stockquote',          // namespace
    'urn:stockquote#hello',        // soapaction
    'rpc',                // style
    'encoded',              // use
    'Says Hello to the Caller'      // documentation
);

  // Use the request to (try to) invoke the service
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);

/**
 * Returns the Stock Price, or -99.99 if not found
 *
 * @param string $symbol
 * @return float
 */
function getStockQuote($symbol) {
  $stock_price = -99.99;    // flag for not found
    // use some dummy data instead of database for testing
  $row = array('ABC' => 75.00, 'DEF' => 45.00, 'GHI' => 12.00);
  if(isset($row[$symbol])) {
    $stock_price = $row[$symbol];
  }
  return (float) $stock_price;
/*
  // You would *never* really echo anything that isn't XML SOAP
    if(!$retval = mysql_connect('localhost', 'user', 'password')) {
      echo '<p>Database connection error.</p>';
      return -1;
    }
  if(!$retval = mysql_select_db('soap_tutorial')) {
      echo '<p>Unable to select database.</p>';
      return -2;
    }
    $query = "SELECT stock_price FROM stockprices ".
       "WHERE stock_symbol = '" . $symbol . "'";
    if(!$result = mysql_query($query)) {
      echo '<p>Query error in '. $query. '</p>';
      return -3;
    }
    if($row = mysql_fetch_assoc($result)) {
    $stock_price = $row['stock_price'];
  }
  return (float) $stock_price;
*/
}

/**
 * Says Hello to the Caller
 *
 * @param string $name
 * @return string
 */
function hello($name) {
    return 'Hello, '. $name. '.';
}
?>

<?php /* stock_client.php */

/**
 * NuSOAP Client Example - getStockQuote and hello
 * Demonstrate how to use NuSOAP to consume SOAP web services using WSDL.
 *
 * @author John Steele <john@steelesoftconsulting.com>
 * @website http://www.steelesoftconsulting.com/
 */
  // This certainly will need to be changed to fit your server environment
define('SERVER_URL', 'http://localhost/ws/stockquote/stock_server.php');
  // Set to true for testing/debugging (a LOT of info), false for production
define('TESTING', false);

$symbol = 'ABC';            // Set fictional default, or from URL GET
if(isset($_GET['symbol']) && !empty($_GET['symbol']))  // ?symbol=XYZ
  $symbol = $_GET['symbol'];

require_once 'nusoap.php';        // Pull in the NuSOAP code
if(!TESTING)              // turn off debugging for speed/production
  nusoap_base::setGlobalDebugLevel(0);

  // Create the client instance
$client = new nusoap_client(SERVER_URL. '?wsdl', true);
if($err = $client->getError()) {    // Check for an error
  echo '<h2>Constructor error</h2><pre>'. $err. '</pre>';
}
if(TESTING)
  dump($client->debug_str);

  // This block isn't stock quote related, but a simple example
$params = array('name' => 'Bob');      // Say hello to Bob
$result = $client->call('hello', $params);  // No Error Checking at all!
dump($result);

$params = array('symbol' => $symbol);  // Return Stock Quote by Symbol
  // Call the SOAP method
$result = $client->call('getStockQuote', $params);
if ($client->fault) {          // Check for a fault
    echo '<h2>Client Fault</h2>'. dump($result);
}
else {
  if ($err = $client->getError()) {  // Check for an error
        echo '<h2>Call Error</h2>'. dump($err);
    }
    else {                // Display the result
        // echo '<h2>Result</h2>'. dump($result);
      $result = sprintf('%4.2f', $result);  // format to 2 decimal places
      if($result != -99.99)
      echo '<p>The stock price for "'. $params['symbol'].
         '" is <strong>'. $result. '</strong></p>';
    else
      echo '<p>Stock symbol "'. $params['symbol']. '" not found.';
    }
}

if(TESTING) {
    // Display the request and response
echo '<h2>Request</h2><pre>'. htmlspecialchars($client->request, ENT_QUOTES). '</pre>'; echo '<h2>Response</h2><pre>'. htmlspecialchars($client->response, ENT_QUOTES). '</pre>';
    // Display the debug messages
echo '<h2>Debug</h2><pre>'. htmlspecialchars($client->debug_str, ENT_QUOTES). '</pre>';
    // Display the client object - very handy for server PHP warnings, etc.
  echo '<h2>Client</h2>';
  dump($client);
}

unset($client);              // Kill the instance to free up memory

  // some handy functions
function dump($this) {
echo '<pre style="font:normal 14px Courier New,Courier,Times New Roman,serif">'.
     print_r($this, 1). '</pre>';
  }
function get_xml($xml) {
  return str_replace('><', ">\n<", $xml);
  }
?>


--
/* Steelesoft Consulting     John Steele - Systems Analyst/Programmer
 *  We also walk dogs...  Dynamic Web Design, PHP/MySQL/Linux/Hosting
 *  http://www.steelesoftconsulting.com/  (541) 708-1708
 */


--
PHP Soap Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [PHP Users]     [Kernel Newbies]     [PHP Database]     [Yosemite]

  Powered by Linux