PHP SoapClient 格式错误的 xml

2024-03-26

我正在使用 SOAP 与 php 中的 Web 服务进行通信。这是我的代码:

$data = array('name' => 'test', 'age' => 20);
$WDSL = 'http://xxx.xxxxx.xxx/wdsl.ibs?wsdl';
$SOAP = new SoapClient($WDSL, array('trace' => true));
$RESULT = $SOAP->__soapCall('Some_Service', $data);

由于某种原因,XML 是错误的:

<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:Some_Crap"><SOAP-ENV:Body><ns1:Some_Service/><param1>test</param1><param2>20</param2> ...

XML 节点名称为何是 paramX,而它应该是变量名称?我究竟做错了什么 ??

Thanks

更新 : 所以我列出了该网络服务的功能,我得到的是:

Some_Service_Response Some_Service(Some_Service $parameters))

我改变了我的电话,所以现在是:

$SOAP->__call('Some_Service', array('Some_Service', $data));

XML 仍然是错误的:

<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="
http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="urn:iwaysoftware:ibse:jul2003:HR_Master"><SOAP-ENV:Body><ns1:Some_Service/>
<param1><item><key>SomeKey</key><value>SomeValue</value> ....

我仍然得到<param1><item><key>SomeKey</key><value>SomeValue</value> instead of <Somekey>SomeValue</Somekey>

那么问题是,是 Web 服务无法正常工作还是我这边的问题?


The SoapClient类根据服务的 WSDL 进行了许多更正,例如删除无效标签。检查WSDL,可能包含参数名称为param1 and param2.

Calling SoapClient::__getFunctions() and SoapClient::__getTypes()转储结果可以很好地总结 PHP 从 WSDL 中理解的内容。


(OP更新了输出的问题后SoapClient::__getFunctions() is:

Some_Service_Response Some_Service(Some_Service $parameters))

)

通常数组键是参数名称,而不是类型。所以我的第一个猜测是:

$SOAP->__call('Some_Service', array('parameters', $data));

但问题可能出在服务器端。 WSDL 不兼容性有时需要手动调整 WSDL 文件,以便 PHP 发出与您想要的相同的 XML。

但在进行任何黑客攻击之前(如果有机会的话)请务必在没有 PHP 的情况下尝试该服务查看服务对不同 XML 文件的反应。一个不错的程序叫SoapUI http://www.soapui.org/可以为您做到这一点,它会自动生成 XML 存根来测试。 (我只在使用需要数字签名的 Web 服务的 SoapUI 时遇到问题。)

根据 XML 测试的结果,您可能需要:

  • 手动调整 WSDL
  • 手动生成 XML 文件并将其发送到 Web 服务器(最后的手段)
  • 如果 XML 几乎正确,则只需要进行一些小的微调,您也可以从SoapClient类并覆盖SoapClient::__doRequest方法在提交到服务器之前对 XML 文件进行字符串操作(通过调用__dorequest的基类)。举个例子,当我使用此解决方案时,Web 服务需要在某些标签上重新发送某些 XML 属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP SoapClient 格式错误的 xml 的相关文章

随机推荐