PHP Tutorials - Herong's Tutorial Examples - Version 4.20, by Dr. Herong Yang
HelloServerWsdl.php - SOAP 1.2 Server Application in WSDL Mode
This section provides a tutorial example on how to write a simple SOAP 1.2 server application in WSDL mode. The HelloServer.php example defines a hello() function, adds it to the SOAP server, waits for the client program to call.
Now let's move forward one step further: creating a SOAP 1.2 server application in WSDL mode. Here is the same hello server modified to work in WSDL mode, HelloServerWdsl.php:
<?php # HelloServerWsdl.php #- Copyright (c) 2007-2019, HerongYang.com, All Rights Reserved. # function hello($someone) { return "Hello " . $someone . "! - With WSDL"; } ini_set("soap.wsdl_cache_enabled", "0"); $server = new SoapServer("http://localhost/Hello.wsdl", array('soap_version' => SOAP_1_2)); $server->addFunction("hello"); $server->handle(); ?>
Nothing special in the program. The server object is now created with the location of the WSDL document.
Here is the WSDL document, Hello.wsdl
<?xml version="1.0"?> <definitions name="MyDefinition" targetNamespace="urn:myTargetNamespace" xmlns:tns="urn:myTns" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <message name="myRequest"> <part name="reqParam" type="xsd:string"/> </message> <message name="myResponse"> <part name="resParam" type="xsd:string"/> </message> <portType name="MyPortType"> <operation name="hello"> <input message="tns:myRequest"/> <output message="tns:myResponse"/> </operation> </portType> <binding name="MyBinding" type="tns:MyPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="hello"> <soap:operation soapAction=""/> <input> <soap:body use="encoded" namespace="urn:myInputNamespace" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body use="encoded" namespace="urn:myOutputNamespace" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> <service name="MyService"> <documentation>Returns a greeting string. </documentation> <port name="MyPort" binding="tns:MyBinding"> <soap:address location="http://localhost/HelloServerWsdl.php"/> </port> </service> </definitions>
The WSDL document looks complicated. But it actually very simple to understand, as long as you remember the following points:
To install HelloServerWsdl.php to my Apache server, copy these two files to the Apache document directory:
C:\herong> copy HelloServerWsdl.php \apache\htdocs C:\herong> copy Hello.wsdl \apache\htdocs
Of course, we need to modify out hello client program as, HelloClientWsdl.php:
<?php # HelloClientWsdl.php #- Copyright (c) 2007-2019, HerongYang.com, All Rights Reserved. # $client = new SoapClient("http://localhost/Hello.wsdl", array('soap_version' => SOAP_1_2,'trace' => 1 )); echo("\nDumping client object functions:\n"); var_dump($client->__getFunctions()); $return = $client->__soapCall("hello",array("world")); echo("\nReturning value of __soapCall() call: ".$return); # $return = $client->hello("world"); # echo("\nReturning value: ".$return); echo("\nDumping request headers:\n" .$client->__getLastRequestHeaders()); echo("\nDumping request:\n".$client->__getLastRequest()); echo("\nDumping response headers:\n" .$client->__getLastResponseHeaders()); echo("\nDumping response:\n".$client->__getLastResponse()); ?>
When you are ready to test, run HelloClientWsdl.php. You will get:
Dumping client object functions: array(1) { [0]=> string(30) "string hello(string $reqParam)" } Returning value of __soapCall() call: Hello world! - With WSDL Dumping request headers: POST /HelloServerWsdl.php HTTP/1.1 Host: localhost Connection: Keep-Alive Content-Type: application/soap+xml; charset=utf-8; action="" Content-Length: 457 Dumping request: <?xml version="1.0" encoding="UTF-8"?> <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="urn:myInputNamespace" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"> <env:Body> <ns1:hello env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <reqParam xsi:type="xsd:string">world</reqParam> </ns1:hello> </env:Body> </env:Envelope> Dumping response headers: HTTP/1.1 200 OK Server: Microsoft-IIS/5.1 Connection: close Content-Type: application/soap+xml; charset=utf-8 Content-Length: 573 Dumping response: <?xml version="1.0" encoding="UTF-8"?> <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="urn:myOutputNamespace" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"> <env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"> <ns1:helloResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <rpc:result>resParam</rpc:result> <resParam xsi:type="xsd:string">Hello world! - With WSDL</resParam> </ns1:helloResponse> </env:Body> </env:Envelope>
Anything interesting here? Yes. Some names defined in the WSDL document did show up in the SOAP request message and response message, like: "urn:myInputNamespace", "reqParam", "urn:myOutputNamespace", etc.
Last update: 2019.
Table of Contents
Introduction and Installation of PHP 7.3
PHP Data Types and Data Literals
Variables, References, and Constants
Expressions, Operations and Type Conversions
Conditional Statements - "if" and "switch"
Loop Statements - "while", "for", and "do ... while"
Function Declaration, Arguments, and Return Values
Introduction of Class and Object
Integrating PHP with Apache Web Server
Retrieving Information from HTTP Requests
Creating and Managing Sessions in PHP Scripts
Sending and Receiving Cookies in PHP Scripts
Controlling HTTP Response Header Lines in PHP Scripts
MySQL Server Connection and Access Functions
Functions to Manage Directories, Files and Images
SOAP Extension Function and Calling Web Services
►SOAP Server Functions and Examples
SoapServer - SOAP Server Class and Functions
HelloServer.php - First SOAP Server Application
HelloServer12.php - First SOAP 1.2 Server Application
►HelloServerWsdl.php - SOAP 1.2 Server Application in WSDL Mode
Localization Overview of Web Applications
Using Non-ASCII Characters in HTML Documents
Using Non-ASCII Characters as PHP Script String Literals
Receiving Non-ASCII Characters from Input Forms
"mbstring" Extension and Non-ASCII Encoding Management
Managing Non-ASCII Character Strings with MySQL Servers