如何使用 PHP 中返回复杂类型的 Web 服务?
-
23-09-2019 - |
题
我在用 PHP 5.2.10 我正在尝试使用一个返回的网络服务 复杂数据类型 使用 标准 SOAP 扩展.
问题是 SoapClient 不会填充嵌套到其他对象/对象数组中的对象。当我调用 getUtente 方法并指定“my_unique_id”作为参数时得到的简化示例如下:
stdClass Object
(
[getUtenteReturn] => stdClass Object
(
[userName] => my_unique_id
[fieldOne] => ...
[fieldTwo] => ...
[utilizzatore] => stdClass Object
( // This is EMPTY instead of containing a series of userName's
)
)
)
WDSL描述的相关部分是:
<element name="getUtenteResponse">
<complexType>
<sequence>
<element name="getUtenteReturn" type="tns1:Cliente"/>
</sequence>
</complexType>
</element>
...
<complexType name="Utilizzatore">
<sequence>
<element name="userName" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
...
<complexType name="Cliente">
<complexContent>
<extension base="tns1:Utilizzatore">
<sequence>
<element name="fieldOne" nillable="true" type="xsd:string"/>
<element name="fieldTwo" nillable="true" type="xsd:string"/>
<element name="utilizzatore" nillable="true" type="impl:ArrayOf_tns1_Utilizzatore"/>
</sequence>
</extension>
</complexContent>
</complexType>
我发现我并不是唯一遇到这个问题的人。特别是我发现 这条评论 在 PHP 官方文档中和 这个其他论坛条目 就如何解决问题给出两种不同的想法,但我无法转变这两种想法 想法 变成一个 工作解决方案:我似乎不完全理解给出的例子背后的逻辑。
如果有人能在这方面指导我,我将不胜感激:另一个网络服务上的一些工作代码将受到欢迎,但我主要追求的是真正理解问题和所提出的解决方案的逻辑(鱼道,而不是鱼!)。:)
解决方案
老问题,没有答案。我最近偶然在这篇文章中,解释该问题,并给出了解决方案:的消费用PHP SOAP的complexType web服务。
其他提示
下面是我的顶头的想法,对不起,这不是正确的答案,只是一些想法...
首先,你试图观看发送给皂服务器SOAP请求(信封)?它看起来像它应该工作?你可以看到它是怎么了?你只是得到一个错误回来,一个的SOAPFault,或错误的数据,或者什么都没有?
其次,你试图使用SoapParam
类?
最后,我敢肯定,你这样做是对的,但我注意到你正在构建的对象具有用户名和fieldOne和fieldTwo并排所有的一面,但你的WSDL显示,fieldOne和fieldTwo是类Cliente的一部分(从未在你的例子示出了),而用户名应该是内部的utilizzatore阵列的,所以不宜它更像:
stdClass Object
(
[Cliente] => stdClass Object
(
[fieldOne] => ...
[fieldTwo] => ...
[utilizzatore] => stdClass Object
( // This is EMPTY instead of containing a series of userName's
)
)
)
SoapClient类外是非常令人沮丧的我,所以不要采取任何这有什么批评,因为我只希望通过提供了思路,可以帮助您更好地了解它自己。
Mac,非常感谢您的及时回复。看看我摔倒了什么..我之前没有看过这个。因此想分享 这.