Php soap服务信封<return>元素</return>

时间:2010-11-18 18:53:20

标签: php soap

我正在尝试为第三方的规范构建一个Web服务,该第三方将作为客户端连接到它,该服务必须用PHP编写,但我总是非常努力的PHP n00b。基本上我的回复被包含在一个元素中,但是客户端不接受我的回复,因为这是一个例子。

service.php

<?php


class MyService {

    public function Ping() {
        return date('d/m/Y H:i:s');
    }

}


$server = new SoapServer(null, array( 'soap_version' => SOAP_1_2, 'encoding' => 'UTF-8', 'uri' => 'http://tempuri.org/'));
$server->setClass("MyService");
$server->handle();

?>

请求

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
        xmlns:tem="http://tempuri.org/">
   <soapenv:Header/>
   <soapenv:Body>
      <tem:Ping />
   </soapenv:Body>
</soapenv:Envelope>

响应

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
   <SOAP-ENV:Body>
      <ns1:PingResponse>
         <return xsi:type="xsd:string">18/11/2010 18:51:02</return>
      </ns1:PingResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

客户期望的是PingResponse只包含日期但没有包裹在外面。如何让PHP SoapClient执行此操作?

E.g。

<ns1:PingResponse>18/11/2010 18:51:02</ns1:PingResponse>

1 个答案:

答案 0 :(得分:0)

我认为你不能,我认为这是写入SOAP的核心,所以这是你的客户必须解决的问题。如果他们已经获得了PingResponse的内容,我看不出他们更难以将1棵树更深入到响应中。