我使用SoapClient
Library 从 TecDoc webservices 获取数据。所有 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 encountered a child element, which is NOT expected, in something it was trying to deserialize. in C:\xampp 1.8.1\htdocs\www\test.php:59 Stack trace: #0 C:\xampp 1.8.1\htdocs\www\test.php(59): SoapClient->__soapCall('getDirectArticl...', Array)
我不必将数组参数传递给属性的其他函数可以正常工作。
我发现这'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 没有。尝试了一些解决方案,但没有运气。请帮我解决这个问题。