Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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/SOAP不创建所需的xml请求_Php_Xml_Soap_Wsdl - Fatal编程技术网

PHP/SOAP不创建所需的xml请求

PHP/SOAP不创建所需的xml请求,php,xml,soap,wsdl,Php,Xml,Soap,Wsdl,我正在尝试将WSDL web服务与php/soap结合使用。它总是给出一个反序列化错误,确切地说: 反序列化操作“Test”的请求消息体时出错。OperationFormatter遇到无效的消息正文。应找到名为“Test”且命名空间为“”的节点类型“Element”。找到名为“parameters”和“namespace”的节点类型“Element” 当我使用WcfTestClient软件测试WSDL源代码时,没有出现任何问题,它会返回所需的结果 当我比较由SOAP创建的请求XML和由WcfTe

我正在尝试将WSDL web服务与php/soap结合使用。它总是给出一个反序列化错误,确切地说:

反序列化操作“Test”的请求消息体时出错。OperationFormatter遇到无效的消息正文。应找到名为“Test”且命名空间为“”的节点类型“Element”。找到名为“parameters”和“namespace”的节点类型“Element”

当我使用WcfTestClient软件测试WSDL源代码时,没有出现任何问题,它会返回所需的结果

当我比较由SOAP创建的请求XML和由WcfTestClient软件创建的XML时,我发现差异可能就是问题所在。名称空间和前缀似乎有问题,但我不知道如何解决它,或者是其他原因导致了这个问题

请求XMLs是这样的:

如果您需要PHP代码


我找不到确切的原因和解决办法,但这似乎有效

首先,当您为wsdl方法提供对象而不是数组时,您可以去掉项、值节点。节点将按对象名称创建

$a = $soap->Test(
       (object)array("login" => 
           (object)array(
               "FirmaId"      => 15, 
               "KullaniciAdi" => "Asdf", 
               "Parola"       => "Xyxy",
           )
       )
     );
之后,我实现了一个节点,而不是在请求xml中创建的节点。通过重写_doRequest方法并替换字符串,可以解决此问题,但仍然看不到响应。需要通过str_replace将节点包装为,最终获得所需的响应


正如我所说,这可能是一个暂时的解决办法。但是为我工作:)

您的PHP代码丢失了。还缺少WSDL URI。每个元素都有一个不同的名称,这导致了一种假设,即某些事情根本上是错的。比如不在SOAP客户机上使用WSDL?编辑以添加PHP代码。我不能给确切的网址服务,为此感到抱歉。我使用SOAP1是因为SOAP2给出的内容类型错误是“无法处理消息,因为内容类型是”应用程序/Soap+xml;字符集=utf-8;action=“urn:VWService/Test”不是预期的类型text/xml;charset=utf-8'此XML仍然缺失:
http://url.to/web/service.svc?wsdl
(WSDL文档)正如我所说,我无法共享到WSDL的确切链接。对此我很抱歉。它可以与其他工具(如soapUI或WcfTestClient)很好地配合使用。您认为WSDL文档会导致错误吗。顺便说一句,感谢您的关注。不过,我不能说,如果您不共享WSDL,任何人对此都无能为力。因为它是你的混音中的核心成分。这就像问“为什么我的车不能启动?”然后展示一张你最喜欢的车的照片,然后说:但是我不能给你展示我的车,但是在这里,这是我最喜欢的车。你能帮我在看这张我梦寐以求的车的照片时让我的车跑起来吗?不行。
$a = $soap->Test(
       (object)array("login" => 
           (object)array(
               "FirmaId"      => 15, 
               "KullaniciAdi" => "Asdf", 
               "Parola"       => "Xyxy",
           )
       )
     );