XML格式的PHP SOAP服务器响应

时间:2018-12-03 12:28:47

标签: php soap soapserver

我正在使用PHP创建SOAP Web服务。

这是我的代码。

SoapServer.php

    class server{

        public function RegisterComplaint($strInputXml){
            $str = "<RESULT><complaintNo>09865678</complaintNo></RESULT>";
            $arr['RegisterComplaintResult'] = trim($str);
            return $arr;
        }

    }

    $custom_wsdl = 'custom.wsdl';
    $server = new SoapServer($custom_wsdl);


    $server->setClass('server');
    $server->handle();

当我使用Wizdler(chrome扩展名)致电 RegisterComplaint 时,我得到以下结果:

    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.Insurer.com/webservices/">
        <SOAP-ENV:Body>
            <ns1:RegisterComplaintResponse>
                <ns1:RegisterComplaintResult>&lt;RESULT&gt;&lt;complaintNo&gt;09865678&lt;/complaintNo&gt;&lt;/RESULT&gt;</ns1:RegisterComplaintResult>
            </ns1:RegisterComplaintResponse>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

在这里,我希望得到以下格式的结果(HTML实体的特殊字符):

    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.Insurer.com/webservices/">
        <SOAP-ENV:Body>
            <ns1:RegisterComplaintResponse>
                <ns1:RegisterComplaintResult><RESULT><complaintNo>09865678</complaintNo></RESULT></ns1:RegisterComplaintResult>
            </ns1:RegisterComplaintResponse>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

有人知道我必须为所需的输出更改什么吗?

我在$ str变量上尝试了html_entity_decode()和htmlspecialchars(),但无法正常工作。

1 个答案:

答案 0 :(得分:2)

解决方案作为回应。 (已在评论中引用)

SoapServer类等待一个对象作为返回值。服务器将使用所使用的wsdl文件中的定义对该对象进行自动编码。如果返回字符串,则其实体将始终被编码。

class Server
{
    public function registerComplaint()
    {
        $registerComplaintResponse = new stdClass();
        $registerComplaintResult = new stdClass();
        $result = new \stdClass();

        $result->complaintNo = '09865678';
        $registerComplaintResult->RESULT = $result;
        $registerComplaintResponse->RegisterComplaintResult = $registerComplaintResult;

        return $registerComplaintResponse;
    }
}

所有返回类型(复杂类型)的定义都在wsdl文件中定义。