If you are using a WSDL, the library will strip out anything from your parameters that is not defined in WSDL, without giving you any notice about this.
So if your parameters are not fully matching the WSDL, it will simply send no parameters at all.
This can be a bit hard to debug if you don't have access to the target server.
__soapCall() expects parameters in an array called 'parameters' as opposed to calling the function via it's WSDL name, where it accepts the parameters as a plain array.
I.e. if a function called sendOrder expects a parameter (array) called orderDetails, you can call it like this:
$orderDetails = array(/* your data */);
$soap->sendOrder(array('orderDetails' => $orderDetails));
Which is equivalent to:
$client->__soapCall('sendOrder', array('parameters' => array('orderDetails' => $orderDetails)));
Note the additional 'parameters' key used in __soapCall().SoapClient::__call
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
SoapClient::__call
Референца за `soapclient.call.php` со подобрена типографија и навигација.
SoapClient::__call
класата mysqli_driver
SoapClient::__call — Повикува SOAP функција (застарено)
= NULL
Директното повикување на овој метод е застарено. Обично, SOAP функциите може да се повикаат како методи на SoapClient објект; во ситуации каде ова не е можно или се потребни дополнителни опции, користете SoapClient::__soapCall().
Параметри
name-
Името на SOAP функцијата што треба да се повика.
args-
Низа од аргументи што треба да се предадат на функцијата. Ова може да биде или подредена или асоцијативна низа. Имајте предвид дека повеќето SOAP сервери бараат имиња на параметри, во кој случај ова мора да биде асоцијативна низа.
Вратени вредности
SOAP функциите може да вратат една или повеќе вредности. Ако SOAP функцијата врати само една вредност, вратената вредност ќе биде скаларна. Ако се вратат повеќе вредности, наместо тоа се враќа асоцијативна низа од именувани излезни параметри.
При грешка, ако SoapClient објектот е конструиран со exceptions објектот е креиран со false, а SoapFault објектот ќе биде вратен.
Белешки од корисници 2 забелешки
extend of __call thats adds a retry to handle the occasional 'Could not connect to host' exceptions
<?php
class LocalSoapClient extends SoapClient
{
public function __call($function_name, $arguments)
{
$result = false;
$max_retries = 5;
$retry_count = 0;
while(! $result && $retry_count < $max_retries)
{
try
{
$result = parent::__call($function_name, $arguments);
}
catch(SoapFault $fault)
{
if($fault->faultstring != 'Could not connect to host')
{
throw $fault;
}
}
sleep(1);
$retry_count ++;
}
if($retry_count == $max_retries)
{
throw new SoapFault('Could not connect to host after 5 attempts');
}
return $result;
}
}
?>