breakworm
breakworm

Reputation: 71

PHP SOAP client not creating body

After over a half a day of trying and reading tutorials on creating a simple SOAP client, I am no closer to retrieving a request from API I attempting to work with.

WSDL: http://publicapi.ekmpowershop31.com/v1.1/publicapi.asmx?WSDL

I can make the request from SOAP UI with the following simple SOAP request:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pub="http://publicapi.ekmpowershop.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <pub:GetOrders>
         <!--Optional:-->
         <pub:GetOrdersRequest>
                <!--Optional:-->
            <pub:APIKey>myApiKey</pub:APIKey>
         </pub:GetOrdersRequest>
      </pub:GetOrders>
   </soapenv:Body>
</soapenv:Envelope>

This above returns the expected data.

When it comes to translating the request into a PHP I have the following:

$wsdl = 'http://publicapi.ekmpowershop31.com/v1.1/publicapi.asmx?WSDL';
$trace = true;
$exceptions = false;
$debug = true;

$client = new SoapClient($wsdl,
      array(
        'trace' => $trace,
        'exceptions' => $exceptions,
        'debug' => $debug,
      ));


$param = array('GetOrdersRequest' => array(
               'APIKey' => 'myApiKey'
            )
          );

$resp = $client->GetOrders();

print_r($param);
print_r($client->__getLastRequest());
print_r($client->__getLastResponse());

If put the $param into the GetOrders function then, it breaks and nothing happens.

Even if I use an array in the $client->GetOrders(array('someArry' => $param)) then response and request still always looks the same and looks like the body of the SOAP request is never created:

Request:

?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://publicapi.ekmpowershop.com/"><SOAP-ENV:Body><ns1:GetOrders/></SOAP-ENV:Body></SOAP-ENV:Envelope>

Response:

<?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><GetOrdersResponse xmlns="http://publicapi.ekmpowershop.com/"><GetOrdersResult><Status>Failure</Status><Errors><string>Object reference not set to an instance of an object.</string></Errors><Date>2017-04-03T16:00:42.9457446+01:00</Date><TotalOrders>0</TotalOrders><TotalCost xsi:nil="true" /></GetOrdersResult></GetOrdersResponse></soap:Body></soap:Envelope>

If anyone can shed some light on what I am doing wrong here that would be real big help?

P.S My experience of SOAP in PHP is limited as I am used to SOAP in a java env. Thanks

Upvotes: 2

Views: 2060

Answers (1)

complex-space
complex-space

Reputation: 744

You need to pass the parameters into the $client->GetOrders() call. Also the WSDL defines some required parameters, so a minimal example is something like:

$wsdl = 'http://publicapi.ekmpowershop31.com/v1.1/publicapi.asmx?WSDL';
$trace = true;
$exceptions = false;
$debug = true;

$client = new SoapClient($wsdl,
      array(
        'trace' => $trace,
        'exceptions' => $exceptions,
        'debug' => $debug,
      ));


$param = array(
    'GetOrdersRequest' => array(
        'APIKey' => 'dummy-key',
        'CustomerID' => 1,
        'ItemsPerPage' => 1,
        'PageNumber' => 1,
    )
);

$resp = $client->GetOrders($param);


print_r($param);
print_r($client->__getLastRequest());
print_r($client->__getLastResponse());

This gives the error response:

<Errors><string>Invalid character in a Base-64 string.</string></Errors>

which presumably is because my API key is invalid.

Upvotes: 1

Related Questions