Creating webservice server and client using NuSOAP

Brief description of NuSOAP:

NuSOAP is a rewrite of SOAPx4, provided by NuSphere and Dietrich Ayala. It is a set of PHP classes – no PHP extensions required – that allow developers to create and consume web services based on SOAP 1.1, WSDL 1.1 and HTTP 1.0/1.1.

Why using NuSOAP? PHP5 already has soapServer and soapClient implementation

  • it’s easy to implement and fast, no need to create WSDL document by yourself (this is my main reason why I choose NuSOAP)
  • compatibility, no special PHP extension need (I didn’t test it if still works on PHP4, but it does work flawlessly on PHP 5.0)

First, download NuSOAP from here: http://sourceforge.net/projects/nusoap/

The Server

We will create a SOAP server with two entry points (=function). One function take one parameter and output a string while the other one take two parameters and output a complex result (an array/struct). The codes with commentary:

require_once('lib/nusoap.php'); 

$server = new nusoap_server;

$server->configureWSDL('server', 'urn:server');

$server->wsdl->schemaTargetNamespace = 'urn:server';

//SOAP complex type return type (an array/struct)
$server->wsdl->addComplexType(
    'Person',
    'complexType',
    'struct',
    'all',
    '',
    array(
        'id_user' => array('name' => 'id_user', 'type' => 'xsd:int'),
        'fullname' => array('name' => 'fullname', 'type' => 'xsd:string'),
        'email' => array('name' => 'email', 'type' => 'xsd:string'),
        'level' => array('name' => 'level', 'type' => 'xsd:int')
    )
);

//first simple function
$server->register('hello',
			array('username' => 'xsd:string'),  //parameter
			array('return' => 'xsd:string'),  //output
			'urn:server',   //namespace
			'urn:server#helloServer',  //soapaction
			'rpc', // style
			'encoded', // use
			'Just say hello');  //description

//this is the second webservice entry point/function 
$server->register('login',
			array('username' => 'xsd:string', 'password'=>'xsd:string'),  //parameters
			array('return' => 'tns:Person'),  //output
			'urn:server',   //namespace
			'urn:server#loginServer',  //soapaction
			'rpc', // style
			'encoded', // use
			'Check user login');  //description

//first function implementation
function hello($username) {
        return 'Howdy, '.$username.'!';
}

//second function implementation 
function login($username, $password) {
        //should do some database query here
        // .... ..... ..... .....
        //just some dummy result
        return array(
		'id_user'=>1,
		'fullname'=>'John Reese',
		'email'=>john@reese.com,
		'level'=>99
	);
}

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';

$server->service($HTTP_RAW_POST_DATA);

Suppose that you save the codes in ws.php, you can see your neat webservice description by accessing the URL:
http://your_server_address/ws.php
Try click on one of your webservice entry point! NuSOAP will show you a description about it, see screenshot:

webservice entry point description using NuSOAP

example of entry point description generated by NuSOAP

for WSDL XML document, you can see it at:
http://your_server_address/ws.php?wsdl

The client

The code is quite simple, all the code need is your webservice WSDL URL.

require_once('lib/nusoap.php');

//This is your webservice server WSDL URL address
$wsdl = "http://localhost/nusoap_test/ws.php?wsdl";

//create client object
$client = new nusoap_client($wsdl, 'wsdl');

$err = $client->getError();
if ($err) {
	// Display the error
	echo '

Constructor error

' . $err; // At this point, you know the call that follows will fail exit(); } //calling our first simple entry point $result1=$client->call('hello', array('username'=>'achmad')); print_r($result1); //call second function which return complex type $result2 = $client->call('login', array('username'=>'john', 'password'=>'doe') ); //$result2 would be an array/struct print_r($result2);

That’s it! Creating webservice server and client using NuSOAP is fast and simple. 🙂

Leave a comment ?

11 Comments.

  1. thanks

  2. I am beggineer.i want to develop a webservice for wall share.
    plz send me code.
    Regards,
    Bijayini

  3. Kapil Gulati

    Great Job! I like this very much!! Thank you very much

  4. Hello,

    I want to upload images using nusoap. have you any suggestion regrading it?

    Thanks & regards
    Ramesh

  5. Nusoap Authentifizierungs Problem - php.de - pingback on 2014/03/08 at 23:29
  6. Nice Job!

    Do you know how to use setCredentials for username and password? On my local machine I can use $client->setCredentials(“Benutzer”,”Passwort”, “basic”); But not online on my webspace.

    Do you know the reason?

    Thanks
    Abdulkerim

  7. For paying through the e-shop of my organization, the bank wants the ticketing(handshake) to be performed using nusoap xml file. I don’t understand if I have to have a server running in my domain or I just run a php client file where I have to declare a client and make a call to the server of the bank’s server. Thank you.

  8. thanx helped me a lot but would have been better if some explanation was there 🙂

  9. in localhost this work, but when i put in a external server, and i try do access to server from my localhost, i don’t have any result.

  10. Merci beaucoup pour l exemple, simple complet et sans erreur

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Trackbacks and Pingbacks: