gpt4 book ai didi

将数组中的数组传递给属性时,PHP SoapClient "deserialize error"

转载 作者:可可西里 更新时间:2023-11-01 14:03:10 25 4
gpt4 key购买 nike

我使用 SoapClient 库从 TecDoc 网络服务获取数据。除了这个参数包含数组中的数组 的特殊函数外,所有 ws 函数都有效。

这是我的代码:

$client    = new SoapClient("http://webservice-cs.tecdoc.net/pegasus-2-0/wsdl", array("trace"     => true));

//array of product ids
$data = array(
'empty' => false,
'array' => array(361024, 365118),
);

$params = array(
'provider' => 23014,
'lang' => 'es',
'country' => 'es',
'articleId' => $data,
'attributs' => true,
'documents' => true,
'documentsData' => false,
'eanNumbers' => false,
'immediateAttributs' => true,
'immediateInfo' => false,
'info' => true,
'prices' => false,
'priceDate' => null,
'normalAustauschPrice' => false,
'mainArticles' => false,
'oeNumbers' => true,
'replacedNumbers' => false,
'replacedByNumbers' => false,
'usageNumbers' => false,
'normalAustauschPrice' => false,
);

$test = $client->__soapCall('getDirectArticlesByIds2', array('in0' => $params));

var_dump($test);

上述函数的目标是从他们的id(id数组)中获取所有产品的信息。

SoapClient 显示以下错误:

[soapenv:Server.userException] org.xml.sax.SAXException:SimpleDeserializer 在它试图反序列化的内容中遇到了一个子元素,这不是预期的。在 C:\xampp 1.8.1\htdocs\www\test.php:59 堆栈跟踪:#0 C:\xampp 1.8.1\htdocs\www\test.php(59): SoapClient->__soapCall('getDirectArticl. ..', 数组)

我不必将数组参数传递给属性的其他函数工作得很好。

我发现 'array' => array(361024, 365118) 导致了错误。如果我让数组为 NULL,上面的代码有效,只返回空结果(因为没有传递产品 ID)。

$data   = array(
'empty' => false,
'array' => null,
);

运行良好的函数示例:

static public function addDynamicIp($hour)
{
$client = new SoapClient("http://webservice-cs.tecdoc.net/pegasus-2-0/wsdl");
$params = array(
'provider' => 23014,
'address' => $_SERVER['REMOTE_ADDR'],
'validityHours' => $hour,
);

$client->__soapCall('addDynamicAddress', array('in0' => $params));
}

使用相同的参数(包含数组中的数组),NuSOAP 可以成功执行第一段代码,并返回正确的结果。但是 NuSOAP 带来的麻烦太多,尤其是速度慢。我们被迫使用 SoapClient。

所以我猜想 NuSOAP 库在某个地方可以将所有子数组转换为合适的格式,但 SoapClient 没有。尝试了一些解决方案但没有运气。请帮我解决这个问题。

最佳答案

TecDoc WebService Interface description”文档第 5 页的“已知兼容性问题”部分指出:

PHP does not implement different integer data types. Depending on the operating system an integer contains 32 or 64 bit. Therefore an automatic implicit mapping from int (32 bit) to long (64 bit) is done on discrete parameters which take a 64 bit value. However, this does not work with arrays, so there functions having arrays of strings containing the numeric values have to be used.

因此,据我所知,对于 PHP,您似乎应该使用 getDirectArticlesByIds2StringList 而不是 getDirectArticlesByIds2

关于将数组中的数组传递给属性时,PHP SoapClient "deserialize error",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18653103/

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