ライブラリを使用してSoapClient
、TecDoc Web サービスからデータを取得しました。パラメータに配列内の配列が含まれるこの特殊な関数を除いて、すべての 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 はそうではありません。いくつかの解決策を試しましたが、うまくいきませんでした。これを解決するのを手伝ってください。