2017-01-25 12 views
0

Я пытаюсь использовать определенные фильтры из удаленной веб-службы WSDL. Я не получаю ошибок при попытке сделать это, но все, что я получаю, это полный список данных с игнорируемыми этими параметрами.WSDL SOAP-вызов через PHP - игнорируются параметры

Вызов $client->__getFunctions() извлекает пустую страницу, поэтому я не уверен, что делать.

Это XML:

<s:element name="Entities"> 
    <s:complexType> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="Format" type="s:string"/> 
      <s:element minOccurs="0" maxOccurs="1" name="wherefilter" type="s:string"/> 
      <s:element minOccurs="0" maxOccurs="1" name="ordercondition" type="s:string"/> 
     </s:sequence> 
    </s:complexType> 
</s:element> 

И это, как я пытаюсь сделать это с PHP:

public static function fetch($name = 'Entities') 
{ 
    $base = 'http://tempuri.org/'; 

    $client = new \SoapClient(null, [ 
     'location' => '...', 
     'uri'  => '...', 
     'trace'  => 1, 
     'exceptions' => true 
    ]); 

    $params = ['Format' => 'JSON']; 

    try { 
     // $params is being ignored 
     $data = $client->__soapCall($name, $params, ['soapaction' => $base . $name]); 

     return $data; 
    } 
    catch (\SoapFault $ex) { 
     abort(403, $ex); 
    } 
    catch (Exception $ex) { 
     die($ex); 
    } 
} 

Любые намеки на то, что я делаю неправильно было бы оценено.

ответ

0

После обхода в Интернете ответа я должен был перестроить код, чтобы выполнить эту работу. Я не совсем уверен, почему старая установка не работала, но вот как это работает:

public static function fetch() 
{ 
    $options = [ 
     'trace'   => 1, 
     'exceptions' => true 
    ]; 

    $client = new \SoapClient('my_soap_url.asmx?WSDL', $options); 

    try { 
     $input = new \stdClass(); 
     $input->Format = "JSON"; 

     $data = $client->Entities($input); 

     return reset($data); 
    } 
    catch (Exception $ex) { 
     echo 'Caught exception: ', $e->getMessage(), PHP_EOL . PHP_EOL; 
     echo 'REQUEST:' . $client->__getLastRequestHeaders() . $client->__getLastRequest() . PHP_EOL . PHP_EOL; 
     echo 'RESPONSE:' . $client->__getLastResponseHeaders() . $client->__getLastResponse(); 
    } 
}