Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 调用WSDL soap方法时出错-Microsoft.Web.Services.SoapFormatException_Php_Wsdl - Fatal编程技术网

Php 调用WSDL soap方法时出错-Microsoft.Web.Services.SoapFormatException

Php 调用WSDL soap方法时出错-Microsoft.Web.Services.SoapFormatException,php,wsdl,Php,Wsdl,我不熟悉SOAP和web服务,正在尝试使用PHP连接到供应商WSDL SOAP提供者。我已经成功地连接到API,并且能够下拉方法列表。但是,当我尝试对其中一个函数进行基本调用时,服务器返回了以下错误: Microsoft.Web.Services.SoapFormatException:输入不是有效的SOAP消息,因为它的名称(信封)错误,或者名称空间(信封)错误。位于Microsoft.Web.Services.SoapEnvelope.PostLoad()的Microsoft.Web.Ser

我不熟悉SOAP和web服务,正在尝试使用PHP连接到供应商WSDL SOAP提供者。我已经成功地连接到API,并且能够下拉方法列表。但是,当我尝试对其中一个函数进行基本调用时,服务器返回了以下错误:

Microsoft.Web.Services.SoapFormatException:输入不是有效的SOAP消息,因为它的名称(信封)错误,或者名称空间(信封)错误。位于Microsoft.Web.Services.SoapEnvelope.PostLoad()的Microsoft.Web.Services.SoapEnvelope.Load(流)的Microsoft.Web.Services.WebServicesExtension.BeforeDeserializeServer(SoapMessage消息)

这是我的web服务调用:

$soapConnection = new SoapClient("http://webapi.testsupplier.com/gvitawapi.asmx?WSDL",array('soap_version' => SOAP_1_2, 'uri' => "http://webapi.testsupplier.com/"));   
var_dump($soapConnection->GetAllTestDataXML());
这是供应商文档中的响应xml。我不确定我是否应该做些什么:

POST /gvitawapi.asmx HTTP/1.1
Host: webapi.testsupplier.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <GetAllTestDataXML xmlns="http://webapi.testsupplier.com/" />
  </soap12:Body>
</soap12:Envelope>
POST/gvitawapi.asmx HTTP/1.1
主持人:webapi.testsupplier.com
内容类型:应用程序/soap+xml;字符集=utf-8
内容长度:长度

如果您能提供任何想法,我们将不胜感激

事实证明,我可以通过在连接中切换到SOAP 1.1来实现这一点。无论出于何种原因,切换到1.2都会导致相同的错误。它还通过启用异常来获取完整的响应文本来帮助我进行调试。

此外,如果您想在调用这样的Web服务时传递参数,它并不像我预期的那样直接。我假设参数将在一个数组中传递,其中的值如下:
soapConnection->GetAllTestDataXML(数组('id'=>5678))
相反,参数必须进入父数组,键为'parameters':
$param=array('id'=>5678)
$soapConnection->GetAllTestDataXML(数组('parameters'=>$param))