Here are my expirience in working with NuSoap (SOAP) in PHP.
Creating simple SOAP function is simple,ĂÂ so there is no need to explain.
Problems are coming when you need a complex types, like array, and UTF-8 encoding.
Here is an example of adding complex type to your SOAP server:
$server->wsdl->addComplexType(
'Chapter', //name
'complexType', //typeClass (complexType|simpleType|attribut)
'struct', //phpType: currently supported are array and struct (php assoc array)
'all', //compositor (all|sequence|choice)
'', //restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
array( //elements = array ( name = array(name=>ââŹĹĽ,type=>ââŹĹĽ) )
'title' => array('name'=>'title','type'=>'xsd:string'),
'page' => array('name'=>'page','type'=>'xsd:int')
) );
$server->wsdl->addComplexType(
'ChapterArray',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:Chapter[]')
),
'tns:Chapter' );
$server->wsdl->addComplexType(
'Book',
'complexType',
'struct',
'all',
'',
array(
'author' => array('name'=>'author','type'=>'xsd:string'),
'title' => array('name'=>'title','type'=>'xsd:string'),
'numpages' => array('name'=>'numpages','type'=>'xsd:int'),
'toc' => array('name'=>'toc','type'=>'tns:ChapterArray')
) );
$server->register(
'getBook', // method name
array('title'=>'xsd:string'), // input parameters
array('return'=>'tns:Book'), // output parameters
$NAMESPACE); // namespace
function getBook($title) {
// Create TOC
$toc = array();
$toc[] = array('title' => 'Chapter One', 'page' => 1);
$toc[] = array('title' => 'Chapter Two', 'page' => 30);
// Create book
$book = array(
'author' => "Jack London",
'title' => $title,
'numpages' => 42,
'toc' => $toc);
return $book;
}
Taken from here.
Comments are taken from here.
Client example:
<?php
require_once('nusoap.php');
$namep = "Title";
$param = array('String_1' => $namep);
$endpoint = "http://localhost/server.php";
$mynamespace = "http://localhost/server.php";
$client = new soapclient($endpoint);
$client->decodeUTF8 = true;
$response = $client->call('getBook', $param, $mynamespace);
print_r ($response['author']);
echo '<p/>'.$client->response;
?>
Now, if you want to use utf - 8, you will have to in nusoap.php on line 152, instead of:
var $soap_defencoding = 'ISO-8859-1';
Add or uncomment:
var $soap_defencoding = 'UTF-8';
Also, on server side I added:
$server->decode_utf8ĂÂ =ĂÂ true;ĂÂ
If you are using MySQL and data are encoded in Windows-1252 (like mine) then you will need to put:
mysql_query('set names utf8');
InĂÂ your server side.
I hope that is all.