我遇到了一个问题,我找不出如何解决。我已经在php中创建了一个soap客户端,它应该对web服务执行xml请求 - 服务通过SoapUI工作,但是每当我通过我的php客户端发送相同的请求时,我会得到以下错误代码:PHP肥皂客户端 - 发送错误的标题“soapenv:VersionMismatch”
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<soapenv:Fault>
<faultcode>**soapenv:VersionMismatch**</faultcode>
<faultstring>**Transport level information does not match with SOAP Message namespace URI**</faultstring>
<detail></detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
现在
,同时在客户端,并用肥皂1.2版本正在使用的服务,我相信这个问题是在客户端,所以这里是我是如何定义它:
$options = array(
'trace' => true,
'exceptions' => 1,
'style' => SOAP_DOCUMENT,
'use' => SOAP_LITERAL,
'soap_version' => SOAP_1_2,
);
$client = new SoapClient("location_of_the_wsdl", $options);
在请求我使用以下代码:
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:soapenc="http://www.w3.org/2003/05/soap-encoding" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Header/>
<env:Body>
<ns2:FunctionName xmlns:ns2="namespace_of_the_service">
<arg0>
<data1>?</data1>
</arg0>
</ns2:FunctionName>
</env:Body>
</env:Envelope>
在soapUI中,这给我一个“错误”的结果,因为data1留下了?,当我写入有效数据时它返回true。
我也注意到,在soapUI中我发送和接收内容类型application/soap+xml
,但是当我通过PHP客户端进行操作时,我发送和接收标头为Content-Type text/xml
;
可能是什么问题?我为客户使用nusoap.php
。
我做到了。它是100%1.2 - 如果我在客户端调用中更改版本,我会得到不匹配版本的错误,但使用'您只能使用SOAP 1.2'的错误串:/ – Iv3
好的。你使用的是什么标题? 'Content-Type'等。你可以在这里发表。 –
我确实认为这个问题必须在SourceForge的nusoap.php中 - 根据这个:http://sourceforge.net/projects/nusoap/forums/forum/193578/topic/3947116当我在请求中使用soap 1.2的东西时它不会工作,所以现在我正在重写nusoap来使用soap 1.2 - 希望这能解决问题。但欢迎任何其他想法(或解决方案使用肥皂1.2与一些其他PHP类如nusoap) – Iv3