Here at LeaseWeb, we work a lot with SOAP web-services to integrate our internal applications with each other. Especially during development and testing of our applications as we need the ability to practice with SOAP API’s.
If you are into fancy GUI applications then maybe SoapUI is something you could use to familiarise yourself with the API you are integrating with.
If you like simplicity and the command line, or dislike heavy GUI applications you can give php soap client
a try.
php soap client
is a command line application written in PHP and packed using the popular .phar format. Once installed you can start exploring soap web-services.
There are two ways of installing the client. To get the latest stable version download soap_client.phar
from here or do:
$ curl -sS http://leaseweb.github.io/php-soap-client/installer | php
This will download the phar
file to the current working directory and make it executable so you can use start using it right away by invoking:
$ ./soap_client
To install the latest master
version you can get the source code directly from GitHub, package your own .phar
file and install it — using GNU Make.
In order to be able to create the .phar
file you need to have composer installed. To read more about composer refer to their excellent documentation here.
# Install php soap client $ git clone https://github.com/LeaseWeb/php-soap-client.git $ cd php-soap-client $ composer.phar install $ make $ sudo make install
If you are getting a Failed to compile phar
exception while running make
you need to set phar.readonly = Off
in your php.ini
. On a development machine this is fine to do but please be ware of the security risks when setting phar.readonly
to Off
.
The above make install
command will install the soap_client
application to /usr/local/bin
and make it executable so you can easily call it like this:
$ soap_client php-soap-client version 2.1.3 Usage: [options] command [arguments] Options: ... Available commands: call Call the remote service with the `method` specified and output the reponse to stdout. help Displays help for a command list Lists commands list-methods Get a list of available methods to call on the remote. request Generate an xml formatted SOAP request for the given method and output to stdout. wsdl Get the WSDL of a soap service.
From this point onwards we assume you have installed the soap_client.phar
on your system in /usr/local/bin/soap_client
and that the directory /urs/local/bin
is in your $PATH
.
Lets say we would like to see what methods are available on the remote service http://www.webservicex.net/ConvertTemperature.asmx
. We could issue the following command:
$ soap_client --endpoint='http://www.webservicex.net/ConvertTemperature.asmx?WSDL' list-methods
Which will output the following:
ConvertTemp
If you run the above command with the -vvv
option you will get more verbose output.
In this case the only available method is ConvertTemp
. Let’s see how a SOAP XML request looks like for this method:
$ soap_client --endpoint='http://www.webservicex.net/ConvertTemperature.asmx?WSDL' request ConvertTemp <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.webserviceX.NET/"> <SOAP-ENV:Body> <ns1:ConvertTemp> <ns1:Temperature>0</ns1:Temperature> <ns1:FromUnit></ns1:FromUnit> <ns1:ToUnit></ns1:ToUnit> </ns1:ConvertTemp> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
If you want to make a SOAP request to the ConvertTemp
method on the remote service use the call
sub command:
$ soap_client --endpoint='http://www.webservicex.net/ConvertTemperature.asmx?WSDL' call --editor ConvertTemp
Notice the --editor
option after the call
sub command. If you use the --editor
flag soap_client
will open up the editor specified in your environment variable $EDITOR
so you are able to modify the request XML before sending it.
If you issue the same request multiple times, you could save a soap request as a local XML file and pass it to /dev/stdin
of the soap_client call
command:
# Get the request xml and store it locally $ soap_client --endpoint='http://www.webservicex.net/ConvertTemperature.asmx?WSDL' request ConvertTemp > my_sample_request.xml # Now edit my_sample_request.xml # Now you can call the ConvertTemp method with this pre-prepared request $ soap_client --endpoint='http://www.webservicex.net/ConvertTemperature.asmx?WSDL' call ConvertTemp < my_sample_request.xml
Since you will be repeating soap_client
commands frequently in a short time while exploring a remote web service you can save yourself some time by setting an environment variable SOAPCLIENT_ENDPOINT
that contains the URL to the WSDL. When this environment variable is set you can omit the --endpoint
command line option. Let’s do this now and call the ConvertTemp
method:
$ export SOAPCLIENT_ENDPOINT='http://www.webservicex.net/ConvertTemperature.asmx?WSDL' $ soap_client call ConvertTemp < my_sample_request.xml
I wanted to know how much 107.6 degrees Fahrenheit is in Celsius, so my my_sample_request.xml
contains:
$ cat my_sample_request.xml <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.webserviceX.NET/"> <SOAP-ENV:Body> <ns1:ConvertTemp> <ns1:Temperature>107.6</ns1:Temperature> <ns1:FromUnit>degreeFahrenheit</ns1:FromUnit> <ns1:ToUnit>degreeCelsius</ns1:ToUnit> </ns1:ConvertTemp> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
And the result:
$ soap_client call ConvertTemp < my_sample_request.xml stdClass Object ( [ConvertTempResult] => 42 )
The answer is 42.
If you rather see the responses in XML format you can use the --xml
command line option:
$ soap_client call --xml ConvertTemp < my_sample_request.xml <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <ConvertTempResponse xmlns="http://www.webserviceX.NET/"> <ConvertTempResult>42</ConvertTempResult> </ConvertTempResponse> </soap:Body> </soap:Envelope>
This tutorial should give you enough information to get started with exploring, testing and/or developing SOAP API’s.
In a future blog post, I will continue the topic of the php soap client
. We are currently working on packing the .phar archive for the web.

So you would be able to drop the soap_client.phar
somewhere in your apache DocumentRoot
and explore SOAP services from your browser.