我正在使用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><RESULT><complaintNo>09865678</complaintNo></RESULT></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(),但无法正常工作。
答案 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文件中定义。