如何从PHP中获取SOAP Call的JSON响应

时间:2012-11-06 05:36:27

标签: php soap-client

由于SOAP客户端默认返回XML响应,我需要获得JSON响应而不是XML。

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

在这种情况下,需要在SOAPClientSOAPHeader中设置哪个属性才能返回JSON响应?

3 个答案:

答案 0 :(得分:3)

从我从一些研究中发现的内容来看,SoapClient没有任何内置的方法可以直接将数据作为JSON返回(其他人都知道如果我错了,它会节省很多事后处理!)因此您可能需要获取XML返回的数据并手动解析。

我记得SimpleXMLElement提供了一些有用的功能,当然,有人在php.net上有一些代码段就可以做到这一点: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);
}
?>

答案 1 :(得分:2)

SOAP仅支持XML消息格式。

如果您尝试连接的SOAP服务器是您无法直接访问的第三方服务器,则必须在收到后将XML响应转换为JSON,如此示例here

如果您希望您的Web服务服务器支持不同的数据类型,例如json,您需要查看RESTful web services.

答案 2 :(得分:1)

如果您的结果是PHP数组格式,例如:

  

object(stdClass)#2(6){[&#34; category_id&#34;] =&gt; int(1)[&#34; parent_id&#34;] =&gt;   int(0)[&#34; name&#34;] =&gt; string(12)&#34; Root Catalog&#34; [&#34;位置&#34;] =&GT; INT(0)..........

然后您可以使用

将其解析为JSON
//result is the variable with php array value
$JSON = json_encode($result);

print_r($JSON);

详细了解, 观看 - https://www.youtube.com/watch?v=isuXO5Cv6Lg