dak*_*ang 5 php serialization soap soap-client
我使用SoapClientLibrary从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没有.尝试了一些解决方案,但没有运气.请帮我解决这个问题.
小智 4
“ TecDoc WebService Interface 描述”文档第 5 页的“已知兼容性问题”部分指出:
PHP 不实现不同的整数数据类型。根据操作系统的不同,整数包含 32 位或 64 位。因此,从 int(32 位)到 long(64 位)的自动隐式映射是在采用 64 位值的离散参数上完成的。但是,这不适用于数组,因此必须使用具有包含数值的字符串数组的函数。
所以,据我所知,似乎对于 PHP 你应该使用getDirectArticlesByIds2StringList而不是getDirectArticlesByIds2.
| 归档时间: | 
 | 
| 查看次数: | 2153 次 | 
| 最近记录: |