gpt4 book ai didi

php - CakePHP SoapClient 删除字段?

转载 作者:搜寻专家 更新时间:2023-10-31 22:07:27 25 4
gpt4 key购买 nike

我的应用程序使用 CakePHP (2.2.5) 从 SOAP 服务器获取数据。我登录到 SoapSource.php 连接器以查看返回的 XML 并显示返回的数组:

$result = $this->client->__soapCall($method, array('parameters' => $tParams));
Logger::write('SOAP Last Response', $this->client->__getLastResponse(), 3, 'transaction');
Logger::write('SOAP Last Response Object', print_r($result, TRUE), 3, 'transaction');

但我在日志中看到的是 XML 中存在的两个(最近添加的)字段从数组中丢失,特别是 RPList 之前的最后两个(此处格式化但否则一字不差):

<transactionResult>
<id>test</id>
<resultCode>0</resultCode>
<ReadScheduledRecordingsRsp>
<RecordingDefinitionList>
<RecordingDefinition>
<RDId>d8c16d8f-67c6-469a-83c3-d51d8f8859a9</RDId>
<Title>The Young and the Restless</Title>
<SeriesId>4422</SeriesId>
<KeepUntil>SpaceIsNeeded</KeepUntil>
<StartPadSeconds>0</StartPadSeconds>
<EndPadSeconds>0</EndPadSeconds>
<Frequency>EveryDay</Frequency>
<KeepAtMost>0</KeepAtMost>
<Priority>23</Priority>
<ShowType>Any</ShowType>
<AirtimeDomain>SpecificTime</AirtimeDomain>
<ChannelDomain>SpecificChannel</ChannelDomain>
<RPList>
...

其次是:

ARRAY
(
[transactionResult] => stdClass Object
(
[id] => test
[resultCode] => 0
[ReadScheduledRecordingsRsp] => stdClass Object
(
[RecordingDefinitionList] => stdClass Object
(
[RecordingDefinition] => Array
(
[0] => stdClass Object
(
[RDId] => d8c16d8f-67c6-469a-83c3-d51d8f8859a9
[Title] => The Young and the Restless
[SeriesId] => 4422
[KeepUntil] => SpaceIsNeeded
[StartPadSeconds] => 0
[EndPadSeconds] => 0
[Frequency] => EveryDay
[KeepAtMost] => 0
[Priority] => 23
[ShowType] => Any
[RPList] => stdClass Object
(
...

我猜我只是忘了或不知道该做什么,但我不知道该做什么。只是很可疑,这两个不起作用的字段是刚刚添加的两个,但是我找不到枚举字段的地方。

WSDL 根本没有指定任何字段,只是在 transactionResult 中会有一堆数据。

在连接调用中,选项同样不指定任何字段。

一切正常,直到后端添加了这两个字段,并且一切仍然工作正常,除了我在对象中看不到 2 个新字段。

有什么想法吗?

最佳答案

如果能看到 RPList 的 XML 就好了。什么版本的 PHP/libxml?

你真的validated __getLastResponse() 返回的 XML?

在我看来,您对客户端使用的是 WSDL 模式,但您的 WSDL 文件不够精确。尝试使用 WSDL,它实际上描述了 API 提供的数据。

我是否理解转储时 $result 对象列出 RPList 但值不是您期望的值?如果是这样,您可以通过向客户端构造函数添加 SOAP_SINGLE_ELEMENT_ARRAYS 选项来逃避:new SoapClient($wsdl, array('features' => SOAP_SINGLE_ELEMENT_ARRAYS)); .不过,这是一个远景。需要查看 WSDL 和 __getLastResponse() 的完整输出。

有错误吗?尝试像这样包装电话:

try {

$client = new SoapClient ('http://yoursite.com?WSDL',
array("trace" => 1,
"exceptions" => true,
"cache_wsdl" => WSDL_CACHE_NONE,
"features" => SOAP_SINGLE_ELEMENT_ARRAYS)
);

$result = $client->SomeMethod($data);

} catch (SoapFault $exception) {
var_dump($exception);
} catch (Exception $exception) {
var_dump($exception);
}

如果不修复 WSDL/XML 响应,您的解决方法似乎是最佳解决方案。

关于php - CakePHP SoapClient 删除字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16467103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com