我有一个关于 PHP 中的 SOAP 调用的问题。有一个名为“DoBulkOperation”的网络服务,它接受一个列表,做某事,并返回一个列表,其中包含关于它所做的事情的信息。这里重要的是,请求的每个列表元素在响应中具有相同索引处的对应项。
我得到的回应是这样的:
<Body>
<DoBulkOperationResponse>
<items>
<OperationResponse>
<result>17</result>
</OperationResponse>
<Error>Some error occured</Error>
<OperationResponse>
<result>18</result>
</OperationResponse>
<OperationResponse>
<result>19</result>
</OperationResponse>
<OperationResponse>
<result>20</result>
</OperationResponse>
</items>
</DoBulkOperationResponse>
</Body>
那是对我要求的正确回应。现在,我可以说,请求中的第二个列表元素有问题。
我从 PHP SoapClient 得到的不是我所期望的:
object(stdClass)#49 (1) {
["items"]=>
object(stdClass)#51 (2) {
["OperationResponse"]=>
array(4) {
[0]=>
object(stdClass)#53 (1) {
["customerID"]=>
int(17)
}
[1]=>
object(stdClass)#52 (1) {
["customerID"]=>
int(18)
}
[2]=>
object(stdClass)#50 (1) {
["customerID"]=>
int(19)
}
[3]=>
object(stdClass)#54 (1) {
["customerID"]=>
int(20)
}
}
["Error"]=>
string(17) "Some error occured"
}
}
元素的顺序完全被打破了。现在,不可能决定哪个请求元素导致哪个响应元素。
在 WSDL 中,“项目”被定义为序列。
有没有办法强制 SoapClient 实例保留响应的结构?
此致,
马库斯