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().