Using a local WSDL file with PHP SoapClient.

This is a short guide on how to use a local WSDL file with the PHP SoapClient object. In this guide, I will also show you how to configure SoapClient to send your requests to an external service.

I will admit that I am not the most knowledgeable when it comes to SoapClient and web services, which is why this particular issue caught me out one day. It seems as though I came into the development world just as REST APIs were beginning to replace web services.

Save the WSDL file to a local path.

Firstly, you will need to download the WSDL file to a local path. Note that you will probably need a flattened WSDL as PHP’s SoapClient can have issues loading external entities.

For the sake of this tutorial, I will assume that you saved the WSDL file in the same directory as your Soap Client and that you called it Service.xml.

Configuring SoapClient.

Here’s the code:

<?php

//The FULL path to the location of your WSDL file.
$fullPathToWsdl = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'Service.xml';

//The URL of the web service.
$url = 'http://test.service.com/';

//Instantiate the SoapClient object.
$client = new SoapClient(
    $fullPathToWsdl, 
    array(
        'location' => $url,
        'trace' => 1
    )
);

In the code above, we:

  1. Passed the full path of the WSDL file in as the first parameter to SoapClient.
  2. We set the location option in the second parameter as the web service URL.

Hopefully, this guide saved you some time and hardship!