Search code examples
phpsoap-client

How to get JSON response from SOAP Call in PHP


As SOAP client returns XML response by default, I need to get JSON response in return instead of XML.

$client = new SoapClient(null, array('location' => "http://localhost/soap.php",
                                     'uri'      => "http://test-uri/"));

In that case what attribute needs to be set in SOAPClient or SOAPHeader so that it returns JSON response?


Solution

  • From what I have been able to find out from some research, the SoapClient does not have any built in way to return the data directly as JSON (anyone else know if I'm wrong, it would save a heck of a lot of processing after the fact!) so you will probably need to take the XML returned data and parse it out manually.

    I recalled that SimpleXMLElement offers some useful features, and sure enough, someone had some code snippets on php.net to do exactly that: http://php.net/manual/en/class.simplexmlelement.php

    <?php
    function XML2JSON($xml) {
        function normalizeSimpleXML($obj, &$result) {
            $data = $obj;
            if (is_object($data)) {
                $data = get_object_vars($data);
            }
            if (is_array($data)) {
                foreach ($data as $key => $value) {
                    $res = null;
                    normalizeSimpleXML($value, $res);
                    if (($key == '@attributes') && ($key)) {
                        $result = $res;
                    } else {
                        $result[$key] = $res;
                    }
                }
            } else {
                $result = $data;
            }
        }
        normalizeSimpleXML(simplexml_load_string($xml), $result);
        return json_encode($result);
    }
    ?>